Ⅰ 数据结构题目(编程类)
二叉树的遍历有三种方法:前序也称先序(先根节点然后先左后右);中序(先左后根最后右);后序(先左后右最后根)。具体到你这道题是要求后序排序,一定要按照“先左后右最后根”的顺序遍历。分析过程是这样的:
从a出发,有左节点b,b有左节点d,d有左节点h,h无左节点; (h)
h有右节点i,根节点 d;(h->i->d)
d有右节点e,根节点 b;(h->i->d->e->b)
b有右节点c,c有左节点f,右节点g;(h->i->d->e->b->f->g->c)
最后,对于按节点,左节点b、右节点c都遍历完了,因此加入a;(h->i->d->e->b->f->g->c->a)
Ⅱ 数据结构程序题目
第二道题:
main()
{
int a,b,c,x;
char y;
a=0;
b=0;
c=0;
x=1;
printf("请输入,a,b,c。结束输入n");
for (;x;)
{
scanf("%c",y);
if(y=="a")
a++;
else
if (y=="b")
b++;
else
if(y=="c")
c++;
esle
if (y=="n")
x=0;
else
printf("错误");
}
printf("a被输入了%d次",a);
printf("b被输入了%d次",b);
printf("c被输入了%d次",c);
}
Ⅲ 数据结构(基于C语言)编译问题
你这没有其他函数也没要求,我不知道你到底想要什么答案。根据你用文字的提示,我重新给你编了一个程序,希望是你想要的。希望能帮上你的忙。
#include "stdio.h"
typedef int ElemType;
typedef struct node
{ ElemType data;
struct node *next;
}slink;
slink *crelink(int n)
{ slink *head,*p,*s; int i;
p=head=(slink *)malloc(sizeof(slink));
for(i=0;i<n;i++)
{ s=(slink *)malloc(sizeof(slink));
scanf("%d",&s->data);
p->next=s;
p=s;
}
p->next=NULL;
return head;
}
void list(slink *head)
{ slink *p;
p=head->next;
while(p)
{ printf("%5d",p->data);
p=p->next;
}
printf("\n");
}
void *convert(slink *head)
{ slink *p=head->next;
slink *n=NULL;
slink *t;
while(p)
{ t=p->next;
p->next=n;
head->next=p;
n=p;
p=t;
}
}
main()
{ slink *H;
clrscr();
H=crelink(8);
list(H);
convert(H);
list(H);
}
Ⅳ 数据结构的题目
请注意这个词:第一趟排序后
填堆第一趟排序后最后面的不一定是最大的
Ⅳ 数据结构题目求高手帮忙,详细答案
你这个题目有问题,ai 这种写法编译会出错,我觉得这道题的本意应该是a[i]。
(1)算法功能:在数组a中下标小于n的成员中查找,返回偶数下标成员中值为k的成员下标,若无,返回奇数下标成员中值为k的成员下标,都无,返回-1;
(2)返回结果4,进行了3次比较(不包括for循环中控制变量i的比较),即:a[0]、a[2]、a[4]都与k进行了比较,a[4]=k,循环结束,返回 4 ;
(3)返回-1,因为没有找到满足条件的成员,进行了8次比较(不包括for循环中控制变量i的比较),下标为0、2、4、6、1、3、5、7的成员依次与K进行比较,都不相等,所以返回-1。
Ⅵ 数据结构的一些题目(C语言)
1.
int lenth(LNode * head)
{
LNode *p;
int i
p=head;
while(p)
{
++i;
p=p->next;
}
return i;
}
2.
int max(LNode * head)
{
LNode *p;
LNode *q;
elemtype maxelem;//具体的数据类型我不知道,所以用了elemtype
p=head;
maxelem=p->data;
while(p)
{
p=p->next;
if(p->data > maxekem)
{
maxelem=p->data;
q=p; /*将最大的位置记录下来*/
}
p=head;
while(p!=q)
{
p=p->next;
++i; /*找到最大值的位子,并记录是第几个节点*/
}
return i; /*在一个函数中只能有一个返回值,最大值你可以打印出来,这里我就不写了*/
}
}
3、
int inset_after(LNode *head,x,y)
{
LNode *p;
LNode *q;
p=head;
while(p && p->data!=x)
p=p->next;
if(!p) return 0;//没有找到
q=(LNode *)malloc(sizeof(LNode))
q->data=y;
q->next=p->next;
p->next=q;
return 1;//找到
}
4、int merge(LNode *L)
{
LNode *p;
LNode *q;
int i;
q=L;
p=create();
p->next=p->next->next;//去除头结点
i=5
while(q && i<0) //如果要插入的带头结点的链表的话,是i<=0
{ q=q->next;
i--;
}
if(!p) return 0;//要插入的链表的结点数小于5,退出,返回0
}
Ⅶ 数据结构题目
本人原创,已通过编译,速度采纳亲
#include<stdio.h>
#include<stdlib.h>
#define MAXSIZE 100
#define INCREMENT 10
#define TURE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define OVERFLOW -2
typedef char elemtype;
typedef struct
{
elemtype * top;
elemtype * base;
int stacksize;
}stack;
int initstack(stack &S)
{
S.base=(elemtype *)malloc(MAXSIZE * sizeof(elemtype));
if(!S.base) exit(OVERFLOW);
S.top=S.base;
S.stacksize=MAXSIZE;
return OK;
}
elemtype gettop(stack S)
{
if(S.top==S.base) return '\0';
return *(S.top-1);
}
int push(stack &S,elemtype e)
{
if(S.top-S.base>=S.stacksize)
{
S.base=(elemtype *)realloc(S.base,(S.stacksize+INCREMENT)*sizeof(elemtype));
if(!S.base) exit(OVERFLOW);
S.top=S.base+S.stacksize;
S.stacksize+=INCREMENT;
}
*S.top++=e;
return OK;
}
int pop(stack &S,elemtype &e)
{
if(S.top==S.base)
return ERROR;
e=*--S.top;
return OK;
}
int in(elemtype c)
{
if('0'<=c&&'9'>=c)
return 0;
return 1;
}
int exchange(elemtype c)
{
switch(c)
{
case '+':return 1;
case '-':return 2;
case '*':return 3;
case '/':return 4;
case '(':return 5;
case ')':return 6;
case '#':return 7;
}
}
int precede(char a,char b)
{
int x,y;
x=exchange(a)-1;
y=exchange(b)-1;
int list[7][7]={{1,1,-1,-1,-1,1,1},{1,1,-1,-1,-1,1,1},{1,1,1,1,-1,1,1},{1,1,1,1,-1,1,1},{-1,-1,-1,-1,-1,0,-2},{1,1,1,1,-2,1,1},{-1,-1,-1,-1,-1,-2,0}};
return list[x][y];
}
elemtype operate(elemtype a,elemtype theta,elemtype b)
{
switch(theta)
{
case '+':
return (a-'0'+b);
case '-':
return (a-b+'0');
case '*':
return ((a-'0')*(b-'0')+'0');
case '/':
return ((a-'0')/(b-'0')+'0');
}
}
elemtype count()
{
stack optr,opnd;
initstack(optr);
push(optr,'#');
initstack(opnd);
elemtype c;
c=getchar();
elemtype x,a,b,theta;
while(c!='#'||gettop(optr)!='#')
{
if(!in(c))
{
push(opnd,c);
c=getchar();
}
else
switch(precede(gettop(optr),c))
{
case -1:
push(optr,c);
c=getchar();
break;
case 0:
pop(optr,x);
c=getchar();
break;
case 1:
pop(optr,theta);
pop(opnd,b);
pop(opnd,a);
push(opnd,operate(a,theta,b));
break;
}
}
return gettop(opnd);
}
int main(void)
{
printf("输入表达式\n");
int m=count()-'0';
printf("结果为%d\n",m);
return 0;
}
Ⅷ 数据结构题目求助!
程序有几个问题:
1、#include"TreeBase.h"
你的treeBase.h文件名错了。
2、#include"TreeBase.h"
#include"BiTree.h"应为#include"BiTree.h"在前、#include"TreeBase.h"在后
3、Status CreateTree(BiTree *T)
中的while(getchar() != '\n'); //消除回车影响(必须加入此句,否则会无限输入)
这句必须删除,否则真会无限输入
Ⅸ 数据结构题目 跪求解答。。。。。
既然是常见的题目,题目需要用什么数据结构肯定很明显,猜题不是很好猜,因为数据结构挺多,但是拿到题目后应该很容易抽象模型。。如果抽象出的模型是先进后出(就像火车进站,先进的后出去)那么用栈,先进先出(像排队),就用队列。数据范围很大却又要快速取最大值或最小值,建堆。快速查找元素用平衡树,对于很长的数列却又要有插入,删除操作,用块状链表。
Ⅹ 数据结构题怎么写,要c语言过程
1、算法有啦一个大致的雏形后,想清楚算法的流程,然后先将主程序打好,细节先用过程与函数代替。
2、然后再完善细节部分。
3、最后构造一些数据测试。
建议构造3种数据。
第一种随机生成的大数据,以检验程序在平均情况下的时间效率。
第二种是人工构造的奇葩/猥琐数据,且最好能确定答案,以检验其正确性,比如贪心的一些可能的反例。
最后一种是人工构造的特殊数据,比如,在有关树的题目中,将输入中的树退化成一条链。