




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、word上海應(yīng)用技術(shù)學院課程設(shè)計報告課程名稱 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計 設(shè)計題目 猴子選大王;建立二叉樹;各種排序;有序表的合并;成績管理系統(tǒng); 院系 計算機科學與信息工程 專業(yè)計算機科學與技術(shù) 班級 姓名 學號 指導教師 日期 一. 目的與要求1. 穩(wěn)固和加深對常見數(shù)據(jù)結(jié)構(gòu)的理解和掌握2. 掌握基于數(shù)據(jù)結(jié)構(gòu)進行算法設(shè)計的根本方法3. 掌握用高級語言實現(xiàn)算法的根本技能4. 掌握書寫程序設(shè)計說明文檔的能力5. 提高運用數(shù)據(jù)結(jié)構(gòu)知識及高級語言解決非數(shù)值實際問題的能力二. 課程設(shè)計內(nèi)容說明1. 工程一(1) 對設(shè)計任務(wù)內(nèi)容的概述學生成績管理*任務(wù):要求實現(xiàn)對學生資料的錄入、瀏覽、插入和刪除等功能。輸入:設(shè)學
2、生成績以記錄形式存儲,每個學生記錄包含的信息有:學號和各門課程的成績,設(shè)學生成績至少3門以上。存儲結(jié)構(gòu):采用線性鏈式結(jié)構(gòu)。(2) 詳細設(shè)計LinkList *create():輸入學生成績記錄函數(shù);void print(LinkList *head):顯示全部記錄函數(shù)LinkList *Delete(LinkList *head):刪除記錄函數(shù)LinkList *Insert(LinkList *head):插入記錄函數(shù)void menu_select():菜單項選擇擇void ScoreManage():函數(shù)界面(3) 程序流程圖3刪除學生記錄4插入學生記錄1輸入學生記錄輸入n0n6主界面2
3、輸出學生記錄退出學生成績管理系統(tǒng)5退出判斷nn=5n=1、2、3、4(4) 程序模塊及其接口描述該程序可以分為以下幾個模塊:1、菜單項選擇擇:void menu_select(); 提供五種可以選擇的操作,在main函數(shù)中通過switch語句調(diào)用菜單menu_select()函數(shù),進入不同的功能函數(shù)中完成相關(guān)操作。2、輸入功能:LinkList *create(); 通過一個for循環(huán)語句的控制,可以一次完成無數(shù)條記錄的輸入。并將其存入鏈表。 3、輸出功能:void print(LinkList *head); 通過一個while的循環(huán)控制語句,在指針p!=NULL時,完成全部學生記錄的顯示。
4、知道不滿足循環(huán)語句,程序再次回到菜單項選擇擇功能界面。4、刪除功能:LinkList *Delete(LinkList *head); 按想要刪除的學生的學號首先進行查找,通過指針所指向結(jié)點的下移來完成,如果找到該記錄,那么完成前后結(jié)點的連接,同時對以查找到的結(jié)點進行空間的釋放,最后完成對某個學生記錄進行刪除,并重新存儲。5、插入功能:LinkList *Insert(LinkList *head);輸入你想插入的位置,通過指針所指向結(jié)點的下移,找到該位置,將該新的學生記錄插入到該結(jié)點,并對該結(jié)點后面的指針下移。鏈表長度加一,重新存儲。(5) 程序的輸入與輸出描述輸入:調(diào)用LinkList *
5、create()函數(shù),輸入學生的姓名、學號、三門功課的成績;輸出:調(diào)用void print(LinkList *head)函數(shù),輸出學生的記錄。(6) 程序測試主菜單:成績管理系統(tǒng)的主界面:學生成績記錄的輸入:輸出學生成績記錄:學生成績記錄的刪除刪除學號是1101的學生記錄插入新的學生成績記錄插入學號為1103的學生記錄(7) 尚未解決的問題或改良方向尚未解決的問題:該成績管理系統(tǒng)還存在不少缺陷,而且它提供的功能也是有限的,只能實現(xiàn)學生成績的輸入、輸出、刪除、插入。對于,學生成績記錄的文件保存以及按學號、姓名等的查詢也是缺少的。還有就是,對于多個學生成績的操作也是不夠的。改良的方向:在時間許可
6、的條件下,盡量的完善該系統(tǒng)的各種功能,同時也應(yīng)修改系統(tǒng),讓它更為人性化、簡單化,被廣闊用戶所接受。(8) 對軟件的使用說明該軟件是屬于比擬低級的軟件,只是包含了課程設(shè)計的要求的幾個功能:輸入、輸出、刪除、插入。所以用戶在使用的過程中肯定會受到一定的局限性、不方便性,但由于時間的緣故,無法將軟件做到盡善盡美。2. 工程二(1) 對設(shè)計任務(wù)內(nèi)容的概述各種排序任務(wù):用程序?qū)崿F(xiàn)插入法排序、選擇法排序、起泡法改良算法排序;利用插入排序、選擇法排序和冒泡法的改良算法,將用戶隨機輸入的一列數(shù)按遞增的順序排好。輸入的數(shù)據(jù)形式為任何一個正整數(shù),大小不限。輸出的形式:數(shù)字大小逐個遞增的數(shù)列。(2) 功能描述該函數(shù)
7、有以下幾個功能:1) 對R0.n-1按遞增有序進行直接插入排序2) 對R0.n-1按遞增有序進行冒泡排序3) 對R0.n-1按遞增有序進行直接選擇排序4) 排序后的輸出5)調(diào)用所有排序,實現(xiàn)排序(3) 程序流程圖直接插入排序InsertSort()退出排序Sort直接選擇排序SelectSort()冒泡排序BubbleSort()(4) 詳細設(shè)計void InsertSort(RecType R,int n):對R0.n-1按遞增有序進行直接插入排序void BubbleSort(RecType R,int n):對R0.n-1按遞增有序進行冒泡排序void SelectSort(RecTyp
8、e R,int n):對R0.n-1按遞增有序進行直接選擇排序void disp(RecType R,int n):排序后的輸出void Sort():調(diào)用所有排序,實現(xiàn)排序(5) 程序模塊及其接口描述該程序分為五個模塊:1.輸入功能:void Sort() 建立一個數(shù)組存放用戶在鍵盤上輸入的關(guān)鍵字,在分別調(diào)用各種排序的函數(shù),對關(guān)鍵字進行排序。2.直接插入排序功能:void InsertSort(RecType R,int n)將后一個數(shù)與前一個數(shù)比擬,將其插入到第一個比它大的大的數(shù)前面,其余數(shù)字往后移一個位置。每次從無序表中取出第一個元素,把它插入到有序表的適宜位置,使有序表仍然有序。3.冒
9、泡排序功能:void BubbleSort(RecType R,int n) 在排序過程中,執(zhí)行完最后的排序后,雖然數(shù)據(jù)已全部排序完備,但程序無法判斷是否完成排序,為了解決這一缺乏,可設(shè)置一個標志位exchange,將其初始值設(shè)置為非0,表示被排序的表是一個無序的表,每一次排序開始前設(shè)置exchange值為0,在進行數(shù)據(jù)交換時,修改exchange為非0。在新一輪排序開始時,檢查此標志,假設(shè)此標志為0,表示上一次沒有做過交換數(shù)據(jù),那么結(jié)束排序;否那么進行排序。4.直接選擇排序功能:void SelectSort(RecType R,int n) 在無序區(qū)里找最小的數(shù),第i小的數(shù)字放在第i個位置
10、上,與原來第i個位置上的數(shù)字交換。5.輸出功能:void disp(RecType R,int n)(6) 程序的輸入與輸出描述輸入:要求是10個為數(shù)字的關(guān)鍵字;輸出:排序后新的序列。(7) 程序測試輸入關(guān)鍵字,調(diào)用各種排序函數(shù)(8) 尚未解決的問題或改良方向改良方向:雖然給出了它的各種排序的結(jié)果,但是沒有它的箱子過程,這是我的改良的方向,希望能將每種排序的過程也能展示給用戶,來表達它們的不同。(9) 對軟件的使用說明用戶只需根據(jù)提示,在鍵盤上輸入要排序的10個關(guān)鍵字。3. 工程三(1) 對設(shè)計任務(wù)內(nèi)容的概述有序表的合并要求輸入有序表的數(shù)據(jù),利用順序表和鏈表結(jié)構(gòu)分布完成兩個有序表合并功能,并輸
11、出合并后的信息。(2) 功能描述該程序有如下幾個功能:1) 初始化順序表2) 初始化鏈表3) 建立順序表4) 尾插法建表5) 輸出合并后的順序表6) 輸出合并后的單鏈表7) 合并順序表8) 合并單鏈表9) 調(diào)用以上的函數(shù),實現(xiàn)有序表的合并(3) 概要設(shè)計或程序流程圖開始初始化鏈表初始化順序表建立順序表尾插法建表合并順序表合并單鏈表輸出結(jié)束(4) 詳細設(shè)計void InitList(SqList *&L):初始化順序表void InitList1(LinkList1 *&L):初始化鏈表void CreateList(SqList *&L,ElemType a,int n):建立順序表void
12、CreateListR(LinkList1 *&L,ElemType a,int n):尾插法建表void DispList(SqList *L):輸出合并后的順序表void DispList1(LinkList1 *L):輸出合并后的單鏈表void UnionList(SqList *LA,SqList *LB,SqList *&LC):合并順序表void UnionList1(LinkList1 *LA,LinkList1 *LB,LinkList1 *&LC):合并單鏈表void Union():調(diào)用以上的函數(shù),實現(xiàn)有序表的合并。(5) 程序模塊及其接口描述程序有以下幾個模塊:1) 初始
13、化、建立順序表2) 初始化、建立鏈表3) 輸出合并后的表4) 合并表(6) 調(diào)試分析或程序測試有序表的合并:(7) 尚未解決的問題或改良方向缺乏:不能重復使用程序。(8) 對軟件的使用說明用戶只需根據(jù)界面的提示,采用對應(yīng)的操作。4工程四(1)對設(shè)計任務(wù)內(nèi)容的概述建立二叉樹,層序、先序、中序、后序遍歷 用遞歸或非遞歸的方法都可以*任務(wù):要求能夠輸入樹的各個結(jié)點,并能夠輸出用不同方法遍歷的遍歷序列;分別建立二叉樹存儲結(jié)構(gòu)的的輸入函數(shù)、輸出層序遍歷序列的函數(shù)、輸出先序遍歷序列的函數(shù)、輸出中序遍歷序列的函數(shù)、輸出后序遍歷序列的函數(shù);(2)功能描述1) 建立二叉樹2) 輸出二叉樹3) 先序遍歷非遞歸算法
14、:不為空時,訪問根-左-右,采用遞歸的方法。4) 中序遍歷非遞歸算法:不為空時,訪問左-根-右,采用遞歸的方法。5) 后序遍歷非遞歸算法:不為空時,訪問左-右-根,采用遞歸的方法。6) 層序遍歷:運用隊列,隊列不空時,有左孩子將其入隊,有右孩子將其入隊,同時出隊。7) 調(diào)用以上函數(shù)實現(xiàn)二叉樹的各種遍歷(3)概要設(shè)計或程序流程圖開始輸入二叉樹的按層結(jié)點值層次遍歷后序遍歷中序遍歷先序遍歷結(jié)束(4)詳細設(shè)計void CreateBTNode(BTNode * &b,char *str):建立二叉樹void DispBTNode(BTNode *b):輸出二叉樹void PreOrder(BTNode
15、 *b):先序遍歷非遞歸算法void InOrder(BTNode *b):中序遍歷非遞歸算法void PostOrder(BTNode *b):后序遍歷非遞歸算法void LevelOrder(BTNode *b):層序遍歷(5)程序模塊及其接口描述(6)程序的輸入與輸出描述輸入二叉樹的按層結(jié)點值;輸出二叉樹先序遍歷訪問結(jié)點的順序;輸出二叉樹中序遍歷訪問結(jié)點的順序;輸出二叉樹后序遍歷訪問結(jié)點的順序;輸出二叉樹層次遍歷訪問結(jié)點的順序;(7)調(diào)試分析或程序測試用戶從鍵盤上輸入要創(chuàng)立的二叉樹結(jié)點:(8)尚未解決的問題或改良方向改良方向:希望能將系統(tǒng)改良的更為人性化,讓界面更舒適,操作更簡單。(9)
16、對軟件的使用說明用戶只需按照界面的提示,采取相應(yīng)的措施,到時界面會提醒用戶鍵盤輸入。5工程五1對設(shè)計任務(wù)內(nèi)容的概述猴子選大王*任務(wù):一堆猴子都有編號,編號是1,2,3 .m ,這群猴子m個按照1-m的順序圍坐一圈,從第1開始數(shù),每數(shù)到第N個,該猴子就要離開此圈,這樣依次下來,直到圈中只剩下最后一只猴子,那么該猴子為大王。要求:輸入數(shù)據(jù):輸入m,n m,n 為整數(shù),nm輸出形式:中文提示按照m個猴子,數(shù)n 個數(shù)的方法,輸出為大王的猴子是幾號 ,建立一個函數(shù)來實現(xiàn)此功能2需求分析或功能描述為猴子編號out,編號out=passpass為密碼值,該猴子離圈,次數(shù)step+。剩下的猴子繼續(xù)次操作,直到
17、次數(shù)step=猴子monkey時結(jié)束。3概要設(shè)計或程序流程圖開始輸入猴子的數(shù)量和密碼值編號=密碼值,猴子出列,次數(shù)自增N次數(shù)=猴子數(shù)Y結(jié)束4詳細設(shè)計或源代碼說明為猴子編號out,編號out=passpass為密碼值,該猴子離圈,次數(shù)step+。剩下的猴子繼續(xù)次操作,直到次數(shù)step=猴子monkey時結(jié)束。函數(shù)int Monkey()實現(xiàn)了這一功能。5程序模塊及其接口描述運用隊列環(huán)形隊列,編號=密碼值 入隊;為猴子編號out,編號out=passpass為密碼值,該猴子離圈,次數(shù)step+。剩下的猴子繼續(xù)次操作,直到次數(shù)step=猴子monkey時結(jié)束。函數(shù)int Monkey()實現(xiàn)了這一功
18、能。6程序的輸入與輸出描述輸入數(shù)據(jù):輸入m,n m,n 為整數(shù),n密碼值8尚未解決的問題或改良方向缺乏:不能重復使用程序,如果數(shù)字大的話,輸出繁瑣。9對軟件的使用說明用戶只需根據(jù)軟件界面的提示進行相關(guān)操作。三 結(jié)論及體會本學期,我學會了常用數(shù)據(jù)結(jié)構(gòu):數(shù)組連續(xù)空間,棧先進后出,隊列先進先出,鏈表指針,樹前驅(qū)、后繼,根、葉子,圖點、邊,堆特殊的樹,根節(jié)點的值最大或最小還有線性表存儲結(jié)構(gòu):順序存儲結(jié)構(gòu)和鏈式存儲,常用的排序算法。在這一周里,自己用了CFree做了一個程序,分別實現(xiàn)了學生成績管理系統(tǒng)、各種排序、有序表的合并、二叉樹的建立及遍歷以及猴子選大王,通過本次數(shù)據(jù)結(jié)構(gòu)課程設(shè)計,我學習了很多課上沒
19、弄懂的動西,穩(wěn)固了關(guān)于二叉樹、棧、鏈表等知識。在設(shè)計程序時,雖然很用心的做,但還是遇到種種難題,通過上網(wǎng)查找資料、圖書館查閱資料、問老師的方式,最終還是解決多數(shù),雖然最后的程序不是很完美,但是因為是通過自己的努力完成的,還是感覺很滿意,也收獲很大東西。經(jīng)過了這次課程設(shè)計,現(xiàn)在已經(jīng)可以了解很多錯誤在英文里的提示,這對我來說是一個突破性的進步,眼看著一個個錯誤通過自己的努力在我眼前消失,覺得很是開心。在這一段努力學習的過程中,我的編程設(shè)計有了明顯的提高,其實現(xiàn)在想起來,收獲還真是不少,雖然說以前非常不懂這門語言,在它上面花費了好多心血,覺得它很難,是需用花費了大量的時間編寫出來的?,F(xiàn)在真正的明白了
20、一些代碼的應(yīng)用,每個程序都有一些共同點,通用的結(jié)構(gòu),相似的格式。只要努力去學習,就會靈活的去應(yīng)用它??傊?,通過這次的課程設(shè)計,我們收獲匪淺,首先由衷感謝老師提供這樣的一個時機鍛煉自己,感受到學來的知識不只是用來完成試卷的。一向習慣獨立思考的自己學會了積極的與別人交流,取長補短,共同進步。課程設(shè)計使自己發(fā)現(xiàn)考試不是最重要的,最重要的是能運用所學的知識。在整個課程設(shè)計的學習過程中,不再是學到知識解題,而是在實際運用時遇到什么學什么,重在把知識應(yīng)用于實際。附錄1:參考文獻1 數(shù)據(jù)結(jié)構(gòu)教程第3版 ,李春葆,清華大學出版社,20222 數(shù)據(jù)結(jié)構(gòu) ,楊劍,清華大學出版社,20223 數(shù)據(jù)結(jié)構(gòu)(C語言版)
21、,嚴蔚敏 吳偉民,清華大學出版社,19974 Data Structures Using C數(shù)據(jù)結(jié)構(gòu)C語言版 ,R Krishnamoorthy、G Indirani Kumaravel,清華大學出版社,2009-95 C+數(shù)據(jù)結(jié)構(gòu)與程序設(shè)計 美Robert L.Kruse/Alexander J.Ryba著/錢麗萍譯 , 清華大學出版社,2004 6 計算機算法設(shè)計與分析第2版 ,王曉東, 電子工業(yè)出版社, 2004附錄2:局部源代碼清單#include #include #include#include #include #define LEN sizeof(LinkList)#defin
22、e MaxSize 50/*/成績管理系統(tǒng)typedef struct LNode/*定義單鏈表結(jié)點類型*/char name10; /姓名 char num10;/學號 int score3; struct LNode *next; LinkList;LinkList *init()return NULL; /*返回空指針*/LinkList *create()int i,s,k;int j=0;LinkList *head=NULL,*p; /* 定義函數(shù).此函數(shù)帶回一個指向鏈表頭的指針*/system(cls); printf(n請輸入您想輸入的學生個數(shù):);scanf(%d,&k);f
23、or(j=0;jnum);printf(輸入姓名:);scanf(%s,p-name);printf(請分別輸入語文、數(shù)學、英語的分數(shù) %d scoresn,3);/*開始輸入*/for(i=0;iscorei);if(p-scoreiscorei100) /*確保成績在0100之間*/printf(Data error,please enter again.n);while(p-scoreiscorei100);p-next=head; /*將頭結(jié)點做為新輸入結(jié)點的后繼結(jié)點*/head=p; /*新輸入結(jié)點為新的頭結(jié)點*/return(head); /* 顯示全部記錄函數(shù)*/void pri
24、nt(LinkList *head)LinkList *p; system(cls); p=head; /*初值為頭指針*/printf(n*LinkList*n);printf(-n);printf(| 學號 | 姓名 | 語文 | 數(shù)學 | 英語 | n);printf(-n);while(p!=NULL) printf(| %4s | %-4s | %3d | %3d | %3d |n, p-num,p-name,p-score0,p-score1,p-score2); p=p-next;printf(-n);printf(*END*n);/*刪除記錄函數(shù)*/LinkList *Dele
25、te(LinkList *head)LinkList *p1,*p2; /*p1為查找到要刪除的結(jié)點指針,p2為其前驅(qū)指針*/char c,s6; /*s6用來存放學號,c用來輸入字母*/system(cls); printf(請輸入要刪除的學生的學號: );scanf(%s,s);p1=p2=head; /*給p1和p2賦初值頭指針*/while(strcmp(p1-num,s) & p1 != NULL) /*當記錄的學號不是要找的,或指針不為空時*/p2=p1; /*將p1指針值賦給p2作為p1的前驅(qū)指針*/p1=p1-next; /*將p1指針指向下一條記錄*/if(strcmp(p1
26、-num,s)=0) /*學號找到了*/printf(*FOUND*n);printf(-n);printf(| 學號 | 姓名 | 語文 | 數(shù)學 | 英語 |n);printf(-n);printf(| %4s | %4s | %3d | %3d | %3d |n,p1-num,p1-name,p1-score0,p1-score1,p1-score2);printf(-n);printf(*END*n);printf(您確定要刪除該學生的記錄嗎 Y/N ); /*提示是否要刪除,輸入Y刪除,N那么退出*/for(;)scanf(%c,&c);if(c=n|c=N) break; /*如果
27、不刪除,那么跳出本循環(huán)*/if(c=y|c=Y)if(p1=head) /*假設(shè)p1=head,說明被刪結(jié)點是首結(jié)點*/head=p1-next; /*把第二個結(jié)點地址賦予head*/elsep2-next=p1-next; free(p1);/*否那么將一下結(jié)點地址賦給前一結(jié)點地址*/printf(n學號為 %s 的學生記錄已被刪除.n,s);break; /*刪除后就跳出循環(huán)*/ else printf(n找不到學號為 %s 的學生記錄.n,s); /*找不到該結(jié)點*/return(head);/插入 LinkList *Insert(LinkList *head)int k;/在表中第k
28、個位置插入printf(請輸入插入的位置:);scanf(%d,&k); int j=0,i=0;LinkList *p1,*p2; /*p1為查找到要刪除的結(jié)點指針,p2為其前驅(qū)指針*/char N10,s10; /*s10用來存放姓名,N10用來存放學號*/int score3; system(cls); printf(輸入學號:); scanf(%s,N);printf(輸入姓名:);scanf(%s,s);printf(請分別輸入語文、數(shù)學、英語的分數(shù) %d scoresn,3);/*開始輸入*/for(i=0;i3;i+) /*3門課程循環(huán)3次*/doprintf(score%d:,
29、i+1);scanf(%d,&scorei);if(scorei100) /*確保成績在0100之間*/printf(Data error,please enter again.n);while(scorei100);p1=head; /*給p1賦初值頭指針*/while(jnext; /*將p1指針指向下一條記錄*/if(p1=NULL) return 0; elsep2=(LinkList *)malloc(sizeof(LinkList);strcpy(p2-num,N);strcpy(p2-name,s);for(i=0;iscorei=scorei;p2-next=p1-next;p
30、1-next=p2;void menu_select()printf(nnn);printf(*n);printf(t Welcome to n);printf(t The student score manage system n);printf(*MENU*n);printf(tt1. 輸入學生記錄n); /*輸入學生成績記錄*/printf(tt2. 輸出學生記錄n); /*顯示*/printf(tt3. 刪除學生記錄n); /*刪除*/printf(tt4. 插入一個新的學生記錄n); /*插入*/printf(tt5. 退出n); /*退出*/printf(*n);/*主函數(shù)界面*/
31、void ScoreManage()LinkList *head,New;int i,n;head=init(); /*鏈表初始化,使head的值為NULL*/menu_select(); do printf(ntt輸入您的選擇(15):); scanf(%d,&n);while(n5);for(;) /*循環(huán)無限次*/switch(n) case 1:head=create();break; case 2:print(head);break; case 3:head=Delete(head);break; case 4:head=Insert(head);break; case 5:retu
32、rn; /*如菜單返回值為9那么程序結(jié)束*/menu_select();printf(nttt輸入您的選擇(15):); scanf(%d,&n); /*/各種排序typedef int KeyType; /*定義關(guān)鍵字類型*/typedef char InfoType10;typedef struct /*記錄類型*/KeyType key; /*關(guān)鍵字項*/InfoType data; /*其他數(shù)據(jù)項,類型為InfoType*/ RecType;/*排序的記錄類型定義*/void InsertSort(RecType R,int n) /*對R0.n-1按遞增有序進行直接插入排序*/int
33、 i,j;RecType tmp;for (i=1;i=0 & tmp.keyRj.key) Rj+1=Rj; /*將關(guān)鍵字大于Ri.key的記錄后移*/j-;Rj+1=tmp; /*在j+1處插入Ri*/void BubbleSort(RecType R,int n)int i,j,exchange;RecType tmp;for(i=0;ii;j-)if(Rj.keyRj-1.key)tmp=Rj;Rj=Rj-1;Rj-1=tmp;exchange=1;if(exchange=0) return ;void SelectSort(RecType R,int n)int i,j,k;RecT
34、ype tmp;for(i=0;in-1;i+)k=i;for(j=i+1;jn;j+)if(Rj.keyRk.key)k=j;if(k!=i)tmp=Ri;Ri=Rk;Rk=tmp;void disp(RecType R,int n)int i;for (i=0;in;i+)printf(%d ,Ri.key);void Sort()int i,n=10,k;RecType RMaxSize;KeyType a10;printf(請輸入排序的關(guān)鍵字(10個數(shù)字)n); for (i=0;in;i+)scanf(%d,&ai);for (i=0;idata=ch;p-lchild=p-rchi
35、ld=NULL;if (b=NULL) /*p為二叉樹的根結(jié)點*/ b=p;else /*已建立二叉樹根結(jié)點*/switch(k) case 1:Sttop-lchild=p;break;case 2:Sttop-rchild=p;break;j+;ch=strj;void DispBTNode(BTNode *b) if (b!=NULL)printf(%c,b-data);if (b-lchild!=NULL | b-rchild!=NULL)printf();/*有孩子結(jié)點時才輸出(*/DispBTNode(b-lchild);/*遞歸處理左子樹*/if (b-rchild!=NULL)
36、 printf(,);/*有右孩子結(jié)點時才輸出,*/DispBTNode(b-rchild);/*遞歸處理右子樹*/printf();/*有孩子結(jié)點時才輸出)*/先序遍歷非遞歸算法 void PreOrder(BTNode *b)BTNode *StMaxSize,*p;int top=-1;if(b!=NULL)top+;Sttop=b;while(top-1)p=Sttop;top-;printf(%c,p-data);if(p-rchild!=NULL)top+;Sttop=p-rchild;if(p-lchild!=NULL)top+;Sttop=p-lchild;printf(%c,
37、b);printf(n);/中序遍歷非遞歸算法void InOrder(BTNode *b)BTNode *StMaxSize,*p;int top=-1;if(b!=NULL)p=b;while(top-1|p!=NULL)while(p!=NULL)top+;Sttop=p;p=p-lchild;if(top-1)p=Sttop;top-;printf(%c,p-data);p=p-rchild;printf(n);/后序遍歷非遞歸算法void PostOrder(BTNode *b)BTNode *StMaxSize,*p;int flag,top=-1;if(b!=NULL)dowhi
38、le(b!=NULL)top+;Sttop=b;b=b-lchild;p=NULL;flag=1;while(top!=-1&flag)b=Sttop;if(b-rchild=p)printf(%c,b-data);top-;p=b;elseb=b-rchild;flag=0;while(top!=-1);printf(n);/層序遍歷 void LevelOrder(BTNode *b)BTNode *p;BTNode *quMaxSize;int front,rear;front=rear=-1;rear+;qurear=b;while(front!=rear)front=(front+1
39、)%MaxSize;p=qufront;printf(%c,p-data);if(p-lchild!=NULL)rear=(rear+1)%MaxSize;qurear=p-lchild;if(p-rchild!=NULL)rear=(rear+1)%MaxSize;qurear=p-rchild;void BTtree()BTNode *b;char str100;printf(輸入你要建立二叉樹的結(jié)點:);scanf(%s,str);CreateBTNode(b,str);printf(nn建立二叉樹為:);DispBTNode(b);printf(nn二叉樹b的先序遍歷序列);PreOrder(b);printf(nn二叉樹b的中序遍歷序列);InOrder(b);printf(nn二叉樹b的后序遍歷序列);PostOrder(b);printf(nn二叉樹b的層次遍歷序列);LevelOrder(b);printf(nn);/*/有序表的合并typedef char ElemType; typedef struct ElemType dataMaxSize;/*存放順序表元素*/ int length;/*存放順序表的長度*/ SqList;/*順序表的類型定義*/typedef struct LNode1 /*定義單鏈表結(jié)點類型*/ElemType data;
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二級營銷師模擬試題(含參考答案)
- 綠色環(huán)保設(shè)備進銷存服務(wù)合同
- 2025陜西延安通和電業(yè)有限責任公司供電服務(wù)用工招聘103人筆試參考題庫附帶答案詳解
- 2025河北石家莊市國有企業(yè)招聘21人筆試參考題庫附帶答案詳解
- 2025年鄭州新鄭市投資集團有限公司招聘工作人員25人筆試參考題庫附帶答案詳解
- 2025年宿州市宿馬園區(qū)兩站兩員招聘11人筆試參考題庫附帶答案詳解
- 2025山東濟南軌道交通酒店管理有限公司招聘13人筆試參考題庫附帶答案詳解
- 廣告合同承包協(xié)議書
- 三方公司股份合同協(xié)議書
- 轉(zhuǎn)售合同協(xié)議書
- 律師案件評估報告范文
- 《電力安全工作規(guī)程DLT408-2023》知識培訓
- 文創(chuàng)產(chǎn)品的設(shè)計
- 18個文言虛詞用法及舉例
- GB/T 29498-2024木門窗通用技術(shù)要求
- 白血病M3護理查房
- 信息技術(shù)系統(tǒng)故障應(yīng)急恢復方案及保障措施
- 水腫的判斷及治療指南
- 《工業(yè)機器人系統(tǒng)維護》試卷6及答案
- 大數(shù)據(jù)算法學習通超星期末考試答案章節(jié)答案2024年
- 母乳喂養(yǎng)課件(共68張課件)課件
評論
0/150
提交評論