數(shù)據(jù)結(jié)構(gòu)課設(shè)報告_集合的并、交和差運算的程序_第1頁
數(shù)據(jù)結(jié)構(gòu)課設(shè)報告_集合的并、交和差運算的程序_第2頁
數(shù)據(jù)結(jié)構(gòu)課設(shè)報告_集合的并、交和差運算的程序_第3頁
數(shù)據(jù)結(jié)構(gòu)課設(shè)報告_集合的并、交和差運算的程序_第4頁
數(shù)據(jù)結(jié)構(gòu)課設(shè)報告_集合的并、交和差運算的程序_第5頁
已閱讀5頁,還剩4頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、目錄1.需求分析11.1問題描述:11.2基本要求:11.3測試數(shù)據(jù):12.概要設(shè)計12.1集合的數(shù)據(jù)類型定義為:12.2.各種函數(shù)的功能:23.詳細(xì)設(shè)計24.編碼實現(xiàn)45.調(diào)試分析65.1程序運行界面如下圖:65.2遇到的問題以及解決方法:76.課設(shè)總結(jié)77.參考文獻81.需求分析1.1問題描述:編制一個能演示執(zhí)行集合的并、交和差運算的程序。1.2基本要求:集合的元素限定為小寫字母符a.z ,集合的大小n<27。集合輸入的形式為一個以"回車符"為結(jié)束標(biāo)志的字符串,串中字符順序不限,且允許出現(xiàn)重復(fù)字符或非法字符,程序應(yīng)能自動濾去。輸出的運算結(jié)果字符串中將不含重復(fù)字符或

2、非法字符。演示程序以用戶和計算機的對話方式執(zhí)行。1.3測試數(shù)據(jù):(1)輸入集合個數(shù)為2,分別為a,b,e,d,f,c,f,g,n,選擇集合運算類型為求集合的交集。(2)輸入集合個數(shù)為3,分別為a,b,c,g,h,n,k,k,z,a,選擇運算類型為求集合的并集。(3)輸入集合個數(shù)為2,分別為b,c,d,c,d,f,選擇運算類型為集合的差(4)輸入集合個數(shù)為2,分別為a,b,x,&,1,3,4,a,b,c,f,g,1,4,選擇集合的運算類型為集合的并集。2.概要設(shè)計2.1集合的數(shù)據(jù)類型定義為:struct Set int num;bool hash30;num為集合的元素個數(shù)hash為利用

3、哈希表,用來儲存集合的元素。2.2.各種函數(shù)的功能:1.void InitSet(Set &Res)操作結(jié)果:初始化集合的函數(shù),函數(shù)參數(shù)為引用類型。2.Set DealSet(char *s)初始條件:指針s不為空操作結(jié)果:將字符串處理成集合,生成的集合為函數(shù)返回值。3.void PriSet(Set s)操作結(jié)果:打印集合s。4.Set Jiao(Set sa,Set sb) 操作結(jié)果:實現(xiàn)集合交集的函數(shù),交集為函數(shù)返回值。5.Set Bing(Set sa,Set sb)操作結(jié)果:實現(xiàn)集合并集的函數(shù),并集為函數(shù)返回值。6.Set Cha(Set sa,Set sb)操作結(jié)果:實現(xiàn)集

4、合差的函數(shù),差集為函數(shù)的返回值。7.int main()操作結(jié)果:主函數(shù),調(diào)用以上的各函數(shù),實現(xiàn)系統(tǒng)界面的功能。3.詳細(xì)設(shè)計1.void InitSet(Set &Res):利用c+引用類型,對Res集合進行初始化,使用memset初始化hash數(shù)組的所有值,并將集合元素個數(shù)賦值為0.2.Set DealSet(char *s):用for循環(huán)遍歷字符數(shù)組s,如果字符在a-z之間,則加入hash數(shù)組之中,并將元素個數(shù)增加。3.void PriSet(Set s):輸出集合s,首先輸出左花括號,之后使用for循環(huán)遍歷整個hash數(shù)組,如果hash數(shù)組的值為真,則說明該集合包含此項元素,輸出

5、該元素加空格,之后再輸出右花括號。4.Set Jiao(Set sa,Set sb) 定義兩個形參集合sa和sb,遍歷兩個集合的hash數(shù)組,如果兩個hash數(shù)組的值同時為真,則說明sa和sb集合都含有該元素,則將該元素加入函數(shù)之中定義的Res集合,并將Res集合的元素個數(shù)加一。在程序最后返回Res集合的值。5.Set Bing(Set sa,Set sb)和Jiao()函數(shù)類似,同樣遍歷hash數(shù)組,唯一不同的是判斷hash數(shù)組的語句,只要sa和sb其中有一個的值為真,則加入到Res中。6.Set Cha(Set sa,Set sb)同樣和Jiao()函數(shù)類似,判斷語句改為如果sa的hash

6、為真并且sb的hash不為真,則加入到Res中7.int main()為設(shè)計程序主頁面的函數(shù),并且使用了所有的函數(shù)。主函數(shù)流程圖具體算法流程圖為:程序結(jié)束并集差集交集交集交集輸入運算類型輸入各個集合NoYes判斷n是否為0輸入集合個數(shù)輸出提示信息程序開始4.編碼實現(xiàn)主要的代碼為:#include<iostream>#include<cstring>#include<cstdlib>#include<cstdio>using namespace std;struct Set /定義集合類型 int num;/集合元素個數(shù) bool hash30;/

7、集合使用哈希表進行保存MySet10;/集合數(shù)組void InitSet(Set &Res)/初始化集合的函數(shù) memset(Res.hash,false,sizeof(Res.hash);/把哈希表所有值賦值為false Res.num=0;/元素個數(shù)為0Set DealSet(char *s)/將字符串處理成集合 Set Res;/函數(shù)返回的集合 InitSet(Res);/初始化集合 for (int i=0;i<strlen(s);i+)/遍歷整個字符串 if (si>='a' && si<='z')/在a到z之

8、間,才符合集合元素范圍 Res.hashsi-'a'=true;/加入哈希表 Res.num+;/集合元素增加 return Res;/函數(shù)返回集合void PriSet(Set s)/打印集合 if (!s.num)/集合為空,輸出為空集 cout<<"空集!"<<endl; return; cout<<" "/不為空,輸出所有元素 for (int i=0;i<27;i+) if (s.hashi) cout<<(char)(i+'a')<<"

9、 " cout<<""Set Jiao(Set sa,Set sb) /實現(xiàn)集合交集的函數(shù) Set Res;/返回的集合 InitSet(Res);/初始化 for (int i=0;i<27;i+) if (sa.hashi && sb.hashi)/如果兩個集合都有該元素,則加入返回的集合/如果是Bing函數(shù),則該語句為:if (sa.hashi | sb.hashi)/如果是Cha函數(shù) ,則該語句為:if (sa.hashi && !sb.hashi) Res.hashi=true; Res.num+; re

10、turn Res;5.調(diào)試分析5.1程序運行界面如下圖:集合相交的運行界面:集合相并的運行界面:集合相差的運行界面:5.2遇到的問題以及解決方法:1.編碼上基本沒有遇到重大的問題,一開始寫程序的時候沒有定義集合類型,直接使用hash數(shù)組代表集合,沒有把握住數(shù)據(jù)結(jié)構(gòu)的算法實質(zhì)。導(dǎo)致了程序結(jié)構(gòu)混亂,并且不易維護調(diào)試,更改界面。2.開始實現(xiàn)了大多數(shù)的程序功能,但是人機交互頁面做的不夠人性化和美觀,在后期處理中加入了界面美化和提示功能,可以更加人性的提示用戶進行操作。3.開始沒有使用memset進行初始化,后來改用該函數(shù),使得程序更加短小容易理解。6.課設(shè)總結(jié)數(shù)據(jù)結(jié)構(gòu)是計算機程序設(shè)計的重要理論技術(shù)基礎(chǔ)

11、,它不僅是計算機科學(xué)的核心課程,而且也已經(jīng)成為其他理工專業(yè)的熱門選修課。隨著高級語言的發(fā)展,數(shù)據(jù)結(jié)構(gòu)在計算機的研究和應(yīng)用中已展現(xiàn)出強大的生命力,它兼顧了諸多高級語言的特點,是一種典型的結(jié)構(gòu)化程序設(shè)計語言,它處理能力強,使用靈活方便,應(yīng)用面廣,具有良好的可移植性。數(shù)據(jù)結(jié)構(gòu)課設(shè)使我們鞏固了以前的知識并在此基礎(chǔ)上還對數(shù)據(jù)結(jié)構(gòu)的特點和算法有了更深的了解,使我們在這門課程的實際應(yīng)用上也有了一個提高。 首先這兩周的學(xué)習(xí),使我們在鞏固了原有的理論知識上,又培養(yǎng)了靈活運用和組合集成所學(xué)過知識及技能來分析、解決實際問題的能力,使我們體會到自身知識和能力在實際中的應(yīng)用和發(fā)揮。其次,它激發(fā)了我們創(chuàng)新意識,開發(fā)創(chuàng)造的能力和培養(yǎng)溝通能力。另外,讓我們進一步熟悉了數(shù)據(jù)結(jié)構(gòu)的設(shè)計應(yīng)用。每一處編碼都是在反復(fù)的熟悉數(shù)據(jù)結(jié)構(gòu)的結(jié)構(gòu)特性,及其語法、函數(shù)和程序設(shè)計思想的過程,對我們數(shù)據(jù)結(jié)構(gòu)的學(xué)習(xí)和提高很有益處,并且使我們明白了程序設(shè)計過程,如解決一些實際問題,從解決實

溫馨提示

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

評論

0/150

提交評論