版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)題 目: 線索二叉樹的生成及其遍歷 學(xué) 院: 理學(xué)院 班 級(jí): 數(shù)學(xué)13-2班 學(xué) 生 姓 名:孫晴、張炳赫、張美娜、董自鵬 學(xué) 生 學(xué) 號(hào): 8、12、13、22 指 導(dǎo) 教 師: 張?zhí)l(fā) 2014 年 12月 24日課程設(shè)計(jì)任務(wù)書姓名X y z s班級(jí)設(shè)計(jì)題目線索二叉樹的生成及其遍歷理論要點(diǎn)二叉樹的遍歷本質(zhì)上是將一個(gè)復(fù)雜的非線性結(jié)構(gòu)轉(zhuǎn)換為線性結(jié)構(gòu),使每個(gè)結(jié)點(diǎn)都有且僅有一個(gè)直接前驅(qū)結(jié)點(diǎn)和直接后繼結(jié)點(diǎn)(第一個(gè)結(jié)點(diǎn)無前驅(qū),最后一個(gè)結(jié)點(diǎn)無后繼)。但是二叉樹中每個(gè)結(jié)點(diǎn)在這個(gè)序列中的直接前驅(qū)結(jié)點(diǎn)和直接后繼結(jié)點(diǎn)是什么?二叉樹的存儲(chǔ)結(jié)構(gòu)中并沒有反映出來,只能在對(duì)二叉樹遍歷的動(dòng)態(tài)過程中得到這
2、些信息。為了保留結(jié)點(diǎn)在某種遍歷序列中直接前驅(qū)喝直接后繼的位置信息,有兩種方法。一是在結(jié)點(diǎn)結(jié)構(gòu)中增加向前和向后的指針fwd和bkd,這種方法增加了存儲(chǔ)開銷,不可??;二是利用二叉樹的二叉鏈表的那些空指針域來指示。建立線索二叉樹,或者說對(duì)二叉樹線索化,實(shí)質(zhì)上就是遍歷一棵二叉樹。在遍歷過程中,訪問結(jié)點(diǎn)的操作是檢查當(dāng)前的左,右指針域是否為空,將它們改為指向前驅(qū)結(jié)點(diǎn)或后續(xù)結(jié)點(diǎn)的線索。為實(shí)現(xiàn)這一過程,設(shè)指針pre始終指向剛剛訪問的結(jié)點(diǎn),即若指針p指向當(dāng)前結(jié)點(diǎn),則pre指向它的前驅(qū),以便設(shè)線索。 另外,在對(duì)一顆二叉樹加線索時(shí),必須首先申請(qǐng)一個(gè)頭結(jié)點(diǎn),建立頭結(jié)點(diǎn)與二叉樹的根結(jié)點(diǎn)的指向關(guān)系,對(duì)二叉樹線索化后,還需
3、建立最后一個(gè)結(jié)點(diǎn)與頭結(jié)點(diǎn)之間的線索。中序線索二叉樹:若結(jié)點(diǎn)的ltag=1,lchild指向其前驅(qū);否則,該結(jié)點(diǎn)的前驅(qū)是以該結(jié)點(diǎn)為根的左子樹上按中序遍歷的最后一個(gè)結(jié)點(diǎn)。若rtag=1,rchild指向其后繼;否則,該結(jié)點(diǎn)的后驅(qū)是以該結(jié)點(diǎn)為根的右子樹上按中序遍歷的第一個(gè)結(jié)點(diǎn)。設(shè)計(jì)目標(biāo)以二叉鏈表作為存儲(chǔ)結(jié)構(gòu)時(shí),只能找到結(jié)點(diǎn)的左、右孩子的信息,而得不到結(jié)點(diǎn)的前驅(qū)與后繼信息,為了使這種信息只有在遍歷的動(dòng)態(tài)過程中才能得到。增設(shè)兩個(gè)指針分別指示其前驅(qū)結(jié)點(diǎn)和后繼結(jié)點(diǎn),并且利用結(jié)點(diǎn)的空鏈域存放(線索鏈表)。同時(shí)為了記下遍歷過程中訪問結(jié)點(diǎn)的先后關(guān)系,附設(shè)一個(gè)指針pre始終指向剛剛訪問過的結(jié)點(diǎn),若指針 p 指向當(dāng)前
4、訪問的結(jié)點(diǎn),則 pre指向它的前驅(qū)。由此得到中序遍歷建立中序線索化鏈表的算法預(yù)期結(jié)果對(duì)已生成的二叉樹進(jìn)行中序線索化并利用中序線索實(shí)現(xiàn)對(duì)二叉樹的遍歷。小組人員具體分工 s:報(bào)告填寫 z:程序設(shè)計(jì)、運(yùn)行 y:答辯 x:ppt設(shè)計(jì)制作計(jì)劃與進(jìn)步的安排在兩周(共10天)內(nèi)完成課程設(shè)計(jì),具體安排如下: 1.查找所需要的相關(guān)資料,進(jìn)行整理; 2天 2.系統(tǒng)學(xué)習(xí)相關(guān)理論和算法,設(shè)計(jì)總體流程; 2天 3.編寫源代碼,上機(jī)調(diào)試,并進(jìn)行修改逐步完善代碼; 3天 4.編寫課程設(shè)計(jì)報(bào)告; 2天 5.進(jìn)行后續(xù)整理工作。 1天目錄摘要I1 題目分析1 1.1相關(guān)思想及概念介紹.1 1.2線索二叉樹的結(jié)構(gòu).1 1.3需求分
5、析.2 2概要設(shè)計(jì)2 2.1抽象數(shù)據(jù)類型的定義.3 2.2主程序的流程.3 2.3各程序模塊之間的層次(調(diào)用)關(guān)系.53詳細(xì)設(shè)計(jì)64調(diào)試分析105用戶使用說明106 測(cè)試結(jié)果117課程設(shè)計(jì)體會(huì)128 參考文獻(xiàn)129 源程序13摘要針對(duì)以二叉鏈表作為存儲(chǔ)結(jié)構(gòu)時(shí),只能找到結(jié)點(diǎn)的左、右孩子的信息,而得不到結(jié)點(diǎn)的前驅(qū)與后繼信息,為了使這種信息只有在遍歷的動(dòng)態(tài)過程中才能得到。增設(shè)兩個(gè)指針分別指示其前驅(qū)和后繼,并且利用結(jié)點(diǎn)的空鏈域存放(線索鏈表)。同時(shí)為了記下遍歷過程中訪問結(jié)點(diǎn)的先后關(guān)系,附設(shè)一個(gè)指針pre始終指向剛剛訪問過的結(jié)點(diǎn),若指針 p 指向當(dāng)前訪問的結(jié)點(diǎn),則 pre指向它的前驅(qū)。由此得到中序遍歷建
6、立中序線索化鏈表的算法本文通過建立二叉樹, 實(shí)現(xiàn)二叉樹的中序線索化并實(shí)現(xiàn)中序線索二叉樹的遍歷。實(shí)現(xiàn)對(duì)已生成的二叉樹進(jìn)行中序線索化并利用中序線索實(shí)現(xiàn)對(duì)二叉樹的遍歷的效果。關(guān)鍵詞:二叉樹,中序線索二叉樹,中序線索二叉樹的遍歷II數(shù)據(jù)結(jié)構(gòu)程序設(shè)計(jì)1 題目分析1.1 相關(guān)思想及概念介紹(1)二叉樹遍歷二叉樹的遍歷是指按照某種順序訪問二叉樹中的每個(gè)結(jié)點(diǎn),使每個(gè)結(jié)點(diǎn)被訪問一次且僅被訪問一次。遍歷二叉樹中經(jīng)常要用到的一種操作。因?yàn)樵趯?shí)際應(yīng)用問題中,常常需要按一定順序?qū)Χ鏄渲械拿總€(gè)結(jié)點(diǎn)逐個(gè)進(jìn)行訪問,查找具有某一特點(diǎn)的結(jié)點(diǎn),然后對(duì)這些滿足條件的結(jié)點(diǎn)進(jìn)行處理。通過一次完整的遍歷,可使二叉樹中結(jié)點(diǎn)信息由非線性排列
7、變?yōu)槟撤N意義上的線性序列。也就是說,遍歷操作使非線性結(jié)構(gòu)線性化。由二叉樹的定義可知,一棵二叉樹由根結(jié)點(diǎn)、根結(jié)點(diǎn)的左子樹和根結(jié)點(diǎn)的右子樹三部分組成。因此,只要依次遍歷這三部分,就可以遍歷整個(gè)二叉樹。若以D、L、R分別表示訪問根結(jié)點(diǎn)、遍歷根結(jié)點(diǎn)的左子樹、遍歷根結(jié)點(diǎn)的右子樹,則二叉樹的遍歷方式有6種:DLR、LDR、LRD、DRL、RDL、和RLD。如果限定先左后右,則只有前三種方式,即DLR(先序遍歷)、LDR(中序遍歷)和LRD(后序遍歷)。(1)線索二叉樹按照某種遍歷方式對(duì)二叉樹進(jìn)行遍歷,可以把二叉樹中所有結(jié)點(diǎn)排列為一個(gè)線性序列。在該序列中,除第一個(gè)結(jié)點(diǎn)外,每個(gè)結(jié)點(diǎn)有且僅有一個(gè)直接前驅(qū)結(jié)點(diǎn);除
8、最后一個(gè)結(jié)點(diǎn)外,每個(gè)結(jié)點(diǎn)有且僅有一個(gè)直接后繼結(jié)點(diǎn)。但是,二叉樹中每個(gè)結(jié)點(diǎn)在這個(gè)序列中的直接前驅(qū)結(jié)點(diǎn)和直接后繼結(jié)點(diǎn)是什么,二叉樹的存儲(chǔ)結(jié)構(gòu)中并沒有反映出來,只能在對(duì)二叉樹遍歷的動(dòng)態(tài)過程中得到這些信息,可以利用二叉樹的二叉鏈表存儲(chǔ)結(jié)構(gòu)中的那些空指針域來指示。這些指向直接前驅(qū)結(jié)點(diǎn)和指向直接后繼結(jié)點(diǎn)的指針被稱為線索,借了線索的二叉樹成為線索二叉樹。線索二叉樹將為二叉樹的遍歷提供許多方便。1.2 線索二叉樹的結(jié)構(gòu)1、n個(gè)結(jié)點(diǎn)有n-1個(gè)前驅(qū)和n-1個(gè)后繼;一共有2n個(gè)鏈域,其中:n+1個(gè)空鏈域,n-1個(gè)指針域;因此, 可以用空鏈域來存放結(jié)點(diǎn)的前驅(qū)和后繼。線索二叉樹就是利用n+1個(gè)空鏈域來存放結(jié)點(diǎn)的前驅(qū)和后
9、繼結(jié)點(diǎn)的信息。2、線索:有效利用二叉鏈表中空的存儲(chǔ)空間,指定原有的孩子指針為空的域來存放指向前驅(qū)和后繼的信息,這樣的指針被稱為“線索”。加線索的過程稱為線索化,由此得到的二叉樹稱作線索二叉樹。若結(jié)點(diǎn)有左子樹,則左鏈域lchild指示其左孩子(ltag=0);否則,令左鏈域指示其前驅(qū)(ltag=1);若結(jié)點(diǎn)有右子樹,則右鏈域rchild指示其右孩子(rtag=0);否則,令右鏈域指示其后繼(rtag=1);增設(shè)一個(gè)頭結(jié)點(diǎn),令其lchild指向二叉樹的根結(jié)點(diǎn),ltag=0、rtag=1;并將該結(jié)點(diǎn)作為遍歷訪問的第一個(gè)結(jié)點(diǎn)的前驅(qū)和最后一個(gè)結(jié)點(diǎn)的后繼;最后用頭指針指示該頭結(jié)點(diǎn)。其rchild域的指針指
10、向中序遍歷時(shí)訪問的最后一個(gè)結(jié)點(diǎn);反之,令二叉樹中序序列中的第一個(gè)結(jié)點(diǎn)的lchild域指針和最后一個(gè)結(jié)點(diǎn)rchild域的指針均指向頭結(jié)點(diǎn),這好比為二叉樹建立了一個(gè)雙向線索鏈表,既可以從第一個(gè)結(jié)點(diǎn)起順后繼進(jìn)行遍歷,也可以從最后一個(gè)結(jié)點(diǎn)起順前驅(qū)進(jìn)行遍歷。3、例子:如下圖a示的二叉樹,其中序線索二叉樹為圖b所示:1.3 需求分析以二叉鏈表作為存儲(chǔ)結(jié)構(gòu)時(shí),只能找到結(jié)點(diǎn)的左、右孩子的信息,而得不到結(jié)點(diǎn)的前驅(qū)與后繼信息,為了使這種信息只有在遍歷的動(dòng)態(tài)過程中才能得到。增設(shè)兩個(gè)指針分別指示其前驅(qū)和后繼,并且利用結(jié)點(diǎn)的空鏈域存放(線索鏈表)。同時(shí)為了記下遍歷過程中訪問結(jié)點(diǎn)的先后關(guān)系,附設(shè)一個(gè)指針pre始終指向剛剛
11、訪問過的結(jié)點(diǎn),若指針 p 指向當(dāng)前訪問的結(jié)點(diǎn),則 pre指向它的前驅(qū)。由此得到中序遍歷建立中序線索化鏈表的算法本文通過建立二叉樹, 實(shí)現(xiàn)二叉樹的中序線索化并實(shí)現(xiàn)中序線索二叉樹的遍歷。實(shí)現(xiàn)對(duì)已生成的二叉樹進(jìn)行中序線索化并利用中序線索實(shí)現(xiàn)對(duì)二叉樹的遍歷的效果。主要任務(wù):1.建立二叉樹; 2.將二叉樹進(jìn)行中序線索化;3.編寫程序,運(yùn)行并修改; 4.利用中序線索遍歷二叉樹 5.書寫課程設(shè)計(jì)論文并將所編寫的程序完善。2 概要設(shè)計(jì)2.1抽象數(shù)據(jù)類型的定義二叉樹的存儲(chǔ)結(jié)構(gòu)struct node ElemenType data; /數(shù)據(jù)域int ltag; /左標(biāo)志域int rtag; /右標(biāo)志域struct
12、 node *lchild; /左指針域struct node *rchild; /右指針域BTree;2.2主程序的流程 NNCTRL+CYYYNYYYYNNN選擇菜單輸出廣義表形式,前(中,后)遞歸遍歷定義線索二叉樹創(chuàng)建線索二叉樹開始輸入(13)123其他前續(xù)非遞歸中序非遞歸后序非遞歸輸入想查找的結(jié)點(diǎn)(有無此結(jié)點(diǎn))輸入想查找的結(jié)點(diǎn)輸入想查找的 結(jié)點(diǎn)后繼結(jié)點(diǎn)后繼結(jié)點(diǎn)后繼結(jié)點(diǎn)二叉樹無此結(jié)點(diǎn)結(jié)束2.3各程序模塊之間的層次(調(diào)用)關(guān) 3 詳細(xì)設(shè)計(jì)(一)算法的C語言實(shí)現(xiàn)#include "stdio.h"#include "stdlib.h"#define O
13、K 1typedef char TElemType;typedef int Status;typedef enum PointerTag Link,Thread; /link=0:pointer,Thread=1:threadtypedef struct BiThrNodeTElemType data;struct BiThrNode *lchild,*rchild;PointerTag LTag,RTag;BiThrNode,*BiThrTree; BiThrTree pre; / 全局變量,始終指向剛剛訪問過的結(jié)點(diǎn) void InThreading(BiThrTree p)if(p) In
14、Threading(p->lchild);/左子樹線索化 if(!p->lchild)p->LTag=Thread;p->lchild=pre;/前驅(qū)線索 if(!pre->rchild)pre->RTag=Thread;pre->rchild=p;/后續(xù)線索 pre=p; /保持pre指向p的前驅(qū) InThreading(p->rchild);/右子樹線索化 /if/InThreading Status InOrderThreading(BiThrTree &Thrt,BiThrTree T)/中序遍歷二叉樹,并將其中序線索化,Thrt
15、指向頭結(jié)點(diǎn)/BiThrTree Thrt;if(!(Thrt=(BiThrTree)malloc(sizeof(BiThrNode) exit(-1);Thrt->LTag=Link; /建立頭結(jié)點(diǎn)Thrt->RTag=Thread; /右指針回指Thrt->rchild=Thrt;if(!T) Thrt->rchild=Thrt; /若二叉樹為空,則左指針回指else Thrt->lchild=T; pre=Thrt; InThreading(T); /中序遍歷進(jìn)行中序線索化 pre->rchild=Thrt;/最后一個(gè)結(jié)點(diǎn)線索化 pre->RTag
16、=Thread; Thrt->rchild=pre; return OK;/InOrderThreading Status InOrderTraverse_Thr(BiThrTree T)/T指向頭結(jié)點(diǎn),頭結(jié)點(diǎn)的左鏈lchild指向根結(jié)點(diǎn),非遞歸算法BiThrTree p;p=T->lchild;while(p!=T) /空樹或遍歷結(jié)束時(shí),Tp while(p->LTag=Link) p=p->lchild; printf("%cn",p->data); /訪問其左子樹為空的結(jié)點(diǎn) while(p->RTag=Thread&&
17、;p->rchild!=T) p=p->rchild; printf("%cn",p->data); /訪問后續(xù)結(jié)點(diǎn) /while p=p->rchild; /whilereturn OK;/InOrderT_Thr Status CreateBitree(BiThrTree &T)/按先序次序輸入二叉樹char ch,enter;scanf("%c%c",&ch,&enter);if(ch=' ') T=NULL;else if(!(T=(BiThrTree)malloc(sizeof(B
18、iThrNode) exit(1); T->data=ch; CreateBitree(T->lchild); CreateBitree(T->rchild); /elsereturn OK;/CreateBitree int main()BiThrTree T,Thrt;CreateBitree(T);/創(chuàng)建InOrderThreading(Thrt,T);/線索化InOrderTraverse_Thr(Thrt);/遍歷訪問return OK;注意點(diǎn):在輸入字符創(chuàng)立二叉樹時(shí),要注意葉子結(jié)點(diǎn)的輸入形式,即葉子結(jié)點(diǎn)的左右空指針也要輸入,在我們這里輸入空格。(二)建立中序二叉樹
19、的遞歸算法,其中pre為全局變量。 BiThrNodeType *pre; BiThrTree InOrderThr(BiThrTree T) /*中序遍歷二叉樹T,并將其中序線索化,pre為全局變量*/ BiThrTree head; head=(BitThrNodeType *)malloc(sizeof(BiThrType);/*設(shè)申請(qǐng)頭結(jié)點(diǎn)成功*/ head->ltag=0;head->rtag=1;/*建立頭結(jié)點(diǎn)*/ head->rchild=head;/*右指針回指*/ if(!T)head->lchild=head;/*若二叉樹為空,則左指針回指*/ el
20、sehead->lchild=T;pre=head; InThreading(T);/*中序遍歷進(jìn)行中序線索化*/ pre->rchild=head; pre->rtag=1;/*最后一個(gè)結(jié)點(diǎn)線索化*/ head->rchild=pre; ; return head; void InThreading(BiThrTree p) /*通過中序遍歷進(jìn)行中序線索化*/ if(p) InThreading(p->lchild);/*左子樹線索化*/ if(p->lchild=NULL)/*前驅(qū)線索*/ p->ltag=1; p->lchild=pre;
21、if(p->rchild=NULL)p->rtag=1;/*后驅(qū)線索*/ if(pre!=NULL && pre->rtag=1) pre->rchild=p; pre=p; InThreading(p->rchild);/*右子樹線索化*/ 進(jìn)行中序線索化的算法:bithptr*pre; /* 全程變量*/ voidINTHREAD(bithptr *p) if(p!=NULL) INTHREAD(p->lchild); /* 左子樹線索化*/ if(p->lchild=NULL) p->ltag=1;p->lchild=
22、pre; if(p->rchild=NULL) p->rtag=1; if(pre!=NULL && pre->rtag=1)pre->rchild=p; pre=p; /* 前驅(qū)指向當(dāng)前結(jié)點(diǎn)*/ INTHREAD(p->rchild); /* 右子樹線索化*/ 4 調(diào)試分析該程序在調(diào)試過程中遇到的問題是:對(duì)已學(xué)知識(shí)運(yùn)用能力欠缺,尤其是在編程方面,由于C語言等計(jì)算機(jī)基礎(chǔ)課程知識(shí)沒有很好的掌握同時(shí)在學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)時(shí)也沒有真正弄懂導(dǎo)致編程時(shí)小錯(cuò)誤不斷,而且在遇到許多小的錯(cuò)誤時(shí)靠自己很難再調(diào)整過來,但整體上是一次對(duì)所學(xué)知識(shí)的運(yùn)用鞏固,特別是對(duì)二叉樹的建立以
23、及對(duì)它進(jìn)行線索方面,翻閱大量的書籍及搜集資料并求教于計(jì)算機(jī)系的同學(xué),才找到一些解決問題的方法,在用中序遍歷線索二叉樹時(shí)總是搞混不過也因此讓我對(duì)前序,中序,后序遍歷更加理解。同時(shí),在經(jīng)歷了很多次修改重寫課程設(shè)計(jì)報(bào)告的悲慘經(jīng)歷后,懂得了很多關(guān)于辦公軟件方面的知識(shí)尤其是自己做的東西一定要保存并備份。主要出現(xiàn)了兩方面問題:A. 語法錯(cuò)誤(經(jīng)過多次調(diào)試發(fā)現(xiàn)有一處缺少了引號(hào))B. 邏輯錯(cuò)誤。聲明一個(gè)指針只是在內(nèi)存中開辟了一個(gè)這種數(shù)據(jù)類型的空間,并讓這個(gè)指針指向它,由于它還沒有指向任何變量,因此不能引用其指向的任何成員。5 用戶使用使用該程序時(shí)在打開程序的主界面后,輸入相應(yīng)要求的輸入形式,然后就輸出中序遍歷
24、,方便簡(jiǎn)潔。例如:運(yùn)行時(shí),分別輸入(前序輸入):1 2 3 0 0 4 0 5 0 0 6 0 0建立如下所示的二叉樹: 1 2
25、160; 6 3 4 5 中序
26、遍歷輸出:3 2 4 5 1 66 測(cè)試結(jié)果運(yùn)行時(shí),分別輸入(前序輸入):1 2 3 0 0 4 0 5 0 0 6 0 0建立如下所示的二叉樹: 1
27、60; 2 6 3 4
28、60; 5 中序遍歷輸出:3 2 4 5 1 67 結(jié)論體會(huì)在這次的課程設(shè)計(jì)中,我們明白了理論和實(shí)際還是相差很大的,理論知識(shí)能學(xué)明白單不代表程序就能編出來,大多數(shù)情況下,我們還是不具備完成這項(xiàng)項(xiàng)目的能力的。它需要我們不僅能夠?qū)⒁郧皩W(xué)過的知識(shí)與現(xiàn)學(xué)的知識(shí)融會(huì)貫通同時(shí)還要求我們學(xué)會(huì)怎樣如何整合做項(xiàng)目所需要的全部知識(shí)以及對(duì)為學(xué)知識(shí)的查詢及自學(xué)能力。更重要的時(shí)它還要求我們敢于實(shí)踐勤于動(dòng)手,遇到有些不會(huì)處理的,我們會(huì)上網(wǎng)去查,或者去問老師,或者去問同學(xué)。例如以前我們對(duì)二叉樹的
29、相關(guān)內(nèi)容并不是很熟悉,但經(jīng)過這次課程設(shè)計(jì)后現(xiàn)在我們不僅掌握了它們的使用方法,更重要的是我們學(xué)會(huì)了如何去學(xué)習(xí),然后快速地應(yīng)用到我們所需要的項(xiàng)目當(dāng)中。同時(shí)我們還得到了很多關(guān)于本門課程的體會(huì):在編寫程序的過程中,把整個(gè)系統(tǒng)的框架準(zhǔn)確的描述出來是非常重要的而且寫程序是需要步步為營(yíng)不然一不小心就會(huì)出錯(cuò)。我們們的C語言老師曾經(jīng)說過良好的代碼風(fēng)格是成功的一半。例如在寫代碼時(shí)會(huì)有大量的小括號(hào),大括號(hào)等,老師曾說這些代碼在書寫時(shí)一定要同時(shí)寫一對(duì),這樣就可以避免丟掉或忘寫其中的一個(gè)。真的是深有體會(huì)??!還有在編碼的過程中需要時(shí)常進(jìn)行修改,如果程序的可讀性不強(qiáng),代碼量又龐大的話,那么對(duì)于我們們來說是一件非常不幸的事情
30、,程序反復(fù)的改來改去是非常繁瑣的。因此我們們一定要養(yǎng)成良好的書寫代碼的習(xí)慣??傊ㄟ^一次的課程設(shè)計(jì),我們不僅對(duì)我們所設(shè)計(jì)的內(nèi)容有了更深的了解同時(shí)這門課程的知識(shí)掌握也更加牢固了,而且還學(xué)到很多關(guān)于辦公軟件方面的知識(shí)更重要的是通過和計(jì)算機(jī)方面的老師和同學(xué)的交流了解到了很多關(guān)于計(jì)算機(jī)方面及計(jì)算機(jī)相關(guān)工作的一些知識(shí)這位我們?cè)谶x方向時(shí)提供了很珍貴的意見??偠灾@次收獲頗多!8 參考文獻(xiàn)1.嚴(yán)蔚敏,吳偉民 數(shù)據(jù)結(jié)構(gòu)C語言版 :清華大學(xué)出版社 ,20092.譚浩強(qiáng)著.C程序設(shè)計(jì)(第三版).北京:清華大學(xué)出版社,20053.于海英,王國(guó)權(quán)編著的C語言程序設(shè)計(jì).清華大學(xué)出版社2012年版4.備注:還有一些是
31、通過查找網(wǎng)站內(nèi)容搜索整理的。9 源程序#include <stdio.h>#include <malloc.h>typedef enumLink,Thread PointerTag; /指針標(biāo)志typedef int DataType;typedef struct BiThreTree /定義結(jié)點(diǎn)元素 PointerTag LTag,RTag; DataType data; struct BiThreTree *lchild,*rchild; BiThreTree;BiThreTree *pre; /全局變量,用于二叉樹的線索化BiThreTree *CreateTree() /按前序輸入建立二叉樹 BiThreTree *T; DataType e; scanf("%d",&e); if(e=0) T=NULL; else T=(BiThreTree *)malloc(sizeof(BiThreTree); T->data=e; T->LTag=Link; /初始化時(shí)指針標(biāo)志均為L(zhǎng)ink T->RTag=Link; T->lchild=CreateTree(); T-&
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 江蘇省無錫市錫山區(qū)2019-2020學(xué)年八年級(jí)下學(xué)期期中物理試題【含答案、解析】
- 廣東省茂名市電白區(qū)2024-2025學(xué)年八年級(jí)上學(xué)期期末地理試卷(含答案)
- 2001年江蘇南通中考滿分作文《我發(fā)現(xiàn)女孩也可做“太陽”》
- 2025年度木材行業(yè)安全生產(chǎn)責(zé)任書8篇
- 2025年度個(gè)人車輛抵押貸款擔(dān)保合同樣本2篇
- 2025年連帶責(zé)任保證合同(旅游業(yè))
- 2025版停車場(chǎng)車位預(yù)約系統(tǒng)開發(fā)與應(yīng)用合同3篇
- 2025年度知識(shí)產(chǎn)權(quán)保護(hù)基金投資與保密協(xié)議3篇
- 二零二五版生活垃圾填埋場(chǎng)運(yùn)營(yíng)管理合同3篇
- 2025年食品研發(fā)與市場(chǎng)銷售聯(lián)合開發(fā)合同3篇
- 《健康體檢知識(shí)》課件
- 部編版語文五年級(jí)下冊(cè) 第一單元 專項(xiàng)訓(xùn)練課外閱讀(含答案)
- 蘇少版七年級(jí)美術(shù)下冊(cè) 全冊(cè)
- 名表買賣合同協(xié)議書
- JTG-T-F20-2015公路路面基層施工技術(shù)細(xì)則
- 2024年遼寧石化職業(yè)技術(shù)學(xué)院?jiǎn)握新殬I(yè)適應(yīng)性測(cè)試題庫附答案
- 中西方校服文化差異研究
- 《子宮肉瘤》課件
- 《準(zhǔn)媽媽衣食住行》課件
- 給男友的道歉信10000字(十二篇)
- 客人在酒店受傷免責(zé)承諾書范本
評(píng)論
0/150
提交評(píng)論