![數(shù)據(jù)結(jié)構(gòu)上機(jī)考試(含答案)_第1頁](http://file3.renrendoc.com/fileroot_temp3/2021-12/29/392a7569-4433-4251-bb8f-f0aa6c95ce8c/392a7569-4433-4251-bb8f-f0aa6c95ce8c1.gif)
![數(shù)據(jù)結(jié)構(gòu)上機(jī)考試(含答案)_第2頁](http://file3.renrendoc.com/fileroot_temp3/2021-12/29/392a7569-4433-4251-bb8f-f0aa6c95ce8c/392a7569-4433-4251-bb8f-f0aa6c95ce8c2.gif)
![數(shù)據(jù)結(jié)構(gòu)上機(jī)考試(含答案)_第3頁](http://file3.renrendoc.com/fileroot_temp3/2021-12/29/392a7569-4433-4251-bb8f-f0aa6c95ce8c/392a7569-4433-4251-bb8f-f0aa6c95ce8c3.gif)
![數(shù)據(jù)結(jié)構(gòu)上機(jī)考試(含答案)_第4頁](http://file3.renrendoc.com/fileroot_temp3/2021-12/29/392a7569-4433-4251-bb8f-f0aa6c95ce8c/392a7569-4433-4251-bb8f-f0aa6c95ce8c4.gif)
![數(shù)據(jù)結(jié)構(gòu)上機(jī)考試(含答案)_第5頁](http://file3.renrendoc.com/fileroot_temp3/2021-12/29/392a7569-4433-4251-bb8f-f0aa6c95ce8c/392a7569-4433-4251-bb8f-f0aa6c95ce8c5.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、數(shù)據(jù)結(jié)構(gòu)上機(jī)練習(xí)題1、設(shè)有兩個有序序列 , 利用歸并排序?qū)⑺鼈兣懦捎行虮?,并輸出。2、設(shè)有一有序序列 , 從鍵盤輸入一個數(shù) , 判別是否在序列中 ,如果在輸出 “YSE”;否則, 將它插入到序列中使它仍然有序 , 并輸出排序后的序列。3、設(shè)有一有序序列 ,從鍵盤輸入一個數(shù) ,判別是否在序列中 ,如果不在 ,則輸出 “NO”,否則 ,將它從序列中刪除它 , 并輸出刪除后的序列。4、從鍵盤輸入一組任意數(shù)據(jù) ,建立一個有序鏈表 , 并從鏈頭開始輸出該鏈 ,使 輸出結(jié)果是有序的。5、從鍵盤輸入一組任意數(shù)據(jù) ,建立一個包含所有輸入數(shù)據(jù)的單向循環(huán)鏈表 , 并 從鏈表的任意開始 , 依次輸出該鏈表中的所有
2、結(jié)點(diǎn)。10、設(shè)有一個鏈表 ,( 自己建立, 數(shù)據(jù)從鍵盤輸入 ), 再從鍵盤輸入一個數(shù) ,判別 是否在鏈表中 , 如果不在 , 則輸出“ NO“,否則, 將它從鏈表中刪除 , 并輸出刪除后的 鏈表。11、設(shè)有一個鏈表 ,( 自己建立, 數(shù)據(jù)從鍵盤輸入 ), 再從鍵盤輸入一個數(shù) ,判別 是否在鏈表中,如果在輸出“ YSE”,否則,將它從插入到鏈頭 ,并輸出插入后的鏈表。12、設(shè)有一個鏈表 ,( 自己建立, 數(shù)據(jù)從鍵盤輸入 ), 再從鍵盤輸入一個數(shù) ,判別是否在鏈表中,如果在輸出“ YSE”,否則,將它從插入到鏈尾 ,并輸出插入后的鏈表。13、編寫棧的壓棧 push、彈棧 pop函數(shù), 從鍵盤輸入一
3、組數(shù)據(jù) ,逐個元素壓入堆棧, 然后再逐個從棧中彈出它們并輸出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、給出一個無向圖的鄰接矩陣 , 輸出各個頂點(diǎn)的度。22、給出一個有向圖的鄰接矩陣 , 輸出各個頂點(diǎn)的入度與出度。,如在, 則輸23、輸入一個有序序列 , 利用折半查找來查找一個數(shù)是否在序列中 出其位置 ,否則輸出“ NO”。24、用插入排序方法對一組數(shù)據(jù)進(jìn)行排序 , 并輸出每趟排序的結(jié)果。25、用選擇排序方法對一組數(shù)據(jù)進(jìn)行排序 , 并輸出每趟排序的結(jié)果。26、用希爾 (SHELL)排序方法對一組數(shù)據(jù)進(jìn)行排序 ,并輸出每趟排序的結(jié)果。27、用快速排序方法對一組數(shù)據(jù)進(jìn)行排序 ,
5、 并輸出每趟排序的結(jié)果。 答案:1. #include <stdio.h>#include <stdlib.h>#define N 5#define NULL 0/ 鏈表的存儲結(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 的下一個結(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)建兩個含 %d個元素的鏈表 , 請輸入 :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/ 鏈表的存儲結(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; 語句)/ 插入元素void insertList(list &l,int &e)list p,q,s; /q為新插入的元素開辟一個存儲空間的指針 ,s 為 p前一個指針, 方便插入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 前的一個指針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個元素的鏈表 , 請輸入 %d個元素:n",N,N);creatList(l,N);printf(" 請輸入要判斷的元素 :");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 / 鏈表的存儲結(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 前一個結(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; 語句) / 輸出鏈表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個元素的鏈表 , 請輸入 %d個元素:n",N,N);creatList(l,N);printf(" 請輸入要判斷的元素 ");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 / 鏈表的存儲結(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)前一個比后一個大 , 交換數(shù)據(jù) chang=q->data;q->data=r->data;r->data=chang; q=q->next; / 相鄰間下一個比較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個元素的鏈表 , 請輸入 %d個元素: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/ 鏈表的存儲結(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; / 讓最后一個 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、置的前一個位置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 移到的下一個位置不是 q, 即不是最初的 p, 完成循環(huán)輸出 )void main()list l;int pos;printf(" 創(chuàng)建%d個元素的循環(huán)鏈表 , 請輸入
22、 %d個元素 :n",N,N);creatList(l,N);printf(" 請指明從第幾個位置輸出循環(huán)鏈表中的元素 :");scanf("%d",&pos);while(pos<=0|pos>N) printf(" 輸入的位置不存在 ,請重新輸入 . "); 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/ 鏈表的存儲結(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; / 讓最后一個 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; /找到指定位置的前一個位置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 移到的下一個位置不是 q, 即不是最初的p, 完成循環(huán)輸出 )void main()list l;int pos;printf(" 創(chuàng)建%d個元素的循環(huán)鏈表 , 請輸入 %d個元素 :n",N,N); creatList(l,N);printf(" 請指明從第幾個位置輸出循環(huán)鏈表中的元素 :"); scanf("%d",&pos);while(pos
26、<=0|pos>N)printf(" 輸入的位置不存在 ,請重新輸入 . "); 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/ 鏈表的存儲結(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; 語句 , 說明未找到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個元素的鏈表 , 請輸入 %d個元素:n",N,N);creatList(l,N);printf(" 請輸入要判斷的元素 :");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/ 棧的存儲結(jié)構(gòu)typedef structint *base;int *top;int size;stack;/ 棧的初始化 (順序存儲 )int initStack(stack &s) / 開辟 maxSize 大小的空間 ,base 和 top 都指向基地址 , 同時判斷是否開辟 成功, 不成功返回 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 所指的存儲空間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(" 請輸入要創(chuàng)建棧的元素的個數(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/ 棧的存儲結(jié)構(gòu)typedef structchar *base; / 由于要存放括號 , 所以為 char 類型 char *top; int size;stack;/ 棧的初始化 (順序存儲 )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 所指的存儲空間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;/ 括號匹配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); / 先將所有輸入的括號存放在 數(shù)組 ch 中 lenth=i-1; /數(shù)組的長度 , 不包括 'n'i=0;push(s,chi); / 先將第一個括號壓棧if(chi=''|chi=')'|chi='') flag=0; / 如果第一個壓入的是 右
36、括號 , 則肯定不匹配,flag=0else while(i<lenth)/|!emptystack(s)i+;char t;if(chi=''|chi=')'|chi='') t=pop(s,e); /彈出先前壓入的元素 , 將后繼輸入的括號與先前壓入的比較if(t!=chi-1)&&(t!=chi-2) flag=0;break; /左右小括號與左右大括號的 ASCII碼都相差 1,左右中括號相差 2,如果不滿足,則不匹配,直接退出循環(huán) else push(s,chi); /輸入的是左括號 , 直接壓入if(!isEmp
37、ty(s) flag=0; / 通過不斷的壓棧和彈棧 , 如果最后棧不為空 , 則 肯定是左括號多于右括號 , 不匹配return flag;void main()int result;printf(" 判斷輸入的各種括號是否匹配 :n");result=match();if(result) printf(" 括號匹配正確 _n");else printf(" 括號匹配錯誤 *.*n");15#include "stdio.h"#include "stdlib.h"#define stackin
38、itsize 100#define OK 1#define ERROR 0/ 二叉樹的二叉鏈表存儲結(jié)構(gòu)typedef struct BiTNodeint data;struct BiTNode *lchild,*rchild; /左右孩子指針BiTnode,*BiTree;int CreateBiTree(BiTree &T)/ 按先序次序輸入二叉樹中結(jié)點(diǎn)的值 (一個字符 ), 空格字符表示空樹/ 構(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)/ 采用二叉鏈表存儲結(jié)構(gòu) ,visit 是對數(shù)據(jù)元素操作的應(yīng)用函數(shù)
40、/ 中序遍歷二叉樹 T的遞歸算法 , 對每個數(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(" 請按先序遍歷輸入二叉樹 ( 當(dāng)左右子樹為空時用空格輸入 )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/ 二叉樹的二叉鏈表存儲結(jié)構(gòu)typedef struct BiTNodeint data;struct BiTNode *lchild,*rchild; /左右孩子指針BiTnod
42、e,*BiTree;int CreateBiTree(BiTree &T)/ 按先序次序輸入二叉樹中結(jié)點(diǎn)的值 (一個字符 ), 空格字符表示空樹 / 構(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)/ 采用二叉鏈表存儲結(jié)構(gòu) ,visit 是對數(shù)據(jù)元素操作的應(yīng)用函數(shù)/ 先序遍歷二叉樹 T的遞歸算法 , 對每個數(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(" 請按先序遍歷輸入二叉樹 ( 當(dāng)左右子樹為空時用空格輸入 )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/ 二叉樹的二叉鏈表存儲結(jié)構(gòu)typedef struct BiTNodeint data;struct BiTNode *lchild,*rchild; /左右孩子指針BiTnode,*BiTree;int CreateBiTree(BiTree &T)/ 按先序次序輸入二叉樹中結(jié)點(diǎn)的值 (一個字符 ), 空格字符表示空樹/ 構(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)/ 采用二叉鏈表存儲結(jié)構(gòu) ,visit 是對數(shù)據(jù)元素操作的應(yīng)用函數(shù)/ 后序遍歷二叉樹 T的遞歸算法 , 對每個數(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(" 請按先序遍歷輸入二叉樹 ( 當(dāng)左右子樹為空時用空格輸入 )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;/ 二叉樹的二叉鏈表存儲結(jié)構(gòu)typedef struct BiTNodeint data;struct BiTNode *lchild,*rchild; /左右孩子指針BiTnode,*BiT
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度二零二五版校企合作人才培養(yǎng)合作辦班協(xié)議
- 2025年度海上風(fēng)電場施工合同費(fèi)用測算方法
- 電動車的全方位安全保障體系構(gòu)建與實(shí)施
- 生態(tài)旅游發(fā)展與自然保護(hù)的協(xié)同效應(yīng)
- 現(xiàn)代服務(wù)業(yè)中的人才培養(yǎng)與教育需求
- 2025年中國封裝用陶瓷外殼行業(yè)投資分析、市場運(yùn)行態(tài)勢、未來前景預(yù)測報告
- 甲基四氫苯酐產(chǎn)品質(zhì)量監(jiān)管的法規(guī)與政策
- 結(jié)婚儀式上新郎講話稿6篇
- 2025年度建筑水電安裝工程安全責(zé)任合同范本
- 2025年度環(huán)保型綠色建筑項(xiàng)目農(nóng)民工勞動合同書
- 華為研發(fā)部門績效考核制度及方案
- CSC資助出國博士聯(lián)合培養(yǎng)研修計劃英文-research-plan
- 《環(huán)境管理學(xué)》教案
- 2025年蛇年年度營銷日歷營銷建議【2025營銷日歷】
- (一模)寧波市2024學(xué)年第一學(xué)期高考模擬考試 數(shù)學(xué)試卷(含答案)
- 攝影入門課程-攝影基礎(chǔ)與技巧全面解析
- 冀少版小學(xué)二年級下冊音樂教案
- 【龍集鎮(zhèn)稻蝦綜合種養(yǎng)面臨的問題及優(yōu)化建議探析(論文)13000字】
- 父母贈與子女農(nóng)村土地協(xié)議書范本
- 《師范硬筆書法教程(第2版)》全套教學(xué)課件
- 中國聯(lián)通H248技術(shù)規(guī)范
評論
0/150
提交評論