數(shù)據(jù)結(jié)構(gòu)上機(jī)考試(含答案)_第1頁(yè)
數(shù)據(jù)結(jié)構(gòu)上機(jī)考試(含答案)_第2頁(yè)
數(shù)據(jù)結(jié)構(gòu)上機(jī)考試(含答案)_第3頁(yè)
數(shù)據(jù)結(jié)構(gòu)上機(jī)考試(含答案)_第4頁(yè)
數(shù)據(jù)結(jié)構(gòu)上機(jī)考試(含答案)_第5頁(yè)
已閱讀5頁(yè),還剩49頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、數(shù)據(jù)結(jié)構(gòu)上機(jī)練習(xí)題1、設(shè)有兩個(gè)有序序列 , 利用歸并排序?qū)⑺鼈兣懦捎行虮?,并輸出。2、設(shè)有一有序序列 , 從鍵盤輸入一個(gè)數(shù) , 判別是否在序列中 ,如果在輸出 “YSE”;否則, 將它插入到序列中使它仍然有序 , 并輸出排序后的序列。3、設(shè)有一有序序列 ,從鍵盤輸入一個(gè)數(shù) ,判別是否在序列中 ,如果不在 ,則輸出 “NO”,否則 ,將它從序列中刪除它 , 并輸出刪除后的序列。4、從鍵盤輸入一組任意數(shù)據(jù) ,建立一個(gè)有序鏈表 , 并從鏈頭開始輸出該鏈 ,使 輸出結(jié)果是有序的。5、從鍵盤輸入一組任意數(shù)據(jù) ,建立一個(gè)包含所有輸入數(shù)據(jù)的單向循環(huán)鏈表 , 并 從鏈表的任意開始 , 依次輸出該鏈表中的所有

2、結(jié)點(diǎn)。10、設(shè)有一個(gè)鏈表 ,( 自己建立, 數(shù)據(jù)從鍵盤輸入 ), 再?gòu)逆I盤輸入一個(gè)數(shù) ,判別 是否在鏈表中 , 如果不在 , 則輸出“ NO“,否則, 將它從鏈表中刪除 , 并輸出刪除后的 鏈表。11、設(shè)有一個(gè)鏈表 ,( 自己建立, 數(shù)據(jù)從鍵盤輸入 ), 再?gòu)逆I盤輸入一個(gè)數(shù) ,判別 是否在鏈表中,如果在輸出“ YSE”,否則,將它從插入到鏈頭 ,并輸出插入后的鏈表。12、設(shè)有一個(gè)鏈表 ,( 自己建立, 數(shù)據(jù)從鍵盤輸入 ), 再?gòu)逆I盤輸入一個(gè)數(shù) ,判別是否在鏈表中,如果在輸出“ YSE”,否則,將它從插入到鏈尾 ,并輸出插入后的鏈表。13、編寫棧的壓棧 push、彈棧 pop函數(shù), 從鍵盤輸入一

3、組數(shù)據(jù) ,逐個(gè)元素壓入堆棧, 然后再逐個(gè)從棧中彈出它們并輸出14、編寫棧的壓棧 push、彈棧 pop函數(shù),用它判別() 的匹配問題15、按類似先序遍歷結(jié)果輸入一序列, 建立一棵二叉樹 ( 算法6、4), 輸出二叉樹中序遍歷的結(jié)果。16、按類似先序遍歷結(jié)果輸入一序列, 建立一棵二叉樹 ( 算法6、4), 輸出二叉樹先序遍歷的結(jié)果。17、按類似先序遍歷結(jié)果輸入一序列, 建立一棵二叉樹 ( 算法6、4), 輸出二叉樹后序遍歷的結(jié)果。18、按類似先序遍歷結(jié)果輸入一序列, 建立一棵二叉樹 ( 算法6、4), 輸出二叉樹的總結(jié)點(diǎn)數(shù)。19、按類似先序遍歷結(jié)果輸入一序列, 建立一棵二叉樹 ( 算法6、4),

4、 輸出二叉樹葉子結(jié)點(diǎn)數(shù)。20、按類似先序遍歷結(jié)果輸入一序列, 建立一棵二叉樹 ( 算法6、4), 輸出此二叉樹的高度。21、給出一個(gè)無(wú)向圖的鄰接矩陣 , 輸出各個(gè)頂點(diǎn)的度。22、給出一個(gè)有向圖的鄰接矩陣 , 輸出各個(gè)頂點(diǎn)的入度與出度。,如在, 則輸23、輸入一個(gè)有序序列 , 利用折半查找來(lái)查找一個(gè)數(shù)是否在序列中 出其位置 ,否則輸出“ NO”。24、用插入排序方法對(duì)一組數(shù)據(jù)進(jìn)行排序 , 并輸出每趟排序的結(jié)果。25、用選擇排序方法對(duì)一組數(shù)據(jù)進(jìn)行排序 , 并輸出每趟排序的結(jié)果。26、用希爾 (SHELL)排序方法對(duì)一組數(shù)據(jù)進(jìn)行排序 ,并輸出每趟排序的結(jié)果。27、用快速排序方法對(duì)一組數(shù)據(jù)進(jìn)行排序 ,

5、 并輸出每趟排序的結(jié)果。 答案:1. #include <stdio.h>#include <stdlib.h>#define N 5#define NULL 0/ 鏈表的存儲(chǔ)結(jié)構(gòu)typedef struct LNodeint data;struct LNode *next;LNode,*list;/ 順序創(chuàng)建鏈表void creatList(list &l,int n)int i;list p,q;l=(list)malloc(sizeof(LNode); /開辟頭結(jié)點(diǎn)p=l; / 指針 p 指向頭結(jié)點(diǎn)for(i=0;i<n;i+)q=(list)mal

6、loc(sizeof(LNode); / 新的結(jié)點(diǎn)scanf("%d",&q->data);p->next=q; /p 的下一個(gè)結(jié)點(diǎn)指向新開辟的結(jié)點(diǎn) qp=q; / 將 p 指針指向 qp->next=NULL;/ 歸并排序void mergeList(list &la,list &lb,list &lc) / 將已經(jīng)排好序的 la,lb 中的數(shù)重新排列成有序 ( 非遞減 ) list pa,pb,pc;pa=la->next;pb=lb->next;lc=pc=la; / 默認(rèn)將 la 做為 lc 的頭結(jié)點(diǎn) (

7、lb 亦可 )while(pa&&pb) / 讓 pc 接到數(shù)據(jù)小的結(jié)點(diǎn)上 , 直到 pa,pb 兩者有一指向空結(jié)點(diǎn) if(pa->data<=pb->data) pc->next=pa;pc=pa;pa=pa->next; else pc->next=pb;pc=pb;pb=pb->next; pc->next=pa?pa:pb; / 如果最后 la 有剩余結(jié)點(diǎn) , 即將其直接加入到 lc 中 , 反 之將 lb 的剩余結(jié)點(diǎn)加到 lc 中free(lb);void printList(list l)list p;p=l->

8、next;while(p) printf("%d ",p->data);p=p->next;void main()list la,lb,lc;printf(" 創(chuàng)建兩個(gè)含 %d個(gè)元素的鏈表 , 請(qǐng)輸入 :n",N);creatList(la,N);creatList(lb,N);mergeList(la,lb,lc);printList(lc);2. #include <stdio.h>#include <stdlib.h>#define N 5#define NULL 0#define OK 1#define ERR

9、OR 0/ 鏈表的存儲(chǔ)結(jié)構(gòu)typedef struct LNodeint data;struct LNode *next;LNode,*list;/ 創(chuàng)建鏈表void creatList(list &l,int n)list p,q;l=(list)malloc(sizeof(LNode);p=l;for(int i=0;i<n;i+)q=(list)malloc(sizeof(LNode);scanf("%d",&q->data);p->next=q;p->next=NULL;/ 判斷元素 e 是否在鏈表中int inList(li

10、st l,int e)list p;p=l->next;while(p)if(p->data=e)return OK; / 發(fā)現(xiàn)在里面 , 返回真值p=p->next; / 否則指針后移 ,繼續(xù)找return ERROR; / 未找到,返回假值 (沒有執(zhí)行 return OK; 語(yǔ)句)/ 插入元素void insertList(list &l,int &e)list p,q,s; /q為新插入的元素開辟一個(gè)存儲(chǔ)空間的指針 ,s 為 p前一個(gè)指針, 方便插入p=l->next;s=l;while(p)if(e<=p->data)/ 發(fā)現(xiàn)要插入的

11、元素 e比后面的小,開辟空間,并將 e放入空間的數(shù)據(jù)域中 q=(list)malloc(sizeof(LNode);q->data=e;while(s->next!=p) s=s->next; /找到 p 前的一個(gè)指針q->next=p; /畫圖好好理解 ->s->p->s->next=q; / q->break;p=p->next;/ 輸出鏈表void printList(list l)list p;while(p) printf("%d ",p->data); p=p->next;void main

12、()list l;int e;printf(" 創(chuàng)建%d個(gè)元素的鏈表 , 請(qǐng)輸入 %d個(gè)元素:n",N,N);creatList(l,N);printf(" 請(qǐng)輸入要判斷的元素 :");scanf("%d",&e);if(inList(l,e)printf("YES ");elseinsertList(l,e); printList(l);3. #include <stdio.h> #include <stdlib.h> #define N 5 #define NULL 0 #def

13、ine OK 1 #define ERROR 0 / 鏈表的存儲(chǔ)結(jié)構(gòu) typedef struct LNode int data;struct LNode *next;LNode,*list;/ 創(chuàng)建鏈表void creatList(list &l,int n)list p,q;l=(list)malloc(sizeof(LNode);p=l;for(int i=0;i<n;i+)q=(list)malloc(sizeof(LNode);scanf("%d",&q->data);p->next=q;p=q;p->next=NULL;/

14、 判斷元素 e 是否在鏈表中int insertDeleteList(list l,int e)list p,q;p=l->next; q=l;while(p)if(p->data=e)while(q->next!=p) q=q->next; /找到 p 前一個(gè)結(jié)點(diǎn) , 方便刪除操作q->next=p->next; / 刪除結(jié)點(diǎn) pfree(p);return OK; / 發(fā)現(xiàn)在里面 , 返回真值p=p->next; / 否則指針后移 ,繼續(xù)找return ERROR; / 未找到,返回假值 (沒有執(zhí)行 return OK; 語(yǔ)句) / 輸出鏈表voi

15、d printList(list l)list p;p=l->next;while(p) printf("%d ",p->data); p=p->next;void main()list l;int e;printf(" 創(chuàng)建%d個(gè)元素的鏈表 , 請(qǐng)輸入 %d個(gè)元素:n",N,N);creatList(l,N);printf(" 請(qǐng)輸入要判斷的元素 ");scanf("%d",&e);if(!insertDeleteList(l,e)printf("NO ");else

16、printList(l);4. #include <stdio.h> #include <stdlib.h> #define N 5 #define NULL 0 #define OK 1 #define ERROR 0 / 鏈表的存儲(chǔ)結(jié)構(gòu) typedef struct LNode int data;struct LNode *next; LNode,*list;/ 創(chuàng)建鏈表void creatList(list &l,int n)list p,q;l=(list)malloc(sizeof(LNode);p=l;for(int i=0;i<n;i+)q=

17、(list)malloc(sizeof(LNode);scanf("%d",&q->data);p->next=q;p=q;p->next=NULL;/ 鏈表排序void sortList(list &l)list p,q,r; /p標(biāo)記排序的輪數(shù)int chang; / 用于交換結(jié)點(diǎn)中的數(shù)據(jù)p=l->next;while(p->next!=NULL)q=l->next; / 每次比較從首結(jié)點(diǎn)開始while(q->next!=NULL)r=q->next;if(q->data>r->data)

18、 / 發(fā)現(xiàn)前一個(gè)比后一個(gè)大 , 交換數(shù)據(jù) chang=q->data;q->data=r->data;r->data=chang; q=q->next; / 相鄰間下一個(gè)比較p=p->next; / 下一輪比較/ 輸出鏈表void printList(list l)list p;p=l->next;while(p) printf("%d ",p->data); p=p->next;void main()list l;printf(" 創(chuàng)建%d個(gè)元素的鏈表 , 請(qǐng)輸入 %d個(gè)元素:n",N,N);cre

19、atList(l,N);sortList(l);printList(l);5. #include <stdio.h>#include <stdlib.h>#define N 5#define NULL 0#define OK 1#define ERROR 0/ 鏈表的存儲(chǔ)結(jié)構(gòu)typedef struct LNodeint data;struct LNode *next;LNode,*list;/ 創(chuàng)建鏈表void creatList(list &l,int n)list p,q;l=(list)malloc(sizeof(LNode);scanf("%

20、d",&l->data); / 頭結(jié)點(diǎn)也添加元素 , 方便輸出p=l;for(int i=1;i<n;i+)q=(list)malloc(sizeof(LNode);scanf("%d",&q->data);p->next=q;p=q;p->next=l; / 讓最后一個(gè) p->next 指針指向頭結(jié)點(diǎn) , 構(gòu)成循環(huán)鏈表/ 輸出鏈表void printList(list l,int pos)list p,q;int i;p=l;for(i=1;i<pos-1;i+) p=p->next; /找到指定位

21、置的前一個(gè)位置q=p->next;doif(pos=1) printf("%d ",p->data); p=p->next; / 如果指定位置為 1, 即按原樣輸出else p=p->next; printf("%d ",p->data); /不然 ,p 先移到指定的位置 ,輸出其數(shù)據(jù)while(p->next!=q); / 結(jié)束條件 (p 移到的下一個(gè)位置不是 q, 即不是最初的 p, 完成循環(huán)輸出 )void main()list l;int pos;printf(" 創(chuàng)建%d個(gè)元素的循環(huán)鏈表 , 請(qǐng)輸入

22、 %d個(gè)元素 :n",N,N);creatList(l,N);printf(" 請(qǐng)指明從第幾個(gè)位置輸出循環(huán)鏈表中的元素 :");scanf("%d",&pos);while(pos<=0|pos>N) printf(" 輸入的位置不存在 ,請(qǐng)重新輸入 . "); scanf("%d",&pos);printList(l,pos);11#include <stdio.h>#include <stdlib.h>#define N 5#define NULL

23、0#define OK 1#define ERROR 0/ 鏈表的存儲(chǔ)結(jié)構(gòu)typedef struct LNodeint data;struct LNode *next;LNode,*list;/ 創(chuàng)建鏈表void creatList(list &l,int n)list p,q;l=(list)malloc(sizeof(LNode);scanf("%d",&l->data); / 頭結(jié)點(diǎn)也添加元素 , 方便輸出p=l;for(int i=1;i<n;i+)q=(list)malloc(sizeof(LNode);scanf("%d&

24、quot;,&q->data);p->next=q;p=q;p->next=l; / 讓最后一個(gè) p->next 指針指向頭結(jié)點(diǎn) , 構(gòu)成循環(huán)鏈表/ 輸出鏈表void printList(list l,int pos)list p,q;int i;for(i=1;i<pos-1;i+) p=p->next; /找到指定位置的前一個(gè)位置q=p->next;doif(pos=1) printf("%d ",p->data); p=p->next; /如果指定位置為 1,即按原樣輸出else p=p->next;

25、 printf("%d ",p->data); /不然 ,p 先移到指定的位置 ,輸出其數(shù)據(jù)while(p->next!=q); /結(jié)束條件 (p 移到的下一個(gè)位置不是 q, 即不是最初的p, 完成循環(huán)輸出 )void main()list l;int pos;printf(" 創(chuàng)建%d個(gè)元素的循環(huán)鏈表 , 請(qǐng)輸入 %d個(gè)元素 :n",N,N); creatList(l,N);printf(" 請(qǐng)指明從第幾個(gè)位置輸出循環(huán)鏈表中的元素 :"); scanf("%d",&pos);while(pos

26、<=0|pos>N)printf(" 輸入的位置不存在 ,請(qǐng)重新輸入 . "); scanf("%d",&pos);printList(l,pos);12#include <stdio.h>#include <stdlib.h>#define N 5#define NULL 0#define OK 1#define ERROR 0/ 鏈表的存儲(chǔ)結(jié)構(gòu) typedef struct LNodeint data;struct LNode *next;LNode,*list;/ 創(chuàng)建鏈表void creatList(l

27、ist &l,int n)l=(list)malloc(sizeof(LNode); p=l;for(int i=0;i<n;i+)q=(list)malloc(sizeof(LNode);scanf("%d",&q->data);p->next=q;p=q;p->next=NULL;/ 判斷元素 e 是否在鏈表中int inList(list l,int e)list p,q;q=p=l->next;while(p)if(p->data=e)return OK; / 發(fā)現(xiàn)在里面 , 返回真值p=p->next; /

28、 否則指針后移 ,繼續(xù)找/ 沒有執(zhí)行 return OK; 語(yǔ)句 , 說(shuō)明未找到while(q->next!=p) q=q->next; /找到鏈尾p->data=e; / 接p=(list)malloc(sizeof(LNode); / 為鏈尾重新開辟空間 到鏈尾p->next=q->next;q->next=p;return ERROR; / 未找到 , 返回假值/ 輸出鏈表void printList(list l)list p;p=l->next;while(p) printf("%d ",p->data); p=p-

29、>next;void main()list l;int e;printf(" 創(chuàng)建%d個(gè)元素的鏈表 , 請(qǐng)輸入 %d個(gè)元素:n",N,N);creatList(l,N);printf(" 請(qǐng)輸入要判斷的元素 :");scanf("%d",&e);if(inList(l,e)printf("YES ");elseprintList(l);13#include <stdio.h>#include <stdlib.h>#define OK 1#define Error 0#defin

30、e NULL 0#define maxSize 100/ 棧的存儲(chǔ)結(jié)構(gòu)typedef structint *base;int *top;int size;stack;/ 棧的初始化 (順序存儲(chǔ) )int initStack(stack &s) / 開辟 maxSize 大小的空間 ,base 和 top 都指向基地址 , 同時(shí)判斷是否開辟 成功, 不成功返回 0if(!(s.base=s.top=(int*)malloc(maxSize*sizeof(int) return Error;s.size=maxSize; / 棧的大小為 maxSizereturn OK;/ 進(jìn)棧操作int

31、 push(stack &s,int e)*s.top=e; /先將元素 e 賦值給 s.top 所指的存儲(chǔ)空間s.top+; /top指針上移return OK;/ 出棧操作int pop(stack &s,int &e)if(s.base=s.top) return Error; /如果棧為空 , 返回 0s.top-; /top指針先后移e=*s.top; /將其所指的元素值賦給 e return e;void main()stack s;int n,e;printf(" 請(qǐng)輸入要?jiǎng)?chuàng)建棧的元素的個(gè)數(shù) :");scanf("%d&quo

32、t;,&n);initStack(s);for(int i=0;i<n;i+)scanf("%d",&e);push(s,e);while(s.base!=s.top)printf("%d ",pop(s,e);14#include <stdlib.h>#include <stdio.h>#include <stdio.h>#include <stdlib.h>#define stackincrement 8#define OK 1#define Error 0#define NULL

33、 0#define maxSize 100/ 棧的存儲(chǔ)結(jié)構(gòu)typedef structchar *base; / 由于要存放括號(hào) , 所以為 char 類型 char *top; int size;stack;/ 棧的初始化 (順序存儲(chǔ) )int initStack(stack &s) / 注意開辟的空間為 char 類型 if(!(s.base=s.top=(char*)malloc(maxSize*sizeof(char) returnError;s.size=maxSize; / 棧的大小為 maxSizereturn OK;/ 進(jìn)棧操作int push(stack &s

34、,int e)*s.top=e; / 先將元素 e 賦值給 s.top 所指的存儲(chǔ)空間s.top+; /top 指針上移return OK;int isEmpty(stack s)return s.base=s.top?OK:Error;/ 出棧操作char pop(stack &s,char &e)if(isEmpty(s) return Error; / 如果棧為空 , 返回 0s.top-; /top指針先后移e=*s.top; / 將其所指的元素值賦給 ereturn e;/ 括號(hào)匹配int match()stack s;initStack(s);char ch100,

35、e;int flag=1,i=0 ,lenth; /flag用于標(biāo)記 , 如果匹配 , 值為 1, 否則為 0scanf("%c",&chi);while(chi!='n') scanf("%c",&ch+i); / 先將所有輸入的括號(hào)存放在 數(shù)組 ch 中 lenth=i-1; /數(shù)組的長(zhǎng)度 , 不包括 'n'i=0;push(s,chi); / 先將第一個(gè)括號(hào)壓棧if(chi=''|chi=')'|chi='') flag=0; / 如果第一個(gè)壓入的是 右

36、括號(hào) , 則肯定不匹配,flag=0else while(i<lenth)/|!emptystack(s)i+;char t;if(chi=''|chi=')'|chi='') t=pop(s,e); /彈出先前壓入的元素 , 將后繼輸入的括號(hào)與先前壓入的比較if(t!=chi-1)&&(t!=chi-2) flag=0;break; /左右小括號(hào)與左右大括號(hào)的 ASCII碼都相差 1,左右中括號(hào)相差 2,如果不滿足,則不匹配,直接退出循環(huán) else push(s,chi); /輸入的是左括號(hào) , 直接壓入if(!isEmp

37、ty(s) flag=0; / 通過不斷的壓棧和彈棧 , 如果最后棧不為空 , 則 肯定是左括號(hào)多于右括號(hào) , 不匹配return flag;void main()int result;printf(" 判斷輸入的各種括號(hào)是否匹配 :n");result=match();if(result) printf(" 括號(hào)匹配正確 _n");else printf(" 括號(hào)匹配錯(cuò)誤 *.*n");15#include "stdio.h"#include "stdlib.h"#define stackin

38、itsize 100#define OK 1#define ERROR 0/ 二叉樹的二叉鏈表存儲(chǔ)結(jié)構(gòu)typedef struct BiTNodeint data;struct BiTNode *lchild,*rchild; /左右孩子指針BiTnode,*BiTree;int CreateBiTree(BiTree &T)/ 按先序次序輸入二叉樹中結(jié)點(diǎn)的值 (一個(gè)字符 ), 空格字符表示空樹/ 構(gòu)造二叉鏈表表示的二叉樹 T.char ch;scanf("%c",&ch);if(ch=' ') T=NULL;elseif(!(T=(BiTN

39、ode *)malloc(sizeof(BiTNode) exit(0);T->data=ch; / 生成根結(jié)點(diǎn)CreateBiTree(T->lchild);/ 構(gòu)造左子樹CreateBiTree(T->rchild);/ 構(gòu)造右子樹return OK;/CreateBiTreeint PrintElement(int e) / 輸出元素 e 的值printf("%c",e);return OK;int InOrderTraverse(BiTree T,int(*Visit)(int e)/ 采用二叉鏈表存儲(chǔ)結(jié)構(gòu) ,visit 是對(duì)數(shù)據(jù)元素操作的應(yīng)用函數(shù)

40、/ 中序遍歷二叉樹 T的遞歸算法 , 對(duì)每個(gè)數(shù)據(jù)元素調(diào)用函數(shù) visit 。/ 調(diào)用實(shí)例 :InOrderTraverse(T,printElement);if(T)if (InOrderTraverse(T->lchild,Visit)if (V isit(T->data)if (InOrderTraverse(T->rchild,Visit) return OK;return ERROR;else return OK;void main()BiTree t;printf(" 請(qǐng)按先序遍歷輸入二叉樹 ( 當(dāng)左右子樹為空時(shí)用空格輸入 )n");Create

41、BiTree(t);printf(" 該二叉樹的中序遍歷為 :n");InOrderTraverse(t,PrintElement);printf("n");16#include "stdio.h"#include "stdlib.h"#define stackinitsize 100#define OK 1#define ERROR 0/ 二叉樹的二叉鏈表存儲(chǔ)結(jié)構(gòu)typedef struct BiTNodeint data;struct BiTNode *lchild,*rchild; /左右孩子指針BiTnod

42、e,*BiTree;int CreateBiTree(BiTree &T)/ 按先序次序輸入二叉樹中結(jié)點(diǎn)的值 (一個(gè)字符 ), 空格字符表示空樹 / 構(gòu)造二叉鏈表表示的二叉樹 T.char ch;scanf("%c",&ch);if(ch=' ') T=NULL;elseif(!(T=(BiTNode *)malloc(sizeof(BiTNode) exit(0);T->data=ch; / 生成根結(jié)點(diǎn)CreateBiTree(T->lchild);/ 構(gòu)造左子樹CreateBiTree(T->rchild);/ 構(gòu)造右子

43、樹return OK;/CreateBiTreeint PrintElement(int e) / 輸出元素 e 的值printf("%c",e);return OK;int PreOrderTraverse(BiTree T,int(*Visit)(int e)/ 采用二叉鏈表存儲(chǔ)結(jié)構(gòu) ,visit 是對(duì)數(shù)據(jù)元素操作的應(yīng)用函數(shù)/ 先序遍歷二叉樹 T的遞歸算法 , 對(duì)每個(gè)數(shù)據(jù)元素調(diào)用函數(shù) visit/ 調(diào)用實(shí)例 :PreOrderTraverse(T,printElement);if(T)if (V isit(T->data)if (PreOrderTraverse(

44、T->lchild,Visit)if (PreOrderTraverse(T->rchild,Visit) return OK;return ERROR;else return OK;/preOrderTraV ersevoid main()BiTree t;printf(" 請(qǐng)按先序遍歷輸入二叉樹 ( 當(dāng)左右子樹為空時(shí)用空格輸入 )n");CreateBiTree(t);printf(" 該二叉樹的先序遍歷為 :n");PreOrderTraverse(t,PrintElement);printf("n");17#inc

45、lude "stdio.h"#include "stdlib.h"#define stackinitsize 100#define OK 1#define ERROR 0/ 二叉樹的二叉鏈表存儲(chǔ)結(jié)構(gòu)typedef struct BiTNodeint data;struct BiTNode *lchild,*rchild; /左右孩子指針BiTnode,*BiTree;int CreateBiTree(BiTree &T)/ 按先序次序輸入二叉樹中結(jié)點(diǎn)的值 (一個(gè)字符 ), 空格字符表示空樹/ 構(gòu)造二叉鏈表表示的二叉樹 T.char ch;scan

46、f("%c",&ch);if(ch=' ') T=NULL;elseif(!(T=(BiTNode *)malloc(sizeof(BiTNode) exit(0);T->data=ch; / 生成根結(jié)點(diǎn)CreateBiTree(T->lchild);/ 構(gòu)造左子樹CreateBiTree(T->rchild);/ 構(gòu)造右子樹return OK;/CreateBiTreeint PrintElement(int e) / 輸出元素 e 的值printf("%c",e);return OK;int PostOrde

47、rTraverse(BiTree T,int(*Visit)(int e)/ 采用二叉鏈表存儲(chǔ)結(jié)構(gòu) ,visit 是對(duì)數(shù)據(jù)元素操作的應(yīng)用函數(shù)/ 后序遍歷二叉樹 T的遞歸算法 , 對(duì)每個(gè)數(shù)據(jù)元素調(diào)用函數(shù) visit/ 調(diào)用實(shí)例 :PostOrderTraverse(T,printElement);if(T)if (PostOrderTraverse(T->lchild,Visit)if (PostOrderTraverse(T->rchild,V isit)if (V isit(T->data)return OK;return ERROR;else return OK;void

48、 main()BiTree t;printf(" 請(qǐng)按先序遍歷輸入二叉樹 ( 當(dāng)左右子樹為空時(shí)用空格輸入 )n"); CreateBiTree(t);printf(" 該二叉樹的后序遍歷為 :n");PostOrderTraverse(t,PrintElement);printf("n");18#include "stdio.h"#include "stdlib.h"#define stackinitsize 100#define OK 1#define ERROR 0/#define NULL 0static int count=0;/ 二叉樹的二叉鏈表存儲(chǔ)結(jié)構(gòu)typedef struct BiTNodeint data;struct BiTNode *lchild,*rchild; /左右孩子指針BiTnode,*BiT

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論