Ⅰ 數據結構題目(編程類)
二叉樹的遍歷有三種方法:前序也稱先序(先根節點然後先左後右);中序(先左後根最後右);後序(先左後右最後根)。具體到你這道題是要求後序排序,一定要按照「先左後右最後根」的順序遍歷。分析過程是這樣的:
從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種數據。
第一種隨機生成的大數據,以檢驗程序在平均情況下的時間效率。
第二種是人工構造的奇葩/猥瑣數據,且最好能確定答案,以檢驗其正確性,比如貪心的一些可能的反例。
最後一種是人工構造的特殊數據,比如,在有關樹的題目中,將輸入中的樹退化成一條鏈。