數(shù)據(jù)結(jié)構(gòu)集合交、并報告_第1頁
數(shù)據(jù)結(jié)構(gòu)集合交、并報告_第2頁
數(shù)據(jù)結(jié)構(gòu)集合交、并報告_第3頁
數(shù)據(jù)結(jié)構(gòu)集合交、并報告_第4頁
數(shù)據(jù)結(jié)構(gòu)集合交、并報告_第5頁
已閱讀5頁,還剩11頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、課設(shè)題目:集合的交、并集專 業(yè):班 級:姓 名: 學(xué) 號:完成日期:指導(dǎo)教師:一、 設(shè)計的題目 集合的交、并集。二、 設(shè)計目的 1.學(xué)會用順序表、鏈表等線性表的知識去解決實際問題。 2.熟練使用WINDOWS環(huán)境下C+的使用; 3.學(xué)會高效率的輸入源程序; 4.學(xué)會使用單步運行調(diào)試程序的機制; 5.熟悉文檔和報告的基本制作技術(shù); 6.通過課程設(shè)計,進一步熟悉各種數(shù)據(jù)結(jié)構(gòu)的應(yīng)用,加深對數(shù)據(jù)結(jié)構(gòu)的理解。 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計是理解和掌握數(shù)據(jù)結(jié)構(gòu)的重要環(huán)節(jié),主要任務(wù)是實現(xiàn)各種數(shù)據(jù)組織中的數(shù)據(jù)邏輯結(jié)構(gòu),存儲結(jié)構(gòu)以及有關(guān)操作的算法。目的是使學(xué)生學(xué)會分析研究計算機加工的數(shù)據(jù)結(jié)構(gòu)的特性,以便為應(yīng)用涉及的數(shù)據(jù)選擇

2、適當(dāng)?shù)倪壿嫿Y(jié)構(gòu)、存儲結(jié)構(gòu)及相應(yīng)的算法。另一方面,通過團隊合作、文檔編制、主頁設(shè)計等環(huán)節(jié)對學(xué)生進行全方位的訓(xùn)練,最終達到培養(yǎng)學(xué)生的數(shù)據(jù)抽象能力和軟件設(shè)計的能力。通過全部過程培養(yǎng)和鍛煉學(xué)生的鉆研能力、動手能力、分析問題和解決問題的實際能力。三、 總體設(shè)計 1.系統(tǒng)流設(shè)計 數(shù)據(jù)輸入界面 主菜單界面 集合的差集運算 結(jié)束 集合的交集運算 集合的并集運算 1.1系統(tǒng)功能模塊圖2.系統(tǒng)模塊設(shè)計 1)數(shù)據(jù)輸入界面:構(gòu)造函數(shù)void input(pointer M);實現(xiàn)集合元素的數(shù)據(jù)輸入。 2)主菜單界面:構(gòu)造函數(shù)void main();實現(xiàn)主菜單的顯示。 3)集合的并集運算:構(gòu)造函數(shù)void and(po

3、inter A,pointer B,pointer C);實現(xiàn)對兩個集合的并集運算。 4)集合的交集運算:構(gòu)造函數(shù)void or(pointer A,pointer B,pointer C);實現(xiàn)對兩個集合的交集運算。 5)集合的差集運算:構(gòu)造函數(shù)void differ(pointer A,pointer B,pointer C);實現(xiàn)集合A-B的運算。四、 詳細設(shè)計 1.數(shù)據(jù)結(jié)構(gòu)設(shè)計 為了能實現(xiàn)不受限制的輸入元素,采用鏈表的結(jié)構(gòu)保存元素信息,在增加一個元素時,創(chuàng)建一個元素的節(jié)點,將其插入到鏈表中,示意圖。第二個元素第三個元素第一個元素 為此,先聲明一個類型為typedef struct LN

4、ode的結(jié)構(gòu)體類型指針,其成員為元素信息。然后通過對指針、鏈表等數(shù)據(jù)結(jié)構(gòu)的操作,實現(xiàn)對兩個集合的交、并、差集運算等一系列操作。其中,結(jié)構(gòu)體定義如下:typedef struct LNode char data; struct LNode*next; *pointer; 2.模塊接口設(shè)計 1)所有函數(shù)模塊聲明如下: void input(pointer M);/定義輸入集合函數(shù) void output(pointer M);/定義輸出集合函數(shù) void and(pointer A,pointer B,pointer C);/定義集合的并集函數(shù) void or(pointer A,pointer

5、B,pointer C);/定義集合的交集函數(shù) void differ(pointer A,pointer B,pointer C);/定義集合的差集函數(shù) 2)主要模塊的實現(xiàn)系統(tǒng)以主函數(shù)void main()為入口,首先通過system("color b3")將背景顏色置為藍色。 然后調(diào)用void input()函數(shù),輸入元素信息,然后進入主菜單界面。系統(tǒng)接收用戶輸入的選擇,調(diào)用相應(yīng)的函數(shù),實現(xiàn)各功能。 3.幾個主要模塊的流程圖 1)主函數(shù)調(diào)用輸入函數(shù),輸入集合信息 顯示主菜單 接受用戶選擇是否合法 否 是是否為4 否 是調(diào)用對應(yīng)選項函數(shù) 退出系統(tǒng) 圖2 主函數(shù)流程圖 2)

6、集合的并集函數(shù) 主菜單 用戶選擇序號是否合法 否 是是否為1 否 是調(diào)用并集函數(shù)和輸出函數(shù) 圖3 求并集函數(shù)流程圖 求交集、差集的流程圖同求并集流程圖類似。五、 設(shè)計結(jié)果與分析 1.設(shè)計結(jié)果 1)數(shù)據(jù)信息錄入界面: 圖4 數(shù)據(jù)錄入界面2) 主菜單顯示界面 圖5 主菜單界面3) 運算結(jié)果顯示界面 圖6 運算結(jié)果顯示2)程序調(diào)試和分析 程序調(diào)試通過,能夠正常運行,并成功實現(xiàn)各功能函數(shù)。系統(tǒng)界面簡潔,使用方便,功能齊全,數(shù)據(jù)結(jié)構(gòu)的設(shè)計合理規(guī)范。 程序采用單鏈表的存儲結(jié)構(gòu),通過結(jié)構(gòu)體指針,并結(jié)合集合的相關(guān)數(shù)學(xué)思想(求交集、并集、差集的方法),實現(xiàn)各功能函數(shù)。 程序的不足在于不能循環(huán)錄入數(shù)據(jù)并實現(xiàn)各功能

7、,只能錄入一次數(shù)據(jù)進行相關(guān)操作。第二個問題是若功能號輸入不正確,就不能進行下一步操作。通過修改、調(diào)試和運行,我解決了這些問題,使程序更加完美。六、 總結(jié)(收獲和不足) 這次數(shù)據(jù)結(jié)構(gòu)課設(shè)讓我受益匪淺,不僅讓我學(xué)到了很多以前不知道的知識,還讓我發(fā)現(xiàn)了自己以前學(xué)習(xí)的漏洞和錯誤。這次課設(shè)給了我一次鍛煉的機會,讓我對以前學(xué)習(xí)的知識再次鞏固了一遍。 這次課程設(shè)計我寫的題目是集合的交并運算,這道題相對比較簡單一些,在以前的試驗中也曾寫過類似的程序。這次編寫的程序也存在不足之處:首先,由于對集合的三種運算的算法推敲不足,在鏈表類型及其尾指針的設(shè)置時出現(xiàn)錯誤,導(dǎo)致程序低效。后來通過調(diào)試,錯誤解決。再次,就是該算

8、法并不能排除重復(fù)輸入相同字符的情況,也不能自動濾去非法字符(如空格、阿拉伯?dāng)?shù)字等)。這個問題需要設(shè)置字符判斷語句解決。另外,為解決功能號非法輸入時出現(xiàn)的問題,需在switch case語句中添加defult語句,利用fflush(stdin)(清除緩存函數(shù))和system("pause")(系統(tǒng)暫停),可以讓用戶重新輸入正確的功能號。 數(shù)據(jù)結(jié)構(gòu)是一門非常實用的課程,可以學(xué)到很多非常有用的基礎(chǔ)知識,對我們計算機專業(yè)的學(xué)生以后的編程開發(fā)有很大的幫助。通過這次課程設(shè)計,讓我對鏈表、指針等邏輯結(jié)構(gòu)、存儲結(jié)構(gòu)及相應(yīng)的算法加深了理解,總之,收獲頗大!程序源代碼:#include<

9、stdio.h>#include<stdlib.h>typedef struct LNode/定義結(jié)構(gòu)體類型指針 char data; struct LNode*next; *pointer; void input(pointer M);void output(pointer M);void and(pointer A,pointer B,pointer C);void or(pointer A,pointer B,pointer C);void differ(pointer A,pointer B,pointer C);void input(pointer M)/定義輸入集

10、合函數(shù) pointer p; char tmp; scanf("%c",&tmp); while(tmp!='n') p=(pointer)malloc(sizeof(struct LNode); /為p申請內(nèi)存空間p->data=tmp; p->next=M->next; M->next=p; scanf("%c",&tmp); void output(pointer M)/定義輸出集合函數(shù) pointer p; p=M->next; while(p!=NULL) printf("

11、%3c",p->data); p=p->next; printf("n"); void and(pointer A,pointer B,pointer C)/定義集合的并集函數(shù) pointer p1,p2,p3; p1=A->next; while(p1!=NULL) p3=(pointer)malloc(sizeof(struct LNode); p3->data=p1->data; p3->next=C->next; C->next=p3; p1=p1->next; p2=B->next; while

12、(p2!=NULL) p1=A->next; while(p1!=NULL)&&(p1->data!=p2->data) p1=p1->next;if (p1=NULL) p3=(pointer)malloc(sizeof(struct LNode); p3->data=p2->data; p3->next=C->next; C->next=p3; p2=p2->next; void or(pointer A,pointer B,pointer C)/定義集合的交集函數(shù) pointer p1,p2,p3; p1=A-&

13、gt;next; while(p1!=NULL) p2=B->next; while(p2!=NULL)&&(p2->data!=p1->data) p2=p2->next;if(p2!=NULL)&&(p2->data=p1->data) p3=(pointer)malloc(sizeof(struct LNode); p3->data=p1->data; p3->next=C->next; C->next=p3; p1=p1->next; void differ(pointer A,po

14、inter B,pointer C)/定義集合的差集函數(shù) pointer p1,p2,p3; p1=A->next; while(p1!=NULL) p2=B->next; while(p2!=NULL)&&(p2->data!=p1->data) p2=p2->next; if(p2=NULL) p3=(pointer)malloc(sizeof(struct LNode);p3->data=p1->data; p3->next=C->next; C->next=p3; p1=p1->next; void ma

15、in()/主函數(shù) system("color b3");int x; printf("(輸入數(shù)據(jù),按回車鍵結(jié)束,第一個集合大于第二個集合!)n");pointer A,B,C;A=(pointer)malloc(sizeof(struct LNode); A->next=NULL; B=(pointer)malloc(sizeof(struct LNode);B->next=NULL; C=(pointer)malloc(sizeof(struct LNode); C->next=NULL; printf("請輸入集合1:n&

16、quot;); input(A);/調(diào)用輸入集合函數(shù) printf("請輸入集合2:n"); input(B);/調(diào)用輸入集合函數(shù) printf("數(shù)據(jù)輸入完成!n");printf("nn");printf("主菜單:nnn");printf("ttt- 1.并集運算 -nn" ); printf("ttt- 2.交集運算 -nn"); printf("ttt- 3.差集運算 -nn" ); printf("ttt- 4. 結(jié)束 -nn" );do printf("請選擇序號n"); scanf("%d",&x); switch(x) case 1: printf("兩集合的并是n"); and(A,B,C);/調(diào)用并集函數(shù)output(C); C->next=NULL; break;case 2: printf("兩集合的交是n");or(A,B,C);/調(diào)用交集函

溫馨提示

  • 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)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論