數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì) 猴子選大王 joseph環(huán) 飛機(jī)訂票 文章編輯

上傳人:r****d 文檔編號(hào):71245014 上傳時(shí)間:2022-04-06 格式:DOC 頁(yè)數(shù):31 大?。?45.50KB
收藏 版權(quán)申訴 舉報(bào) 下載
數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì) 猴子選大王 joseph環(huán) 飛機(jī)訂票 文章編輯_第1頁(yè)
第1頁(yè) / 共31頁(yè)
數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì) 猴子選大王 joseph環(huán) 飛機(jī)訂票 文章編輯_第2頁(yè)
第2頁(yè) / 共31頁(yè)
數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì) 猴子選大王 joseph環(huán) 飛機(jī)訂票 文章編輯_第3頁(yè)
第3頁(yè) / 共31頁(yè)

下載文檔到電腦,查找使用更方便

16 積分

下載資源

還剩頁(yè)未讀,繼續(xù)閱讀

資源描述:

《數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì) 猴子選大王 joseph環(huán) 飛機(jī)訂票 文章編輯》由會(huì)員分享,可在線閱讀,更多相關(guān)《數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì) 猴子選大王 joseph環(huán) 飛機(jī)訂票 文章編輯(31頁(yè)珍藏版)》請(qǐng)?jiān)谘b配圖網(wǎng)上搜索。

1、 課 程 設(shè) 計(jì) 課程名稱: 數(shù)據(jù)結(jié)構(gòu) 題目名稱: 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì) 專業(yè)班級(jí): **計(jì)算機(jī)系********班 學(xué)生姓名: 田龍 學(xué) 號(hào): 指導(dǎo)教師: 張艷 二○一一年十二月二十二日 目錄 引言 3 一、課程設(shè)計(jì)目的與要求 4 1.課程設(shè)計(jì)的目的 4 2.課程設(shè)計(jì)的根本要求 4 二、猴子選大王 5 1.提出問題 5 2.概要設(shè)計(jì) 5 3.調(diào)試分析 6 二、joseph環(huán) 7 1.提出問題 7 2.概要設(shè)計(jì) 7 2.1 算法設(shè)計(jì) 7 2.2 存儲(chǔ)結(jié)構(gòu)設(shè)計(jì) 7 3.調(diào)試分析 8

2、 三、文章編輯 9 1.提出問題 9 2.概要設(shè)計(jì) 9 3.調(diào)試分析 11 四、飛機(jī)訂票系統(tǒng) 12 1.提出問題 12 2.概要設(shè)計(jì) 12 2.1 算法設(shè)計(jì) 12 2.1 存儲(chǔ)結(jié)構(gòu)設(shè)計(jì) 13 3.調(diào)試分析 14 附錄一:猴子選大王——源程序 17 附錄二:joseph環(huán)——源程序 19 附錄三:文章編輯——源程序 22 附錄四:飛機(jī)訂票系統(tǒng)——源程序 27 引言 課程設(shè)計(jì)是學(xué)生對(duì)課程所學(xué)知識(shí)的綜合運(yùn)用,它與課堂聽講、上機(jī)實(shí)驗(yàn)、課外練習(xí)、自學(xué)研究相輔相成,構(gòu)成一個(gè)完整的課程教學(xué)體系。?數(shù)據(jù)結(jié)構(gòu)?是一門實(shí)踐性強(qiáng)的課程,其中對(duì)算法設(shè)計(jì)和程序編寫的掌握尤其重要

3、。學(xué)生雖然可以通過與課堂教學(xué)同步的上機(jī)實(shí)驗(yàn)完成相關(guān)內(nèi)容的練習(xí),但卻往往局限于一些功能簡(jiǎn)單、彼此之間關(guān)系獨(dú)立的算法和程序。課程設(shè)計(jì)是一種綜合訓(xùn)練,致力于培養(yǎng)學(xué)生全面、靈活的算法設(shè)計(jì)思想和較高的編程能力,要求學(xué)生編寫的程序結(jié)構(gòu)清楚和正確易讀,符合軟件工程的標(biāo)準(zhǔn),能夠?yàn)榻窈髲氖掠?jì)算機(jī)開發(fā)與應(yīng)用打下根底。需要學(xué)生具有豐富科學(xué)知識(shí)、獨(dú)立解決實(shí)際問題、有創(chuàng)造能力,這也是該課程設(shè)計(jì)的最終目的。 通過本課程設(shè)計(jì),使自己更加系統(tǒng)地理解和掌握數(shù)據(jù)結(jié)構(gòu)的根本概念;能自如地根據(jù)實(shí)際要求,設(shè)計(jì)相應(yīng)的數(shù)據(jù)結(jié)構(gòu),并運(yùn)用C語(yǔ)言實(shí)現(xiàn)所設(shè)計(jì)的算法,編寫較大型的程序,分析和解決實(shí)際應(yīng)用問題,進(jìn)一步加深、穩(wěn)固所學(xué)專業(yè)課程的根本理論

4、知識(shí),理論聯(lián)系實(shí)際,進(jìn)一步培養(yǎng)自己綜合分析問題和解決問題的能力。掌握C語(yǔ)言獨(dú)立的編寫、調(diào)試應(yīng)用程序和進(jìn)行其它相關(guān)設(shè)計(jì)的技能。 此工程主要是考察我們對(duì)結(jié)構(gòu)體、數(shù)組、文件等具體操作,以及對(duì)C語(yǔ)言語(yǔ)法的掌握,所以做成此工程要求比擬高的設(shè)計(jì)要求,對(duì)整體有很熟悉的概括,同時(shí)調(diào)試過程也是很重要的,對(duì)程序界面的要求也比擬高,要設(shè)計(jì)的合理同時(shí)也要美觀一點(diǎn),能夠人性化的描述清楚你的各個(gè)功能,一目了然,對(duì)其他用戶使用本程序簡(jiǎn)單易懂,這才能本錢程序或本系統(tǒng)是成功的。 這個(gè)設(shè)計(jì)能夠練習(xí)我們的理解和運(yùn)用結(jié)構(gòu)化程序設(shè)計(jì)的思想和方法,掌握開發(fā)一個(gè)小型實(shí)用系統(tǒng)的根本方法,學(xué)會(huì)調(diào)試一個(gè)比擬長(zhǎng)的程序的根本方法,同時(shí)掌握書寫程

5、序設(shè)計(jì)開發(fā)文檔的能力。 一、課程設(shè)計(jì)目的與要求 1.課程設(shè)計(jì)的目的 課程設(shè)計(jì)是學(xué)生對(duì)課程所學(xué)知識(shí)的綜合運(yùn)用,它與課堂聽講、上機(jī)實(shí)驗(yàn)、課外練習(xí)、自學(xué)研究相輔相成,構(gòu)成一個(gè)完整的課程教學(xué)體系。?數(shù)據(jù)結(jié)構(gòu)?是一門實(shí)踐性強(qiáng)的課程,其中對(duì)算法設(shè)計(jì)和程序編寫的掌握尤其重要。學(xué)生雖然可以通過與課堂教學(xué)同步的上機(jī)實(shí)驗(yàn)完成相關(guān)內(nèi)容的練習(xí),但卻往往局限于一些功能簡(jiǎn)單、彼此之間關(guān)系獨(dú)立的算法和程序。課程設(shè)計(jì)是一種綜合訓(xùn)練,致力于培養(yǎng)學(xué)生全面、靈活的算法設(shè)計(jì)思想和較高的編程能力,要求學(xué)生編寫的程序結(jié)構(gòu)清楚和正確易讀,符合軟件工程的標(biāo)準(zhǔn),能夠?yàn)榻窈髲氖掠?jì)算機(jī)開發(fā)與應(yīng)用打下根底。需要學(xué)生具有豐富科學(xué)知識(shí)、獨(dú)立解

6、決實(shí)際問題、有創(chuàng)造能力,這也是該課程設(shè)計(jì)的最終目的。 2.課程設(shè)計(jì)的根本要求 1、了解并掌握數(shù)據(jù)結(jié)構(gòu)與算法的設(shè)計(jì)方法,具備初步的獨(dú)立分析和設(shè)計(jì)能力; 2、初步掌握軟件開發(fā)過程的問題分析、系統(tǒng)設(shè)計(jì)、程序編碼、測(cè)試等根本方法和技能; 3、提高綜合運(yùn)用所學(xué)的理論知識(shí)和方法獨(dú)立分析和解決問題的能力; 4、訓(xùn)練用系統(tǒng)的觀點(diǎn)和軟件開發(fā)一般標(biāo)準(zhǔn)進(jìn)行軟件開發(fā),培養(yǎng)軟件工作者所應(yīng)具備的科學(xué)的工作方法和作風(fēng)。 5、設(shè)計(jì)的題目要求到達(dá)一定工作量,并具有一定的深度和難度。 6、編寫出課程設(shè)計(jì)說明書,說明書不少于15頁(yè)〔不包括代碼〕。 二、猴子選大王 1.提出問題 任務(wù): 一堆猴子都有編號(hào),編號(hào)是

7、1,2,3 ...m ,這群猴子〔m個(gè)〕按照1-m的順序圍坐一圈,從第1開始數(shù),每數(shù)到第N個(gè),該猴子就要離開此圈,這樣依次下來(lái),直到圈中只剩下最后一只猴子,那么該猴子為大王。要求:輸入數(shù)據(jù):輸入m,n m,n 為整數(shù),n

8、出列,即用指針移動(dòng)查找法將計(jì)數(shù)器數(shù)到m的指針指向的內(nèi)容變?yōu)?,用for循環(huán),直到只有一個(gè)元素不為0時(shí),最后不為0的元素的值即為大王。實(shí)現(xiàn)這個(gè)程序功能需3個(gè)模塊,一個(gè)模塊用數(shù)組指針實(shí)現(xiàn)猴子編號(hào),一個(gè)模塊用指針移動(dòng)查找法實(shí)現(xiàn)猴子出局,最后主模塊將前兩個(gè)模塊要用到的函數(shù),數(shù)組定義。具體步驟如下: 第一步 建立數(shù)組,填入猴子編號(hào)及猴子出局時(shí)報(bào)的數(shù) 第二步 從第一個(gè)猴子報(bào)數(shù) 第三步 數(shù)到m讓指針指向元素變?yōu)? 第四步 繼續(xù)報(bào)數(shù),重復(fù)第三步 猴子的存放采用鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu),利用循環(huán)鏈表來(lái)實(shí)現(xiàn)建立的,其表示方法是遞歸定義的: typedef struct LNode{ ElemType dat

9、a; struct LNode *next; }LNode, *LinkList; 根據(jù)題目要求,要讓這M只猴子順序圍坐一圈,那就得用循環(huán)鏈表,只須將單循環(huán)鏈表的尾指針的NEXT域指向頭指針。它的判空條件是L=L->next =NULL; 〔非空表〕 〔空表〕 單循環(huán)鏈表 3.調(diào)試分析 二、joseph環(huán) 1.提出問題 任務(wù): 編號(hào)是1,2,……,n的n個(gè)人按照順時(shí)針方向圍坐一圈,每個(gè)人只有一

10、個(gè)密碼〔正整數(shù)〕。一開始任選一個(gè)正整數(shù)作為報(bào)數(shù)上限值m,從第一個(gè)人開始順時(shí)針方向自1開始順序報(bào)數(shù),報(bào)到m時(shí)停止報(bào)數(shù)。報(bào)m的人出列,將他的密碼作為新的m值,從他在順時(shí)針方向的下一個(gè)人開始重新從1報(bào)數(shù),如此下去,直到所有人全部出列為止。設(shè)計(jì)一個(gè)程序來(lái)求出出列順序。 要求:利用單向循環(huán)鏈表存儲(chǔ)結(jié)構(gòu)模擬此過程,按照出列的順序輸出各個(gè)人的編號(hào)。 測(cè)試數(shù)據(jù): m的初值為20,n=7 ,7個(gè)人的密碼依次為3,1,7,2,4,7,4,首先m=6,那么正確的輸出是什么? 要求: 輸入數(shù)據(jù):建立輸入處理輸入數(shù)據(jù),輸入m的初值,n ,輸入每個(gè)人的密碼,建立單循環(huán)鏈表。 輸出形式: 建立一個(gè)輸出函數(shù),將

11、正確的輸出序列。 2.概要設(shè)計(jì) 2.1 算法設(shè)計(jì) 利用單向循環(huán)鏈表存儲(chǔ)結(jié)構(gòu)模擬此過程,因?yàn)檠h(huán)鏈表最后一個(gè)結(jié)點(diǎn)的指針域指向頭結(jié)點(diǎn),整個(gè)鏈表形成一人環(huán),剛好和題中的“n個(gè)人按照順時(shí)針方向圍坐一圈,每個(gè)人只有一個(gè)密碼〔正整數(shù)〕〞內(nèi)容要求一致,而且,循環(huán)鏈表中任一結(jié)點(diǎn)出發(fā)均可找到表中其他結(jié)點(diǎn),利用這一優(yōu)點(diǎn)可較容易地找出報(bào)數(shù)的人及下一個(gè)報(bào)數(shù)的人,最后按照出列的順序用一個(gè)for語(yǔ)句實(shí)現(xiàn)。 2.2 存儲(chǔ)結(jié)構(gòu)設(shè)計(jì) 密碼和序號(hào)的存放采用鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu),利用循環(huán)鏈表來(lái)實(shí)現(xiàn)建立的,其表示方法是遞歸定義的。要讓這M個(gè)人順序圍坐一圈,那就得用循環(huán)鏈表,只須將單循環(huán)鏈表的尾指針的NEXT域指向頭指針。

12、 3.調(diào)試分析 三、文章編輯 1.提出問題 任務(wù): 輸入一頁(yè)文字,程序可以統(tǒng)計(jì)出文字、數(shù)字、空格的個(gè)數(shù)。靜態(tài)存儲(chǔ)一頁(yè)文章,每行最多不超過80個(gè)字符,共N行; 要求: 〔1〕分別統(tǒng)計(jì)出其中英文字母數(shù)和空格數(shù)及整篇文章總字?jǐn)?shù); 〔2〕統(tǒng)計(jì)某一字符串在文章中出現(xiàn)的次數(shù),并輸出該次數(shù); 〔3〕刪除某一子串,并將后面的字符前移。存儲(chǔ)結(jié)構(gòu)使用線性表,分別用幾個(gè)子函數(shù)實(shí)現(xiàn)相應(yīng)的功能; 〔4〕輸入數(shù)據(jù)的形式和范圍:可以輸入大寫、小寫的英文字母、任何數(shù)字及標(biāo)點(diǎn)符號(hào)。 輸出形式: 〔1〕分行輸出用戶輸入的各行字符; 〔2〕分4行輸出"全部字母數(shù)"、"數(shù)字個(gè)數(shù)"、"空格個(gè)數(shù)"

13、、"文章總字?jǐn)?shù)"〔3〕輸出刪除某一字符串后的文章。 2.概要設(shè)計(jì) 〔1〕定義結(jié)構(gòu)體 struct line,文本行采用順序存儲(chǔ),行與行之間采用鏈?zhǔn)酱鎯?chǔ)。 〔2〕主要函數(shù): int FindString(LINE * &head,char *str) /*統(tǒng)計(jì)str在文章中出現(xiàn)的次數(shù)*/ ①.查找第一個(gè)字符,如果有第一個(gè)字符即p->data[i]==str[0],設(shè)計(jì)數(shù)器k=0; ②.查找這個(gè)字符后面的字符與要查找的字符串是否匹配即p->data[i+j]==str[j],如果匹配k++; ③.重復(fù)第二步,如果k=len2,那么查找到,count++;如果沒查找到,重新進(jìn)行第一步。

14、 void delstringword(char *s,char *str) /*刪除字符串*s中的字符串*str*/ 實(shí)現(xiàn)思想: ①.從字符串s中尋找str第一次出現(xiàn)的位置 *p=strstr(s,str); ②.len=strlen(s);i=len-strlen(p)即前i項(xiàng)恰好不含要?jiǎng)h除的字符串,將前i項(xiàng)復(fù)制到tmp中 ③.j=i+strlen(str) 即要?jiǎng)h除的字符串在i+1和j之間,將j之后的字符串復(fù)制到tmp中 ④.將tmp賦給串s,返回s 3.調(diào)試分析 四、飛機(jī)訂票系統(tǒng) 1.提出問題 任務(wù): 通過此系統(tǒng)可以實(shí)現(xiàn)如下功能: 錄入: 可

15、以錄入航班情況〔數(shù)據(jù)可以存儲(chǔ)在一個(gè)數(shù)據(jù)文件中,數(shù)據(jù)結(jié)構(gòu)、具體數(shù)據(jù)自定〕 查詢: 可以查詢某個(gè)航線的情況〔如,輸入航班號(hào),查詢起降時(shí)間,起飛抵達(dá)城市,航班票價(jià),票價(jià)折扣,確定航班是否滿倉(cāng)〕; 訂票: 〔訂票情況可以存在一個(gè)數(shù)據(jù)文件中,結(jié)構(gòu)自己設(shè)定〕可以訂票,如果該航班已經(jīng)無(wú)票,可以提供相關(guān)可選擇航班; 退票: 可退票,退票后修改相關(guān)數(shù)據(jù)文件;客戶資料有姓名,訂票數(shù)量及航班情況,訂單要有編號(hào)。 修改航班信息: 當(dāng)航班信息改變可以修改航班數(shù)據(jù)文件 要求: 根據(jù)以上功能說明,設(shè)計(jì)航班信息,訂票信息的存儲(chǔ)結(jié)構(gòu),設(shè)計(jì)程序完成功能。 2.概要設(shè)計(jì) 2.1 算法設(shè)計(jì) 每個(gè)模塊的算

16、法設(shè)計(jì)說明如下: 〔1〕錄入模塊: 查找單鏈表的鏈尾,在鏈尾插入一個(gè)“航班信息〞的新結(jié)點(diǎn)。 可以進(jìn)行新增航班信息、刪除航班信息等操作。 〔2〕查詢模塊: 提供查方式順著單鏈表查找,查找出所有航班的信息和訂票信息。 〔3〕訂票模塊: 查找乘客要訂的航班號(hào),判斷此航班是否有空位,有那么輸入乘客有關(guān)信息,訂票成功,否那么失敗。 〔4〕退票模塊: 輸入要退票的乘客姓名,查找乘客資料的鏈表中是否有這位乘客,有那么刪去此結(jié)點(diǎn),并在空位加上1,無(wú)那么退票失敗。 2.1 存儲(chǔ)結(jié)構(gòu)設(shè)計(jì) 航班的信息:為了便于查找和修改,航班的情況存儲(chǔ)結(jié)構(gòu)采用單鏈表,每個(gè)元素表示一個(gè)航班的情況,包括航班號(hào)

17、、飛機(jī)編號(hào)、目的地、時(shí)間、總座位和空座六個(gè)數(shù)據(jù)項(xiàng): 航班號(hào) 飛機(jī)編號(hào) 目的地 時(shí)間 總座位 空座 單鏈表如下: h D1 D2 D3 每個(gè)結(jié)點(diǎn)包括數(shù)據(jù)域和指針域: 數(shù)據(jù)域 指針域 C語(yǔ)言描述如下: typedef struct airline //飛機(jī)編號(hào)結(jié)構(gòu)體// { char air_num[8]; /*航班號(hào)*/ char plane_num[8]; /*飛機(jī)編號(hào)*/ char end_place[20];/*目的地*/ char time_plane[16

18、];/*時(shí)間*/ int total; /*總座位*/ int left; /*空座*/ struct airline *next; /*指向下個(gè)結(jié)點(diǎn)*/ }airline; 旅客的資料: 為了便于插入、刪除和修改,其采用單鏈表存儲(chǔ)結(jié)構(gòu),每個(gè)數(shù)據(jù)元素包括姓名、航班號(hào)和座位號(hào)四個(gè)數(shù)據(jù)項(xiàng): 旅客姓名 航班號(hào) 座位號(hào) 每個(gè)結(jié)點(diǎn)包括數(shù)據(jù)域和指針域: 數(shù)據(jù)域 指針域 C語(yǔ)言描述如下: typedef struct customer //乘客編號(hào)結(jié)構(gòu)體// { char name[8]; char air_num[8

19、]; int seat_num; struct customer *next; }customer; 3.調(diào)試分析 附錄一:猴子選大王——源程序 源程序: #include "stdio.h" #include "process.h" #include "malloc.h" #define ture 1 #define false 0 #define ok 1 #define error 0 #define infeasible -1 #define overflow -2 #defin

20、e list_init_size 100 #define listincrement 10 typedef int Status; typedef int ElemType; typedef struct LNode{ ElemType data; struct LNode *next; }LNode,*LinkList; //創(chuàng)立循環(huán)鏈表 void CreateList_L(LinkList &L,int n) { //創(chuàng)立一個(gè)n單元的循環(huán)鏈表 int i; struct LNode *p,*q; L=(Li

21、nkList) malloc (sizeof(LNode)); L->next=NULL; L->data=1; q=L; for(i=2;i<=n;i++) { p=(LinkList)malloc(sizeof(LNode)); p->data=i; q->next=p; p->next=L; q=q->next; } } //鏈表刪除操作 Status ListDelete_L(LinkList &L,int i,ElemType &e) { int j; LNode *p,*q;

22、 p=L;j=1; while ( jnext; ++j; } q=p->next; p->next =q->next; e=q->data; free(q); L=p->next; return ok; } void main() { printf("\n ***********************\n"); printf(" ** 班級(jí): **

23、 \n"); printf(" ** 姓名: 田 龍 ** \n"); printf(" ** 學(xué)號(hào): ** \n"); printf("\n ***********************\n"); printf(" ** **

24、 \n"); printf(" ** 猴子選大王 ** \n"); printf(" ** ** \n"); printf(" ***********************\n\n"); LinkList L; int m,n,i; ElemType e;

25、 printf("\n 請(qǐng)輸入猴子的個(gè)數(shù):"); scanf("%d",&m); CreateList_L(L,m); printf(" 所有猴子的編號(hào)為:\n"); for(i=0;idata); L=L->next; } printf("\n"); printf("\n 請(qǐng)輸入猴子要數(shù)的數(shù):"); scanf("%d",&n); printf("\n

26、 猴子依次離開的序號(hào):\n"); for (i=1;idata); } 附錄二:joseph環(huán)——源程序 源程序: #include "stdio.h" #include "process.h" #include "malloc.h" #define

27、 TRUE 1 #define FALSE 0 #define OK 1 #define ERROR 0 #define INFEASIBLE -1 #define OVERFLOW -2 typedef int Status; #include "defineHeader.h" typedef struct{ int name; int sno; }ElemType; typedef struct LNode{ ElemType data; struct LNode *next; }LNode,*LinkList; //逆位序輸入

28、n個(gè)人的密碼,建立帶表頭結(jié)點(diǎn)的單鏈表L void CreateList_L(LinkList &L,int n){ int i;LinkList p; L=(LinkList)malloc(sizeof (LNode)); L->next=NULL; for(i=n;i>0;--i){ p=(LinkList)malloc(sizeof (LNode)); p->data.name=i; scanf("%d",&p->data.sno); p->next=L->next;L->next=p; } } //查找元素值 Status G

29、etElem_L(LinkList L,int i,ElemType &e){ LNode *p; int j; p=L->next;j=1; while(p&&jnext;++j; } if(!p||j>i)return ERROR; e=p->data; return OK; } //在帶頭結(jié)點(diǎn)的單鏈表L中第i個(gè)位置之前插入元素e Status ListInsert_L(LinkList &L,int i,ElemType e){ LNode *p,*s; int j=0; p=L; while(p&&j<

30、i-1){p=p->next;++j;}//尋找第i-1個(gè)結(jié)點(diǎn) if(!p||j>i-1) return ERROR; s=(LinkList)malloc(sizeof(LNode)); s->data=e;s->next=p->next; p->next=s; return OK; }; //在帶頭結(jié)點(diǎn)的單鏈表L中刪除第i個(gè)元素,并用e返回其值 Status ListDelete_L(LinkList &L,int i,ElemType &e){ LNode *p,*q; int j=0; p=L; while(p->next&&j

31、{ p=p->next;++j; } if(!(p->next)||j>i-1)return ERROR; q=p->next;p->next=q->next; e=q->data;free(q); return OK; }; void OutPut(LinkList &L,int m,int n,ElemType &e){ int i,k,cun,cun1=0; //從第一個(gè)人開始順時(shí)針方向自1開始順序報(bào)數(shù),報(bào)到m時(shí)停止報(bào)數(shù)。報(bào)m的人出列,將他的密碼作為新的m值 if((cun=m%n)==0)cun=n; ListDelete_L(L,cu

32、n,e); k=n-cun;m=e.sno; printf("%4d:%d ||",e.name,e.sno); //從上一個(gè)報(bào)m的人在順時(shí)針方向的下一個(gè)人開始重新從1報(bào)數(shù),如此下去,直到所有人全部出列為止。 for(i=n-1;i>0;i--){ if((cun1=m%i)==0)cun1=i; if(cun1<=k){ ListDelete_L(L,(cun1+cun-1),e); k=i-(cun1+cun-1);cun=cun1+cun-1; }else{ ListDelete_L(L,(cun1-k),e);

33、 cun=cun1-k;k=i-(cun1-k); } m=e.sno; printf("%4d:%d ||",e.name,e.sno); //printf("\n"); } } void main(){ int i,m,n; ElemType e; LinkList L; printf("\n ***********************\n"); printf(" ** 班級(jí): **

34、 \n"); printf(" ** 姓名: 田 龍 ** \n"); printf(" ** 學(xué)號(hào): ** "); printf("\n ***********************\n"); printf("\n"); printf("

35、 ** Joseph環(huán) ** \n"); printf("*************************************************************\n"); printf("請(qǐng)輸入“m〞的初值:"); scanf("%d",&m); printf("請(qǐng)輸入一個(gè)數(shù)表示有“n〞個(gè)人:"); scanf("%d",&n); printf("\n請(qǐng)輸入這“%d〞個(gè)人的密碼,按Enter鍵確認(rèn)……\n",n); CreateList_L(L,n); printf("\n這“%d〞個(gè)人的密碼為:\n"

36、,n); for(i=1;i<=n;i++){ GetElem_L(L,i,e); printf("%5d:%d | ",e.name,e.sno); } printf("\n\n"); /* 一開始任選一個(gè)正整數(shù)作為報(bào)數(shù)上限值m,從第一個(gè)人開始順時(shí)針方向自1開始順序報(bào)數(shù), 報(bào)到m時(shí)停止報(bào)數(shù)。報(bào)m的人出列,將他的密碼作為新的m值,從他在順時(shí)針方向的下一個(gè)人開始重新從1報(bào)數(shù),如此下去,直到所有人全部出列為止。 */ printf("\n這“%d〞個(gè)人的出列順序?yàn)椋篭n",n); OutPut(L,m,n,e); printf("\n\n"); }

37、 附錄三:文章編輯——源程序 源程序: #include #include #include /*文本每行以字符串形式存儲(chǔ),行與行之間以鏈表存儲(chǔ)*/ typedef struct line { char *data; struct line *next; }LINE; /*創(chuàng)立一鏈表,同時(shí)向里面輸入文本數(shù)據(jù)*/ void Create(LINE * &head) { printf ("請(qǐng)輸入一頁(yè)文章,以Ctrl+E(^E)為結(jié)尾

38、(每行最多輸入80字符!):\n"); LINE *p=new LINE; /*首先為鏈表 建立一個(gè)附加表頭結(jié)點(diǎn)*/ head=p; /*將p付給 表頭指針*/ char tmp[100]; while(1) { gets(tmp); /*輸入字符串!*/ if(strlen(tmp)>80) { printf("每行最

39、多輸入80字符"); break; } if(tmp[0]==5)break; /*如果發(fā)現(xiàn)輸入 ^E,那么退出輸入*/ p=p->next=new LINE; p->data=new char[strlen(tmp)+1]; /*為結(jié)點(diǎn)分配空間 */ strcpy(p->data,tmp); if(tmp[strlen(tmp)-1]==5) /*除去最后一個(gè)控制符 ^E */ {

40、 p->data[strlen(tmp)-1]='\0'; break; } } p->next=NULL; /*最后的一個(gè)指針為空 */ head=head->next; } /*統(tǒng)計(jì)字母數(shù)*/ int CountLetter(LINE * &head) { LINE *p=head; int count=0; do { int Len=strlen(p->data); /*計(jì)算當(dāng)前 data 里的數(shù)據(jù)元素的個(gè)

41、數(shù)*/ for(int i=0;idata[i]>='a'&&p->data[i]<='z')||(p->data[i]>='A'&&p->data[i]<='Z')) /*計(jì)算字母數(shù)*/ count++; } while((p=p->next)!=NULL); /*遍歷 鏈表*/ return count; /*返回文章的字母總數(shù)*/ } /*統(tǒng)

42、計(jì)數(shù)字?jǐn)?shù)*/ int CountNumber(LINE * &head) { LINE *p=head; int count=0; do { int Len=strlen(p->data); /*計(jì)算當(dāng)前 data 里的數(shù)據(jù)元素的個(gè)數(shù)*/ for(int i=0;idata[i]>=48 && p->data[i]<=57)count++; /*計(jì)算數(shù)字?jǐn)?shù),ASCII碼*/ } while((p=p->next)!=NUL

43、L); /*遍歷 鏈表*/ return count; } /*統(tǒng)計(jì)空格數(shù)*/ int CountSpace(LINE * &head) { LINE *p=head; int count=0; do { int Len=strlen(p->data); /*計(jì)算當(dāng)前 data 里的數(shù)據(jù)元素的個(gè)數(shù)*/ for(int i=0;i

44、 if(p->data[i]==32)count++; /*計(jì)算空格數(shù),空格ASCII碼為32*/ } while((p=p->next)!=NULL); /*遍歷 鏈表*/ return count; } /*統(tǒng)計(jì)文章的總字?jǐn)?shù)*/ int CountAll(LINE * &head) { LINE *p=head; /*保存鏈表的首地址*/ int count=0; do

45、 /*計(jì)算總字符數(shù)*/ { count+=strlen(p->data); } while((p=p->next)!=NULL); /*遍歷 鏈表*/ return count; } /*統(tǒng)計(jì)str在文章中出現(xiàn)的次數(shù)*/ int FindString(LINE * &head,char *str) { LINE *p=head; int count=0; int h=0; int len1=0;

46、 /*保存當(dāng)前行的總字符數(shù)*/ int len2=strlen(str); /*待統(tǒng)計(jì)字符串的長(zhǎng)度*/ int i,j,k; do { len1=strlen(p->data); /*當(dāng)前行的字符數(shù)*/ for(i=0;idata[i]==str[0]) { k=0; fo

47、r(j=0;jdata[i+j]==str[j]) k++; if(k==len2) {count++;i=i+k-1;} } } } while((p=p->next)!=NULL); /*遍歷 鏈表*/ return count; } /*刪除指定的字符串*/ void delstringword(char *s,char *str) /* *s為輸入的字符串,*str為將要?jiǎng)h除的

48、字符*/ { char *p=strstr(s,str); /*從字符串s中尋找str第一次出現(xiàn)的位置*/ char tmp[80]; int len=strlen(s); int i=len-strlen(p); int j=i+strlen(str); int count=0; for(int m=0;m

49、p); /*返回新的字符串*/ } void DelString(LINE * &head,char *str) { LINE *p=head; do { if(strstr(p->data,str)!=NULL)delstringword(p->data,str); } while((p=p->next)!=NULL); /*遍歷 鏈表*/ } /*向屏幕輸出文章*/ void OutPut(LINE * &head) {

50、 LINE *p=head; do { printf("%s\n",p->data); } while((p=p->next)!=NULL); /*遍歷 鏈表*/ } void main() { LINE *head; printf("\n ***********************\n"); printf(" ** 班級(jí): **

51、 \n"); printf(" ** 姓名: 田 龍 ** \n"); printf(" ** 學(xué)號(hào): ** "); printf("\n ***********************\n"); printf("\n"); printf("

52、 ** 文章編輯 ** \n"); printf("*************************************************************\n"); Create(head); printf("輸入的文章為:\n"); OutPut(head); printf("\n"); printf("全部字母數(shù):%d \n",CountLetter(head)); printf("數(shù)字個(gè)數(shù):%d \n",CountNumber(head)); printf("空格個(gè)數(shù): %d \n",CountSpa

53、ce(head)); printf("文章總字?jǐn)?shù): %d \n",CountAll(head)); char str1[20],str2[20]; printf("\n"); printf("請(qǐng)輸入要統(tǒng)計(jì)的字符串:"); scanf("%s",str1); printf("%s出現(xiàn)的次數(shù)為:%d \n",str1,FindString(head,str1)); printf("\n"); printf("請(qǐng)輸入要?jiǎng)h除的某一字符串:"); scanf("%s",str2); DelString(head,str2); printf("刪除%s后的文

54、章為:\n",str2); OutPut(head); } 附錄四:飛機(jī)訂票系統(tǒng)——源程序 源程序: #include #include #include #define OK 1 #define ERROR 0 typedef struct airline //飛機(jī)編號(hào)結(jié)構(gòu)體// { char air_num[8]; char plane_num[8]; char end_place[20];

55、 char time_plane[16]; int total; int left; struct airline *next; }airline; typedef struct customer //乘客編號(hào)結(jié)構(gòu)體// { char name[8]; char air_num[8]; int seat_num; struct customer *next; }customer; airline *start_air() { airl

56、ine *a; a=(airline*)malloc(sizeof(airline)); if(a!=NULL)a->next=NULL; return a; } customer *start_cus() { customer *c; c=(customer*)malloc(sizeof(customer)); if(c!=NULL)c->next=NULL; return c; } airline *modefy_airline(airl

57、ine *l,char *air_num) { airline *p; p=l->next; for(;p!=NULL;p=p->next) { if(strcmp(air_num,p->air_num)==0) { p->left++; return l; } } printf(" 對(duì)不起,沒有該航班!"); return 0; }

58、 //增加飛機(jī)信息 int insert_air(airline **p,char *air_num,char *plane_num,char *end_place,char *time_plane,int total,int left) { airline *q; q=(airline*)malloc(sizeof(airline)); strcpy(q->air_num,air_num); strcpy(q->plane_num,plane_num); strcpy(q->end_place,end

59、_place); strcpy(q->time_plane,time_plane); q->total=total; q->left=left; q->next=NULL; (*p)->next=q; (*p)=(*p)->next; //printf(" 添加航線成功!"); return OK; } //添加航線 airline *add_air(airline *p,char *air_num,char *plane_num,char *end_place,char *ti

60、me_plane,int total,int left) { airline *q,*pt; pt=p; q=(airline*)malloc(sizeof(airline)); strcpy(q->air_num,air_num); strcpy(q->plane_num,plane_num); strcpy(q->end_place,end_place); strcpy(q->time_plane,time_plane); q->total=total;

61、 q->left=left; for(p;p->next!=NULL;p=p->next); q->next=p->next; p->next=q; return pt; } //增加客戶 int insert_cus(customer **p,char *name,char *air_num,int seat_num) { customer *q; q=(customer*)malloc(sizeof(customer)); strcpy(q->name,name);

62、 strcpy(q->air_num,air_num); q->seat_num=seat_num; q->next=NULL; (*p)->next=q; (*p)=(*p)->next; return OK; printf(" 添加客戶成功!"); } //訂票 int book(airline *a,char *air_num,customer *c,char *name) { airline *p; customer

63、 *q=c->next; for(q;q->next!=NULL;q=q->next); p=a->next; for(;p!=NULL;p=p->next) { if(strcmp(air_num,p->air_num)==0) { if(p->left>0) { printf(" 您的座位號(hào)是:%d",(p->total-p->left+1)); insert_cus(&q,name,air_num,

64、p->total-p->left+1); p->left--; return OK; } else if(p->left==0) { printf(" 對(duì)不起,座位已滿!"); return 0; } } } printf(" 對(duì)不起,沒有該航班!"); return 1; } //

65、退票 int del_cus(customer *c,airline *l,char *name) { customer *p,*pr; char air_num[8]; pr=c; p=pr->next; while(p!=NULL) { if(strcmp(p->name,name)==0) { strcpy(air_num,p->air_num); l=modefy_airline(l,air_num);

66、 pr->next=p->next; p=pr->next; printf(" %s退票成功!",name); return OK; } pr=pr->next; p=pr->next; } printf(" 對(duì)不起,沒有該顧客!"); return ERROR; } //刪除航線 int del_airline(airline *l,customer *m,char *air_n) { airline *pt,*ptr; customer *p,*pr; ptr=l; pr=m; p=pr->next; pt=ptr->next; while(pt!=NULL) { i

展開閱讀全文
溫馨提示:
1: 本站所有資源如無(wú)特殊說明,都需要本地電腦安裝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. 裝配圖網(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ì)自己和他人造成任何形式的傷害或損失。

相關(guān)資源

更多
正為您匹配相似的精品文檔
關(guān)于我們 - 網(wǎng)站聲明 - 網(wǎng)站地圖 - 資源地圖 - 友情鏈接 - 網(wǎng)站客服 - 聯(lián)系我們

copyright@ 2023-2025  zhuangpeitu.com 裝配圖網(wǎng)版權(quán)所有   聯(lián)系電話:18123376007

備案號(hào):ICP2024067431號(hào)-1 川公網(wǎng)安備51140202000466號(hào)


本站為文檔C2C交易模式,即用戶上傳的文檔直接被用戶下載,本站只是中間服務(wù)平臺(tái),本站所有文檔下載所得的收益歸上傳人(含作者)所有。裝配圖網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)上載內(nèi)容本身不做任何修改或編輯。若文檔所含內(nèi)容侵犯了您的版權(quán)或隱私,請(qǐng)立即通知裝配圖網(wǎng),我們立即給予刪除!