數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)文章編輯_第1頁
數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)文章編輯_第2頁
數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)文章編輯_第3頁
數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)文章編輯_第4頁
數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)文章編輯_第5頁
已閱讀5頁,還剩15頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、課題名稱文章編輯、題目的目的和要求: 設(shè)計(jì)中要求綜合運(yùn)用所學(xué)知識,上機(jī)解決一些與實(shí)際應(yīng)用結(jié)合緊密的、規(guī)模較大的問題。通過分析、設(shè)計(jì)、編碼、調(diào)試等各環(huán)節(jié)的訓(xùn)練,使學(xué)生深刻理解、牢固掌握數(shù)據(jù)結(jié)構(gòu)和算法設(shè)計(jì)技術(shù),掌握分析、解決實(shí)際問題的能力。通過這次設(shè)計(jì),要求在數(shù)據(jù)結(jié)構(gòu)的邏輯特性和物理表示、數(shù)據(jù)結(jié)構(gòu)的選擇和應(yīng)用、算法的設(shè)計(jì)及其實(shí)現(xiàn)等方面,加深對課程基本內(nèi)容的理解。同時,在程序設(shè)計(jì)方法以及上機(jī)操作等基本技能和科學(xué)作風(fēng)方面受到比較系統(tǒng)和嚴(yán)格的訓(xùn)練。、設(shè)計(jì)進(jìn)度及完成情況日 期內(nèi) 容7.2-7.4熟悉設(shè)計(jì)任務(wù),查閱有關(guān)文獻(xiàn)資料,確定所采用的數(shù)據(jù)結(jié)構(gòu),初步制定解決問題的方法,完成課程設(shè)計(jì)說明書內(nèi)容1-3部分。

2、7.57.10選擇合適的存儲結(jié)構(gòu),明確解決問題的算法,上機(jī)編寫并調(diào)試源程序。7.117.12整體調(diào)試程序并記錄調(diào)試中的問題,完成課程設(shè)計(jì)說明書第4-7部分。7.13演示設(shè)計(jì)成果,考核成績。整理課程設(shè)計(jì)說明書,上午11時,由學(xué)習(xí)委員交課程設(shè)計(jì)說明書(計(jì)算機(jī)科學(xué)系9#213或直接交給指導(dǎo)教師)、主要參考文獻(xiàn)及資料1 嚴(yán)蔚敏、吳偉民主編,數(shù)據(jù)結(jié)構(gòu)(c語言版),清華大學(xué)出版社,2002。2 殷人昆等著,數(shù)據(jù)結(jié)構(gòu)(c+版),清華大學(xué)出版社,2001。3 金遠(yuǎn)平著,數(shù)據(jù)結(jié)構(gòu)(c+描述),清華大學(xué)出版社,2005。4 許卓群等著,數(shù)據(jù)結(jié)構(gòu)與算法,高等教育出版社,2004。5 frank m.carrano等

3、著,數(shù)據(jù)結(jié)構(gòu)與+高級教程,清華大學(xué)出版社,2004。6 嚴(yán)蔚敏、吳偉民著,數(shù)據(jù)結(jié)構(gòu)習(xí)題集(c語言版),清華大學(xué)出版社。、成績評定:設(shè)計(jì)成績: (教師填寫)指導(dǎo)老師: (簽字)二七年七月二十日目 錄第一章 概述.1第二章 系統(tǒng)分析.2第三章 系統(tǒng)設(shè)計(jì).3第四章 程序設(shè)計(jì)流程圖或n-s圖.4第五章 源程序清單.6第六章 調(diào)試過程中的問題及系統(tǒng)測試情況.13第七章 結(jié)束語.22第一章 概述一.本課程設(shè)計(jì)意義 課程設(shè)計(jì)是實(shí)踐性教學(xué)中的一個重要環(huán)節(jié),它以某一課程為基礎(chǔ),可以涉及和課程相關(guān)的各個方面,是一門獨(dú)立于課程之外的特殊課程。課程設(shè)計(jì)是讓同學(xué)們對所學(xué)的課程更全面的學(xué)習(xí)和應(yīng)用,理解和掌握課程的相關(guān)知識

4、。數(shù)據(jù)結(jié)構(gòu)是一門重要的專業(yè)基礎(chǔ)課,是計(jì)算機(jī)理論和應(yīng)用的核心基礎(chǔ)課程。數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì),要求學(xué)生在數(shù)據(jù)結(jié)構(gòu)的邏輯特性和物理表示、數(shù)據(jù)結(jié)構(gòu)的選擇和應(yīng)用、算法的設(shè)計(jì)及其實(shí)現(xiàn)等方面,加深對課程基本內(nèi)容的理解。同時,在程序設(shè)計(jì)方法以及上機(jī)操作等基本技能和科學(xué)作風(fēng)方面受到比較系統(tǒng)和嚴(yán)格的訓(xùn)練。二.本課程設(shè)計(jì)的目的和任務(wù)1提高對數(shù)據(jù)邏輯結(jié)構(gòu)的特點(diǎn)以及存儲表示方式的認(rèn)識,培養(yǎng)在具體應(yīng)用中選擇合適的數(shù)據(jù)結(jié)構(gòu)和存儲結(jié)構(gòu)的能力。2熟悉軟件開發(fā)的基本過程,初步掌握軟件開發(fā)過程的問題分析、系統(tǒng)設(shè)計(jì)、程序編碼、測試等階段基本任務(wù)和技能方法。3培養(yǎng)自己的算法設(shè)計(jì)和算法分析能力,提高綜合運(yùn)用所學(xué)的理論知識和方法獨(dú)立分析和解決

5、問題的能力。4訓(xùn)練用系統(tǒng)的觀點(diǎn)和軟件開發(fā)一般規(guī)范進(jìn)行軟件開發(fā),培養(yǎng)軟件工作者所應(yīng)具備的工作方法、作風(fēng)和相互合作的精神。5綜合運(yùn)用鏈表的查找、插入和刪除,理論結(jié)合實(shí)際,將其運(yùn)用到文章編輯這一實(shí)驗(yàn)中。使這些知識得到進(jìn)一步鞏固、加深和拓展。利用模塊的思想,模塊之間用指針連接,減少了不必要的麻煩。鞏固加深指針的用途,理解模塊的優(yōu)點(diǎn)。加深對鏈表的理解,全面認(rèn)識鏈表操作的字符串的模式匹配操作。第二章 系統(tǒng)分析本實(shí)驗(yàn)所要實(shí)現(xiàn)的功能:輸入一頁文字,程序可以統(tǒng)計(jì)出文字、數(shù)字、空格的個數(shù)。靜態(tài)存儲一頁文章,每行最多不超過80個字符,共n行;要求:(1)分別統(tǒng)計(jì)出其中英文字母數(shù)和空格數(shù)及整篇文章總字?jǐn)?shù);(2)統(tǒng)計(jì)某

6、一字符串在文章中出現(xiàn)的次數(shù),并輸出該次數(shù);(3)刪除某一子串,并將后面的字符前移。存儲結(jié)構(gòu)使用線性表,分別用幾個子函數(shù)實(shí)現(xiàn)相應(yīng)的功能;輸入數(shù)據(jù)的形式和范圍:可以輸入大寫、小寫的英文字母、任何數(shù)字及標(biāo)點(diǎn)符號。輸出形式:(1)分行輸出用戶輸入的各行字符;(2)分4行輸出全部字母數(shù)、數(shù)字個數(shù)、 空格個數(shù)和文章總字?jǐn)?shù)輸出刪除某一字符串后的文章;用鏈表存放數(shù)據(jù)非常靈活,只要內(nèi)存足夠大,對鏈表可以做任意擴(kuò)充和修改。主要的手段為鏈表的遍歷。定義一個頭指針head,每個結(jié)點(diǎn)的數(shù)據(jù)域存放數(shù)據(jù)本身,指針域存放下一個結(jié)點(diǎn)地址,所以,我們只要知道head,就可以遍歷整個鏈表,找到我們所需要的字符(串),進(jìn)行相應(yīng)的操作

7、。第三章 系統(tǒng)設(shè)計(jì)一.輸入模塊存儲結(jié)構(gòu):采用單鏈表結(jié)構(gòu)存儲文章,每個結(jié)點(diǎn)存儲一行,每行最長不超過80個字符。結(jié)構(gòu)定義:typedef struct line char *data; /字符串指針需要時動態(tài)分配內(nèi)存 struct line *next;line;算法描述:用gets函數(shù)接收輸入,每遇到一個回車換行就新建一個結(jié)點(diǎn),將當(dāng)前行存入其data域。當(dāng)發(fā)現(xiàn)輸入為e時,在data的最后加上字符串結(jié)束標(biāo)志,并置當(dāng)前結(jié)點(diǎn)的next指針域?yàn)閚ull。二.統(tǒng)計(jì)模塊統(tǒng)計(jì)模塊包括統(tǒng)計(jì)全部字母數(shù),統(tǒng)計(jì)數(shù)字個數(shù),統(tǒng)計(jì)空格個數(shù),以及統(tǒng)計(jì)文章總字?jǐn)?shù),這四個部分的實(shí)現(xiàn)算法大體相同,四者的關(guān)系是:全部字母數(shù)數(shù)字個數(shù)空

8、格個數(shù)文章總字?jǐn)?shù),也就是說可以在統(tǒng)計(jì)出其中三者的前提下計(jì)算出第四個的數(shù)量。另外一個重要的統(tǒng)計(jì)功能是統(tǒng)計(jì)某一字符串在整篇文章中出現(xiàn)的次數(shù),這個需要用到串的模式匹配算法來實(shí)現(xiàn)。三.刪除模塊刪除模塊的算法思想類同統(tǒng)計(jì)字符串的算法思想,由于采用了鏈表的存儲結(jié)構(gòu),使得刪除算法的時間復(fù)雜度大大減少。void del_string(line * &head,char *sch) /刪除指定的字符串 line *p=head; do while(strstr(p-data,sch)!=null)del_string_word(p-data,sch); while(p=p-next)!=null); /遍歷鏈表

9、第四章 程序設(shè)計(jì)流程圖根據(jù)題目與上述分析,可得主程序設(shè)計(jì)流程圖如下所示:開始菜單輸入文章瀏覽文章統(tǒng)計(jì)信息統(tǒng)計(jì)字符串刪除字符串退出圖1-1文章輸入、瀏覽、統(tǒng)計(jì)串、統(tǒng)計(jì)及刪除的詳細(xì)流程如圖12所示:開始顯示文本信息且換行輸入文本信息(=80)選定選項(xiàng)1回車回車回車 ctrl+e顯示輸入內(nèi)容并調(diào)出主菜單 選定選項(xiàng)2 調(diào)出主菜單回車回車調(diào)出主菜單回車選定選項(xiàng)3顯示文章統(tǒng)計(jì)信息的結(jié)果回車 (接上頁圖)顯示出現(xiàn)次數(shù)輸入要統(tǒng)計(jì)的字符串選定選項(xiàng)4回車回車回車調(diào)出主菜單選定選項(xiàng)5輸入要刪除的字符串顯示刪除后的文本回車回車回車退出/結(jié)束選定選項(xiàng)6調(diào)出主菜單回車 圖1-2第五章 源程序清單#include #inc

10、lude #include #include #include typedef struct line char *data; /字符串指針需要時動態(tài)分配內(nèi)存 struct line *next;line;void createtxt(line * &head); /創(chuàng)建一張列表,同時向里面輸入文本數(shù)據(jù)int count_space(line * &head); /統(tǒng)計(jì)空格數(shù)int count_zm(line * &head); / 統(tǒng)計(jì)字母數(shù)int count_all_word(line * &head); /統(tǒng)計(jì)文章的總字?jǐn)?shù)int find_word(line * &head,char *

11、sch); /統(tǒng)計(jì)sch 在文章中出現(xiàn)的次數(shù)int count_num(line * &head); /統(tǒng)計(jì)數(shù)字?jǐn)?shù)void del_string(line * &head,char *sch); /刪除指定的字符串void outputtxt(line * &head); /向屏幕輸出文章void tj(line * &head); /統(tǒng)計(jì)int read_text(line * &head);int free_link(line *&head);int free_link(line *&head)line *p=head;dop-data=null;free(p-data);while(p=

12、p-next)!=null);head-next=null;return 0;void setcolor(unsigned short color) handle hcon = getstdhandle(std_output_handle); setconsoletextattribute(hcon,color); void createtxt(line * &head) line *p=new line; /首先為鏈表 建立一個附加表頭結(jié)點(diǎn) head=p; /將p付給 表頭指針 char tmp80; while(1) gets(tmp); /輸入字符串!使用c的輸入函數(shù) if(tmp0=5

13、)break; /如果發(fā)現(xiàn)輸入 e,則退出輸入 p-data=new charstrlen(tmp)+1;/為結(jié)點(diǎn)分配空間 strcpy(p-data,tmp); if(tmpstrlen(tmp)-1=5) /除去最后一個控制符 e p-datastrlen(tmp)-1=0; break; p-next=null; /是最后的一個指針為空。 head=head-next; int count_space(line * &head) /統(tǒng)計(jì)空格數(shù) line *p=head; int asc_space=32; /空格的ascic 碼值 int count=0; do int len=strl

14、en(p-data); /計(jì)算當(dāng)前 data 里的數(shù)據(jù)元素的個數(shù) for(int i=0;idatai=asc_space)count+; /計(jì)算空格數(shù) while(p=p-next)!=null); /遍歷鏈表 return count;int count_num(line * &head) /統(tǒng)計(jì)數(shù)字?jǐn)?shù) line *p=head; int count=0; do int len=strlen(p-data); /計(jì)算當(dāng)前 data 里的數(shù)據(jù)元素的個數(shù) for(int i=0;idatai=48 & p-datainext)!=null); /遍歷鏈表 return count;int co

15、unt_zm(line * &head) / 統(tǒng)計(jì)字母數(shù) int count=count_all_word(head); /總的字符數(shù),包含空格 int space_count=count_space(head); /空格數(shù)int num_count=count_num(head);/數(shù)字?jǐn)?shù) return count-space_count-num_count; /返回文章的字母總數(shù)int count_all_word(line * &head) /統(tǒng)計(jì)文章的總字?jǐn)?shù) line *p=head; /保存鏈表的首地址 int count=0; /總字母數(shù) docount+=strlen(p-dat

16、a); /計(jì)算當(dāng)前行內(nèi)的字符數(shù) while(p=p-next)!=null); /遍歷鏈表 return count;int find_word(line * &head,char *sch) /統(tǒng)計(jì) sch 在文章中出現(xiàn)的次數(shù) line *p=head; int count=0; / int h=0; int len1=0; /保存當(dāng)前行的總字符數(shù) int len2=strlen(sch); /待統(tǒng)計(jì)字符串的長度 int i,j,k; do len1=strlen(p-data);/當(dāng)前行的字符數(shù) for(i=0;idatai=sch0) k=0; for(j=0;jdatai+j=schj

17、)k=k+1; if(k=len2)count+;i=i+k-1; while(p=p-next)!=null); /遍歷鏈表 return count;void del_string_word(char *s,char *sch) / *s為輸入的字符串 / *sch 為將要刪除的字符 char *p=strstr(s,sch); /查詢結(jié)果 char tmp80; int len=strlen(s); int i=len-strlen(p); int j=i+strlen(sch); int count=0; for(int k=0;ki;k+)tmpcount+=sk; for(int

18、kk=j;kkdata,sch)!=null)del_string_word(p-data,sch); while(p=p-next)!=null); /遍歷鏈表void outputtxt(line * &head) /向屏幕輸出文章 line *p=head; do coutdatanext)!=null); /遍歷 鏈表void tj(line * &head) /統(tǒng)計(jì) cout文章統(tǒng)計(jì)信息結(jié)果如下:endl; cout英文字母數(shù):count_zm(head)endl; cout空格數(shù): count_space(head)endl; cout文章中共出現(xiàn)數(shù)字:count_num(head

19、)endl; cout統(tǒng)計(jì)文章的總字?jǐn)?shù): count_all_word(head)endl;void main()setcolor(10);line *head;int opt;coutn *請選擇操作*endl;cout 1、新建 ;cout2、瀏覽 ;cout3、統(tǒng)計(jì) ;cout4、串統(tǒng)計(jì) ;cout5、刪除 ;cout6、退出 opt;if(opt!=1)cout第一次請務(wù)必選擇第1項(xiàng),以輸入文本以便操作endl;opt = 0;else/int n;int i;elemtype e;while(opt!=6)/switch (opt) case 0:coutn *請選擇操作*endl;

20、cout 1、新建 ;cout2、瀏覽 ;cout3、統(tǒng)計(jì) ;cout4、串統(tǒng)計(jì) ;cout5、刪除 ;cout6、退出 opt; if (opt!=1&opt!=2&opt!=3&opt!=4&opt!=5&opt!=6) couterror!不可識別選項(xiàng)!endl;exit(0); break;case 1:cout-新建文本-endl;cout請輸入文本,每行最多輸入80字符!(結(jié)束請按 ctrl + e)endl;setcolor(14);createtxt(head);setcolor(10);coutendl-endl;cout按回車調(diào)出主菜單endl;getchar();opt=

21、0;break; case 2:cout-瀏覽輸入文本-endl;setcolor(14);outputtxt(head);setcolor(10);coutendl-endl;cout按回車調(diào)出主菜單endl;getchar();opt=0;break; case 3:cout-文本統(tǒng)計(jì)-endl;setcolor(14);tj(head);setcolor(10);coutendl-endl;cout按回車調(diào)出主菜單endl;getchar();opt=0;break; case 4:cout-請輸入要統(tǒng)計(jì)的字符串-endl; setcolor(14); char sch20; gets(sch); coutendl; coutsch出現(xiàn)的次數(shù)為:find_word(head,sch)endl; setcolor(10); cout-endl;cout按回車調(diào)出主菜單endl;getchar();opt=0;break; case 5:cout-字符串刪除-endl;setcolor(14); cout請輸入要刪除的某一字符串:tmp_sch;gets(tmp_

溫馨提示

  • 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論