版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、上海應(yīng)用技術(shù)學(xué)院課程設(shè)計報告課程名稱 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計設(shè)計題目 猴子選大王; 建立二義樹; 各種排序; 有序表的合并; 成績管理系統(tǒng);院系計算機科學(xué)與信息工程 專業(yè)計算機科學(xué)與技術(shù)班級_姓名學(xué)號指導(dǎo)教師 日期一. 目的與要求1. 鞏固和加深對常見數(shù)據(jù)結(jié)構(gòu)的理解和掌握2. 掌握基丁數(shù)據(jù)結(jié)構(gòu)進(jìn)行算法設(shè)計的基本方法3. 掌握用高級語言實現(xiàn)算法的基本技能4. 掌握書寫程序設(shè)計說明文檔的能力5. 提高運用數(shù)據(jù)結(jié)構(gòu)知識及高級語言解決非數(shù)值實際問題的能力二. 課程設(shè)計內(nèi)容說明1.項目一(1) 對設(shè)計任務(wù)內(nèi)容的概述學(xué)生成績管理*任務(wù):要求實現(xiàn)對學(xué)生資料的錄入、瀏覽、插入和刪除等功能。輸入:設(shè)學(xué)生成績以記錄形式
2、存儲,每個學(xué)生記錄包含的信息有:學(xué)號和各 門課程的成績,設(shè)學(xué)生成績至少3門以上。存儲結(jié)構(gòu):采用線性鏈?zhǔn)浇Y(jié)構(gòu)。(2) 詳細(xì)設(shè)計LinkList *create() :輸入學(xué)生成績記錄函數(shù); void print(LinkList *head) :顯示全部記錄函數(shù)LinkList *Delete(LinkList *head):刪除記錄函數(shù)LinkList *Insert(LinkList *head):插入記錄函數(shù)void menu_select() :菜單選擇 void ScoreManage():函數(shù)界面程序流程圖4 插入學(xué)空記錄(4) 程序模塊及其接口描述該程序可以分為以下幾個模塊:1、菜
3、單選擇:void menu_select();提供五種可以選擇的操作,在 main函數(shù)中通過switch 語句調(diào)用菜單 menu_select()函數(shù),進(jìn)入不同的功能函數(shù)中完成相關(guān)操作。2、輸入功能:LinkList *create();通過一個for循環(huán)語句的控制,可以一次完成無數(shù)條記錄的輸入。并將其存入鏈3、輸出功能:void print(LinkList *head);通過一個while的循環(huán)控制語句,在指針p!=NULL時,完成全部學(xué)生記錄的顯示。知道不滿足循環(huán)語句,程序再次回到菜單選擇功能界面。4、刪除功能:LinkList *Delete(LinkList *head);按想要刪除
4、的學(xué)生的學(xué)號首先進(jìn)行查找,通過指針?biāo)赶蚪Y(jié)點的下移來完成,如果找到該記錄,則完成前后結(jié)點的連接,同時對以查找到的結(jié)點進(jìn)行空間的釋 放,最后完成對某個學(xué)生記錄進(jìn)行刪除,并重新存儲。5、插入功能:LinkList *Insert(LinkList *head) ;輸入你想插入的位置,通過指針?biāo)赶蚪Y(jié)點的下移,找到該位置,將該新的學(xué)生記錄插入到該結(jié)點,并對該結(jié)點后面的指針下移。鏈表長度加一,重新存儲。(5) 程序的輸入與輸出描述輸入:調(diào)用LinkList *create() 函數(shù),輸入學(xué)生的姓名、學(xué)號、三門功課的成 績;輸出:調(diào)用void print(LinkList *head) 函數(shù),輸出學(xué)生的
5、記錄。(6) 程序測試主菜單:gE: 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計'主程序-eze-二二二二二二二二二二二二二二二二二二二二二二二二二二二二二二二二二二二二二二二二二統(tǒng) 并 系樹合王 理序叉的大 靠二表選 f±序擊 成各建4£|成績管理系統(tǒng)的主界面:由 飛八主程序-己玄已Ueleone toThe student score manage system |>OOOOOOOOOOOOOOOOOOOOO<MENU MMMIOOOOOOOOOOOOOOOOOOOOOOC蠢彗"己錄1.2.3.4.5.偵>000000000000000000000000000
6、00000000000000000000000<輸入您的選擇學(xué)生成績記錄的輸入:情榆入您想輸入的學(xué)生個數(shù):2臉入姓名:wang隋分別輸入語文、數(shù)學(xué)、英語的分?jǐn)?shù) 3 scoresscoi'el: 88score2:78scoi*e3 :89MX 學(xué)號= 1102椅入姓名hu隋分別輸入語文、數(shù)學(xué)、英語的分?jǐn)?shù) 3 scoresscoi'el: 82scoi*e2 :92scoi*e3 :93輸出學(xué)生成績記錄:學(xué)生成績記錄的刪除(刪除學(xué)號是 1101的學(xué)生記錄)g主程序.exe"傳輸入要刪除的學(xué)生的學(xué)號二以以琴尊一;虹成-浦旻一-戛摩一-蚤窿-;!1101 i uang
7、 i 88!78 i 89!您確定要刪除該學(xué)生的記錄嗎¥/N ?"學(xué)號為1101的學(xué)生記錄己被刪除.Ueleone to The student score manage stjstem K MM MM MM MM MM MM MM MM MM MM mMENU MMMKMJOCKMJOCKMJOCKMMMKMMMKMM尊馨輸出宅生記錄刪除學(xué)生記錄騷入一個新的學(xué)生記錄1.2.3.4.5.KJCMJOCJCMJOCJCMJOCMMJOCMMJOCMMJOCMMJOCKMJOCKJCJOCKJCJOCKJCMMKJCMMKJCM插入新的學(xué)生成績記錄(插入學(xué)號為 1103的學(xué)生記
8、錄)(7) 尚未解決的問題或改進(jìn)方向尚未解決的問題:該成績管理系統(tǒng)還存在不少缺陷,而且它提供的功能也是 有限的,只能實現(xiàn)學(xué)生成績的輸入、輸出、刪除、插入。對學(xué)生成績記錄的 文件保存以及按學(xué)號、姓名等的查詢也是缺少的。還有就是,對丁多個學(xué)生成績的操作也是不夠的。改進(jìn)的方向:在時間許可的條件下,盡量的完善該系統(tǒng)的各種功能,同時也 應(yīng)修改系統(tǒng),讓它更為人性化、簡單化,被廣大用戶所接受。(8) 對軟件的使用說明該軟件是屆丁比較低級的軟件,只是包含了課程設(shè)計的要求的幾個功能: 輸 入、輸出、刪除、插入。所以用戶在使用的過程中肯定會受到一定的局限性、不 方便性,但由丁時間的緣故,無法將軟件做到盡善盡美。2
9、.項目二(1)對設(shè)計任務(wù)內(nèi)容的概述各種排序任務(wù):用程序?qū)崿F(xiàn)插入法排序、選擇法排序、起泡法改進(jìn)算法排序;利用插入排序、選擇法排序和冒泡法的改進(jìn)算法 ,將用戶隨機輸入的一列數(shù) 按遞增的順序排好。輸入的數(shù)據(jù)形式為任何一個正整數(shù),大小不限。輸出的形式:數(shù)字大小逐個遞增的數(shù)列。(2)功能描述該函數(shù)有以下幾個功能:1) 對R0.n-1按遞增有序進(jìn)行直接插入排序2) 對R0.n-1按遞增有序進(jìn)行冒泡排序3) 對R0.n-1按遞增有序進(jìn)行直接選擇排序4) 排序后的輸出5) 調(diào)用所有排序,實現(xiàn)排序(3)程序流程圖(4)詳細(xì)設(shè)計void InsertSort(RecType R,int n):對R0.n-1按遞增
10、有序進(jìn)行直接插入排序 void BubbleSort(RecType R,int n):對 R0.n-1按遞增有序進(jìn)行冒泡排序 void SelectSort(RecTypeR,int n):對 R0.n-1按遞增有序進(jìn)行直接選擇排void disp(RecType R,int n):排序后的輸出void Sort():調(diào)用所有排序,實現(xiàn)排序(5) 程序模塊及其接口描述該程序分為五個模塊:1.輸入功能:void Sort()建立一個數(shù)組存放用戶在鍵盤上輸入的關(guān)鍵字,在分別調(diào)用各種排序的函數(shù), 對關(guān)鍵字進(jìn)行排序。2. 直接插入排序功能:void InsertSort(RecType R,int
11、n)將后一個數(shù)與前一個數(shù)比較,將其插入到第一個比它大的大的數(shù)前面,其余數(shù)字往后移一個位置。每次從無序表中取出第一個元素,把它插入到有序表的合適 位置,使有序表仍然有序。3. 冒泡排序功能:void BubbleSort(RecType R,int n)在排序過程中,執(zhí)行完最后的排序后,雖然數(shù)據(jù)已全部排序完備,但程序無法 判斷是否完成排序,為了解決這一不足,可設(shè)置一個標(biāo)志位exchange,將其初始值設(shè)置為非 0,表示被排序的表是一個無序的表,每一次排序開始前設(shè)置 exchange值為0,在進(jìn)行數(shù)據(jù)交換時,修改 exchange為非0。在新一輪排序開 始時,檢查此標(biāo)志,若此標(biāo)志為0,表示上一次沒
12、有做過交換數(shù)據(jù),則結(jié)束排序; 否則進(jìn)行排序。4. 直接選擇排序功能:void SelectSort(RecType R,int n)在無序區(qū)里找最小的數(shù),第i小的數(shù)字放在第i個位置上,與原來第i個位置 上的數(shù)字交換。5. 輸出功能:void disp(RecType R,int n)(6) 程序的輸入與輸出描述輸入:要求是10個為數(shù)字的關(guān)鍵字;輸出:排序后新的序歹0。(7) 程序測試輸入關(guān)鍵字,調(diào)用各種排序函數(shù)第19頁89 3 2 1 56 7 8 34 55 10直接插入排序:1 2 3 7 8 10 34 55 56 89。飛:主程序.以已口 X冒泡排序:1 2 3 7 8 10 34 5
13、5 56 89直接選擇排序:1 2 3 7 8 10 34 55 56 89二二二二二二二二二二二二二二二二二二二二二二二二二二二二二二二二二二二二二二二二二理序叉的二表 一立屠 成#建有退樹合I-(8) 尚未解決的問題或改進(jìn)方向改進(jìn)方向:雖然給出了它的各種排序的結(jié)果,但是沒有它的箱子過程,這是我的改進(jìn)的方向,希望能將每種排序的過程也能展示給用戶,來體現(xiàn)它們的不同。(9) 對軟件的使用說明用戶只需根據(jù)提示,在鍵盤上輸入要排序的10個關(guān)鍵字。3.項目三(1) 對設(shè)計任務(wù)內(nèi)容的概述有序表的合并要求輸入有序表的數(shù)據(jù),利用順序表和鏈表結(jié)構(gòu)分布完成兩個有序表合并功 能,并輸出合并后的信息。(2) 功能描
14、述該程序有如下幾個功能:1) 初始化順序表2) 初始化鏈表3) 建立順序表4) 尾插法建表5) 輸出合并后的順序表6) 輸出合并后的單鏈表7) 合并順序表8) 合并單鏈表9) 調(diào)用以上的函數(shù),實現(xiàn)有序表的合并(3)概要設(shè)計或程序流程圖(4) 詳細(xì)設(shè)計void InitList(SqList *&L):初始化順序表void InitList1(LinkList1 *&L):初始化鏈表void CreateList(SqList *&L,ElemType a,int n):建立順序表void CreateListR(LinkList1 *&L,ElemType a,
15、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) 初始化、建立順序表2) 初始化、建立鏈表3) 輸出合并后的表4
16、) 合并表(6) 調(diào)試分析或程序測試有序表的合并:I F任程序后蹶-at = : albcblL-(lgef順序表存放有屏表的合并L1L = a b cL2:d j f 歸并3-abcdgef梃表存放有序表的合并 i4如匚 <1 9 ELb:d Jd# L& : a土菜亙統(tǒng)# 系樹合 理序義的 真二表 成各津直制人您的詵擇(7) 尚未解決的問題或改進(jìn)方向不足:不能重復(fù)使用程序。(8) 對軟件的使用說明用戶只需根據(jù)界面的提示,采用對應(yīng)的操作。4.項目四(1)對設(shè)計任務(wù)內(nèi)容的概述建立二義樹,層序、先序、中序、后序遍歷(用遞歸或非遞歸的方法都可以)*任務(wù):要求能夠輸入樹的各個結(jié)點,并能
17、夠輸出用不同方法遍歷的遍歷序歹0; 分別 建立二義樹存儲結(jié)構(gòu)的的輸入函數(shù)、 輸出層序遍歷序列的函數(shù)、輸出先序遍歷序 列的函數(shù)、輸出中序遍歷序列的函數(shù)、輸出后序遍歷序列的函數(shù);(2)功能描述1)建立二義樹2)輸出二義樹3)先序遍歷非遞歸算法:不為空時,訪問根-左-右,采用遞歸的方法。4)中序遍歷非遞歸算法:不為空時,訪問左-根-右,采用遞歸的方法。5)后序遍歷非遞歸算法:不為空時,訪問左-右-根,采用遞歸的方法。6)層序遍歷:運用隊列,隊列不空時,有左孩子將其入隊,有右孩子將其入隊,同時出隊7)調(diào)用以上函數(shù)實現(xiàn)二義樹的各種遍歷(3)概要設(shè)計或程序流程圖開始 L1 f輸入二叉樹的按層結(jié)點值先序遍歷
18、中序遍歷后序遍歷層次遍歷結(jié)束(4) 詳細(xì)設(shè)計void CreateBTNode(BTNode * &b,char *str) :建立二義樹void DispBTNode(BTNode *b):輸出二義樹void PreOrder(BTNode *b):先序遍歷非遞歸算法void InOrder(BTNode *b):中序遍歷非遞歸算法void PostOrder(BTNode *b):后序遍歷非遞歸算法void LevelOrder(BTNode *b):層序遍歷(5) 程序模塊及其接口描述(6) 程序的輸入與輸出描述輸入二義樹的按層結(jié)點值;輸出二義樹先序遍歷訪問結(jié)點的順序;輸出二義樹
19、中序遍歷訪問結(jié)點的順序;輸出二義樹后序遍歷訪問結(jié)點的順序;輸出二義樹層次遍歷訪問結(jié)點的順序;(7) 調(diào)試分析或程序測試用戶從鍵盤上輸入要創(chuàng)建的二義樹結(jié)點:悖立一叉例為:a<b<d<,g>>,c<e,f>>二叉樹h的先序遍歷序列abdgce f二叉樹h的中序遍歷序列dgbaecf二叉樹h的后序遍歷序列g(shù)dbefca二叉樹h的層次遍歷序列abcdefg主菜單統(tǒng) 并 系樹合 理序叉的二表一立屠成各建有退12 3 4 5i入您的選擇(8) 尚未解決的問題或改進(jìn)方向改進(jìn)方向:希望能將系統(tǒng)改進(jìn)的更為人性化,讓界面更舒適,操作更簡單。(9) 對軟件的使用說明用
20、戶只需按照界面的提示,采取相應(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ù),n<m輸出形式:中文提示按照 m個猴子,數(shù)n個數(shù)的方法,輸出為大王的猴子 是幾號,建立一個函數(shù)來實現(xiàn)此功能(2) 需求分析或功能描述為猴子編號out,編號out=pass (pass為密碼值),該猴子離圈,次數(shù)step+ 剩下的猴
21、子繼續(xù)次操作,直到次數(shù) step=猴子monkey時結(jié)束。(3) 概要設(shè)計或程序流程圖(4) 詳細(xì)設(shè)計或源代碼說明為猴子編號out,編號out=pass (pass為密碼值),該猴子離圈,次數(shù)step+ 剩下的猴子繼續(xù)次操作,直到次數(shù) step=猴子monkey時結(jié)束。函數(shù)int Monkey()實現(xiàn)了這一功能。(5) 程序模塊及其接口描述運用隊歹U (環(huán)形隊歹U),編號=密碼值 入隊;為猴子編號out,編號out=pass (pass為密碼值),該猴子離圈,次數(shù)step+。剩下的猴子繼續(xù)次操作,直到次 數(shù) step=猴子 monkey時結(jié)束。函數(shù)int Monkey()實現(xiàn)了這一功能。(6)
22、程序的輸入與輸出描述輸入數(shù)據(jù):輸入m,n m,n為整數(shù),n<m輸出形式:中文提示按照 m個猴子,數(shù)n個數(shù)的方法,輸出為大王的猴子 是幾號,建立一個函數(shù)來實現(xiàn)此功能。(7)調(diào)試分析或程序測試猴子數(shù)量8,密碼值9 (猴子數(shù) >密碼值)(8)尚未解決的問題或改進(jìn)方向不足:不能重復(fù)使用程序,如果數(shù)字大的話,輸出繁瑣(9)對軟件的使用說明用戶只需根據(jù)軟件界面的提示進(jìn)行相關(guān)操作。三. 結(jié)論及體會本學(xué)期,我學(xué)會了常用數(shù)據(jù)結(jié)構(gòu):數(shù)組(連續(xù)空間),棧(先進(jìn)后出),隊列 (先進(jìn)先出),鏈表(指針),樹(前驅(qū)、后繼,根、葉子),圖(點、邊),堆(特 殊的樹,根節(jié)點的值最大或最?。┻€有線性表存儲結(jié)構(gòu):順序
23、存儲結(jié)構(gòu)和鏈?zhǔn)酱?儲,常用的排序算法。在這一周里,自己用了 C Free做了一個程序,分別實現(xiàn)了學(xué)生成績管理系 統(tǒng)、各種排序、有序表的合并、二義樹的建立及遍歷以及猴子選大王,通過本次 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計,我學(xué)習(xí)了很多課上沒弄懂的動西,鞏固了關(guān)丁二義樹、棧、 鏈表等知識。在設(shè)計程序時,雖然很用心的做,但還是遇到種種難題,通過上網(wǎng)查找資料、 圖書館查閱資料、問老師的方式,最終還是解決多數(shù),雖然最后的程序不是很完 美,但是因為是通過自己的努力完成的,還是感覺很滿意,也收獲很大東西。經(jīng)過了這次課程設(shè)計,現(xiàn)在已經(jīng)可以了解很多錯誤在英文里的提示, 這對我來說 是一個突破性的進(jìn)步,眼看著一個個錯誤通過自己的努
24、力在我眼前消失, 覺得很 是開心。在這一段努力學(xué)習(xí)的過程中,我的編程設(shè)計有了明顯的提高,其實現(xiàn)在 想起來,收獲還真是不少,雖然說以前非常不懂這門語言,在它上面花費了好多 心血,覺得它很難,是需用花費了大量的時間編寫出來的?,F(xiàn)在真正的明白了一 些代碼的應(yīng)用,每個程序都有一些共同點,通用的結(jié)構(gòu),相似的格式。只要努力 去學(xué)習(xí),就會靈活的去應(yīng)用它。總之,通過這次的課程設(shè)計,我們收獲匪淺,首先由衷感謝老師提供這樣的 一個機會鍛煉自己,感受到學(xué)來的知識不只是用來完成試卷的。 一向習(xí)慣獨立思 考的自己學(xué)會了積極的與別人交流,取長補短, 共同進(jìn)步。課程設(shè)計使自己發(fā)現(xiàn) 考試不是最重要的,最重要的是能運用所學(xué)的知
25、識。在整個課程設(shè)計的學(xué)習(xí)過程 中,不再是學(xué)到知識解題,而是在實際運用時遇到什么學(xué)什么, 重在把知識應(yīng)用 丁實際。附錄1:參考文獻(xiàn)1 數(shù)據(jù)結(jié)構(gòu)教程(第 3版),李春葆,清華大學(xué)出版社,20102 數(shù)據(jù)結(jié)構(gòu),楊劍,清華大學(xué)出版社,20113 數(shù)據(jù)結(jié)構(gòu)(C語言版),嚴(yán)蔚敏 吳偉民,清華大學(xué)出版社,19974 Data Structures Using C 數(shù)據(jù)結(jié)構(gòu)(C 語言版),R Krishnamoorthy、G Indirani Kumaravel , 清華大學(xué)出版社,2009-95 C+數(shù)據(jù)結(jié)構(gòu)與程序設(shè)計(美)Robert L.Kruse/Alexander J.Ryba著/錢麗萍譯,清華大學(xué)
26、出版社,20046 計算機算法設(shè)計與分析(第 2版),王曉東,電子工業(yè)出版社,2004附錄2 .部分源代碼活單#include <stdio.h>#include <malloc.h>#include<string.h>#include <iostream>#include <stdlib.h>#define LEN sizeof(LinkList)#define MaxSize 50*成績管理系統(tǒng)typedef struct LNode/*定義單鏈表結(jié)點類型*/char name10; 姓名char num10; 學(xué)號int sco
27、re3;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請輸入您想輸入的學(xué)生個數(shù):");scanf("%d",&k);for(j=0;j<k;j+)( p=(LinkList *)malloc(LEN); /*開辟一個新的單
28、元 */if(p=NULL)/*如果指針p為空*/( printf("n輸出內(nèi)存溢出.");/*輸出內(nèi)存溢出*/return (head); /*返回頭指針,下同*/printf(-輸入學(xué)號:");scanf("%s",p->num);printf("輸入姓名:");scanf("%s",p->name);printf(”請分別輸入語文、數(shù)學(xué)、英語的分?jǐn)?shù)%d scoresn",3);/*開始輸入*/for(i=0;i<3;i+)/*3 門課程循環(huán) 3 次*/(doprintf(
29、"score%d:",i+1);scanf("%d",&p->scorei);if(p->scorei<0 | p->scorei>100) /* 確保成績在 0100 之問*/printf("Data error,please enter again.n");while(p->scorei<0 | p->scorei>100);p->next=head;/*將頭結(jié)點做為新輸入結(jié)點的后繼結(jié)點*/head=p;/*新輸入結(jié)點為新的頭結(jié)點*/return(head);/*
30、顯示全部記錄函數(shù)*/ void print(LinkList *head) LinkList *p;system("cls");p=head;/*初值為頭指針*/printf("n*LinkList*n");printf("n");printf("|學(xué)號| 姓名|語文|數(shù)學(xué)|英語| n");printf("n");while(p!=NULL)printf("| %4s|%-4s | %3d | %3d | %3d |n",p->num,p->name,p->
31、score0,p->score1,p->score2);p=p->next;printf("n");printf("*END*n");/*刪除記錄函數(shù)*/LinkList *Delete(LinkList *head)LinkList *p1,*p2;/*p1為查找到要刪除的結(jié)點指針,p2為其前驅(qū)指針*/char c,s6;/*s6用來存放學(xué)號,c用來輸入字母*/system("cls");printf("請輸入要刪除的學(xué)生的學(xué)號:");scanf("%s",s);p1=p2=
32、head;/*給p1和p2賦初值頭指針*/while(strcmp(p1->num,s) && p1 != NULL)/*當(dāng)記錄的學(xué)號不是要找的,或指針不為空時*/p2=p1;/*將p1指針值賦給p2作為p1的前驅(qū)指針*/p1=p1->next;/*將pl指針指向下一條記錄*/if(strcmp(p1->num,s)=0)/*學(xué)號找到了 */n");printf("*FOUND*n");printf("n");printf("|學(xué)號| 姓名 |語文| 數(shù)學(xué)|英語|n");printf(&qu
33、ot;printf("| %4s|%4s|%3d|%3d|%3dn");|n",p1->num,p1->name,p1->score0,p1->score1,p1->score2);printf("printf("*END*n");printf("您確定要刪除該學(xué)生的記錄嗎Y/N ?"); /*提示是否要刪除,輸入Y刪除,N則退出*/for(;)/*如果不刪除,則跳出本循環(huán)*/(scanf("%c",&c);if(c='n'|c='N
34、') break;if(c='y'|c='Y')*/if(p1=head)/*若p1=head,說明被刪結(jié)點是首結(jié)點head=p1->next;/*把第二個結(jié)點地址賦予head*/elsep2->next=p1->next;free(p1);/*否則將一下結(jié)點地址賦給前一結(jié)點地址*/printf("n學(xué)號為%s的學(xué)生記錄已被刪除.n",s);break;/*刪除后就跳出循環(huán)*/elseprintf("n找不到學(xué)號為 %s的學(xué)生記錄.n",s); /*找不到該結(jié)點*/ return(head);插入
35、LinkList *Insert(LinkList *head)int k;在表中第k個位置插入printf("請輸入插入的位置:");scanf("%d",&k);int j=0,i=0;LinkList *p1,*p2;/*p1為查找到要刪除的結(jié)點指針,p2為其前驅(qū)指針*/char N10,s10;/*s10用來存放姓名,N10用來存放學(xué)號*/int score3;system("cls");printf(-輸入學(xué)號:");scanf("%s",N);printf("輸入姓名:&qu
36、ot;);scanf("%s",s);printf("請分別輸入語文、數(shù)學(xué)、英語的分?jǐn)?shù) %d scoresn",3);/*開始輸入*/ for(i=0;i<3;i+)/*3 門課程循環(huán) 3 次*/doprintf("score%d:",i+1);scanf("%d",&scorei);if(scorei<0 | scorei>100) /* 確保成績在 0100 之問 */printf("Data error,please enter again.n");第21頁whi
37、le(scorei<0 | scorei>100);p1=head; /*給pl賦初值頭指針*/while(j<k-1&& p1 != NULL)j+;p1=p1->next;/*將p1指針指向下一條記錄*/if(p1=NULL) return 0;else p2=(LinkList *)malloc(sizeof(LinkList);strcpy(p2->num,N);strcpy(p2->name,s);for(i=0;i<3;i+)p2->scorei=scorei;p2->next=p1->next;p1-&g
38、t;next=p2; void menu_select() printf("nnn");printf("*n");printf("tWelcome ton");printf("t The student score manage system n");printf("T*MENU*n");第23頁/*輸入學(xué)生成績記錄*/*顯示*/*刪除*/printf("tt1.輸入學(xué)生記錄 n");printf("tt2.輸出學(xué)生記錄 n");printf("
39、tt3.刪除學(xué)生記錄 n");printf("tt4.插入一個新的學(xué)生記錄n");/*插入*/*退出*/printf('*n");/*主函數(shù)界面*/void ScoreManage()( LinkList *head,New;int i,n;head=init();/*鏈表初始化,使head的值為NULL*/menu_select();doprintf("ntt 輸入您的選擇(15):");scanf("%d",&n);while(n<1|n>5);for(;)/*循環(huán)無限次*/ swi
40、tch(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:return;/*如菜單返回值為9則程序結(jié)束*/menu_select();printf("nttt 輸入您的選擇(15):");scanf("%d",&n);*各種排序typedef int KeyType; /* 定義關(guān)鍵字類型 */typedef char InfoType10;typede
41、f struct/* 記錄類型 */KeyType key;/* 關(guān)鍵字項 */InfoType data; /* 其他數(shù)據(jù)項,類型為 InfoType*/ RecType;/*排序的記錄類型定義*/ void InsertSort(RecType R,int n) /* 對 R0.n-1按遞增有序進(jìn)行直接插入排序 */ int i,j;RecType tmp;for (i=1;i<n;i+)tmp=Ri;j=i-1;/*從右向左在有序區(qū)R0.i-1中找Ri的插入位置*/while (j>=0 && tmp.key<Rj.key)Rj+1=Rj; /*將關(guān)鍵字
42、大丁 Ri.key的記錄后移*/j-;Rj+1=tmp;/* 在 j+1 處插入 Ri*/第#頁void BubbleSort(RecType R,int n)( int i,j,exchange;RecType tmp;for(i=0;i<n-1;i+)( exchange=0;for(j=n-1;j>i;j-)if(Rj.key<Rj-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;RecType
43、tmp;for(i=0;i<n-1;i+)( k=i;for(j=i+1;j<n;j+)if(Rj.key<Rk.key) k=j;if(k!=i)( tmp=Ri;Ri=Rk;Rk=tmp;第25頁void disp(RecType R,int n)( int i;for (i=0;i<n;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;i<n;i+)s
44、canf("%d",&ai);for (i=0;i<n;i+)Ri.key=ai;printf("nn直接插入排序:");InsertSort(R,n);disp(R,n);printf("nn 冒泡排序:");BubbleSort(R,n);disp(R,n);第#頁printf("nn直接選擇排序:,SelectSort(R,n);disp(R,n);*建立二義樹typedef char ElemType;typedef struct nodeElemType data;/* 數(shù)據(jù)元素 */struct n
45、ode *lchild; /*指向左孩子結(jié)點 */struct node *rchild; /*指向右孩子結(jié)點 */ BTNode;void CreateBTNode(BTNode * &b,char *str)BTNode *StMaxSize,*p=NULL;int top=-1,k,j=0;char ch;b=NULL;/*建立的二義樹初始時為空*/ch=strj;while (ch!='0') /*str 未掃描完時循環(huán) */switch(ch)case '(':top+;Sttop=p;k=1; break;/* 為左孩子結(jié)點 */case &
46、#39;)':top-;break;case ',':k=2; break;/*為孩子結(jié)點右結(jié)點*/default:p=(BTNode *)malloc(sizeof(BTNode); p->data=ch;p->lchild=p->rchild=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(BTN
47、ode *b)if (b!=NULL) printf("%c",b->data);if (b->lchild!=NULL | b->rchild!=NULL) printf("(");/*有孩子結(jié)點時才輸出(*/DispBTNode(b->lchild);/*遞歸處理左子樹 */if (b->rchild!=NULL) printf(",");/*有右孩子結(jié)點時才輸出,*/*遞歸處理右子樹*/*有孩子結(jié)點時才輸出)*/DispBTNode(b->rchild); printf(")&quo
48、t;);第27頁先序遍歷非遞歸算法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",b);printf("n");中序遍歷非
49、遞歸算法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;
50、if(b!=NULL)(do(while(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;else(b=b->rchild;flag=0;第33頁while(top!=-1);printf("n");層序遍歷void LevelOrder(BTNode *b)( BTNode *p;BTNode *quMaxSize;i
51、nt front,rear;front=rear=-1;rear+;qurear=b;while(front!=rear)( front=(front+1)%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;pr
52、intf("輸入你要建立二義樹的結(jié)點:");scanf("%s",str);CreateBTNode(b,str);printf("nn 建立二義樹為:");DispBTNode(b);printf("nn二義樹b的先序遍歷序歹U ");PreOrder(b);printf("nn二義樹b的中序遍歷序歹U ");InOrder(b);printf("nn二義樹b的后序遍歷序歹U ");PostOrder(b);printf("nn二義樹b的層次遍歷序歹U "
53、;);LevelOrder(b);printf("nn");*有序表的合并typedef char ElemType;/*存放順序表元素*/*存放順序表的長度*/*順序表的類型定義*/*定義單鏈表結(jié)點類型*/typedef struct( ElemType dataMaxSize;int length; SqList;typedef struct LNode1(ElemType data;struct LNodel *next; /*指向后繼結(jié)點 */ LinkListl;void InitList(SqList *&L)(L=(SqList *)malloc(si
54、zeof(SqList);/*分配存放線性表的空間 */L->length=0;void InitList1(LinkList1 *&L)(L=(LinkList1 *)malloc(sizeof(LinkList1); /*創(chuàng)建頭結(jié)點 */L->next=NULL;void CreateList(SqList *&L,ElemType a,int n)/*建立順序表*/(int i;for (i=0;i<n;i+)L->datai=ai;L->length=n;void CreateListR(LinkList1 *&L,ElemType a,int n)/*尾插法建立單鏈表*/(LinkList1 *s,*r;int i;L=(LinkList1 *)malloc(sizeof(LinkList1); /*創(chuàng)建頭結(jié)點 */L->next=NULL;r=L;/*r始終指向終端結(jié)點,開始時指向頭結(jié)點*/for (i=0;i<n;i+)(s=(LinkList1 *)malloc(sizeof(Li
溫馨提示
- 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 住院高血壓患者合并血糖異常對靶器官損害影響的相關(guān)分析
- 二零二五年度股東協(xié)議書-股東投票權(quán)及決策機制協(xié)議3篇
- 時代楷模先進(jìn)事跡在高中思政課教學(xué)中的應(yīng)用研究
- 投訴管理制度及處理流程
- 開啟自主學(xué)習(xí)的閘門
- 二零二五年度農(nóng)業(yè)高新技術(shù)田地租賃合作協(xié)議3篇
- 航空器材采購招標(biāo)合同三篇
- 2025屆南通市海安高三語文上學(xué)期期末考試卷附答案解析
- 醫(yī)學(xué)美容科護士總結(jié)
- 專業(yè)化妝前臺接待員工作總結(jié)
- 護士的護理職業(yè)生涯規(guī)劃
- 義務(wù)教育數(shù)學(xué)課程標(biāo)準(zhǔn)(2022年版)重點
- 2021上海春考作文題解析及范文(怎樣做與成為什么樣人)
- 體育館改造裝修工程施工組織設(shè)計
- 137案例黑色三分鐘生死一瞬間事故案例文字版
- 【魔鏡洞察】2024藥食同源保健品滋補品行業(yè)分析報告
- 鋼結(jié)構(gòu)工程施工(第五版) 課件 2項目四 高強度螺栓
- 大學(xué)生就業(yè)指導(dǎo)(高等院校學(xué)生學(xué)習(xí)就業(yè)指導(dǎo)課程)全套教學(xué)課件
- 《實驗診斷學(xué)》課件
- 小學(xué)網(wǎng)管的工作總結(jié)
- 診所校驗現(xiàn)場審核表
評論
0/150
提交評論