版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
/電子與信息工程學(xué)院數(shù)據(jù)結(jié)構(gòu)實驗報告實驗名稱:集合的運算實驗類型:設(shè)計<驗證、設(shè)計、創(chuàng)新>班級:2013級電信三班學(xué)號:201307014327姓名:陸杰實驗時間:2015年6月16日指導(dǎo)教師:余先倫成績:目錄一課程設(shè)計目的和要求二問題描述及分析三算法思想和程序的實現(xiàn)概述3.1算法思想3.2程序的實現(xiàn)概述四程序流程圖流程圖五程序的實現(xiàn)5.1主函數(shù)5.2鏈表的生成5.3集合的輸出5.4并運算函數(shù)5.5交運算函數(shù)5.6差函數(shù)六運行結(jié)果分析6.1程序主界面6.2整數(shù)集合并運算6.3整數(shù)集合交運算6.4整數(shù)集合差運算6.5字母集合并運算6.6字母集合交運算6.7字母集合差運算6.8字母和數(shù)據(jù)集合并運算6.9字母和數(shù)據(jù)集合交運算6.10字母和數(shù)據(jù)集合差運算6.11退出程序七源代碼八總結(jié)九參考文獻一課程設(shè)計目的和要求目的:深入理解數(shù)據(jù)結(jié)構(gòu)的基本理論.掌握數(shù)據(jù)存儲結(jié)構(gòu)的設(shè)計方法.掌握基于數(shù)據(jù)結(jié)構(gòu)的各種操作的實現(xiàn)方法.訓(xùn)練對基礎(chǔ)知識和基本方法的綜合運用能力.增強對算法的理解能力.提高軟件設(shè)計能力。在實踐中培養(yǎng)獨立分析問題和解決問題的作風(fēng)和能力。要求:熟練運用C++語言、基本數(shù)據(jù)結(jié)構(gòu)和算法的基礎(chǔ)知識.獨立編制一個具有中等難度的、解決實際應(yīng)用問題的應(yīng)用程序。通過題意分析、選擇數(shù)據(jù)結(jié)構(gòu)、算法設(shè)計、編制程序、調(diào)試程序、軟件測試、結(jié)果分析、撰寫課程設(shè)計報告等環(huán)節(jié)完成軟件設(shè)計的全過程.不斷地完善程序以提高程序的性能。二問題描述及分析問題描述:本課程設(shè)計中.集合的元素可以是字母[a,b,…z],也可以是整數(shù)[0,1,…9].集合的大小集合輸入的形式為一個以"回車符"為結(jié)束標(biāo)志的字符.允許出現(xiàn)重復(fù)字符或非法字符.程序應(yīng)能自動濾去。輸出的運算結(jié)果字符串中將不含重復(fù)字符或非法字符。問題描述:有兩個集合A、B.要求它的交集、并集和差集C。用兩個鏈表p、q存儲集合A、B.用鏈表r存儲集合C。描述該問題的存儲結(jié)構(gòu).算法.并通過編寫程序來實現(xiàn)。問題分析:1.定義一個鏈表來存儲集合元素;2.鏈表L包括數(shù)據(jù)域和指針域.數(shù)據(jù)域中存儲集合元素.指針域中存儲下一個集合元素的位置;3.創(chuàng)建若干個基本函數(shù).通過函數(shù)調(diào)用對鏈表進行操作.實現(xiàn)集合的交、并、差運算。三算法思想和程序的實現(xiàn)概述3.1算法思想定義一個鏈表.鏈表有整型數(shù)據(jù)和一個指向鏈表的指針.程序包含定義一個新鏈表的函數(shù).集合并函數(shù).集合交函數(shù).集合差函數(shù)。求兩集合交集并集差集從兩集合的頭結(jié)點開始.比較兩集合元素大小.進行對應(yīng)的操作.直到讀取到兩集合的末尾元素。主程序先定義三個集合.創(chuàng)建集合A讀入A數(shù)據(jù).創(chuàng)建集合B讀入B數(shù)據(jù).然后輸出集合A,B的元素.求出兩集合并集并輸出。求兩集合的交集和差集的運算與求并集的步驟類似.只需按提示輸入即可。3.2程序的實現(xiàn)概述〔1輸入的形式和輸入值的范圍:輸入是從鍵盤輸入的.輸入的內(nèi)容為整數(shù)?!?輸出的形式從屏幕輸出.顯示用戶輸入集合的元素.并顯示進行運算后的值?!?存儲結(jié)構(gòu)在這次設(shè)計中開始我是采用鏈?zhǔn)酱鎯Y(jié)構(gòu).使得集合的算法定義十分簡潔。算法實現(xiàn)定義鏈表.創(chuàng)建鏈表.輸出鏈表。利用鏈表的來存儲集合。利用三個函數(shù)分別實現(xiàn)課程要求程序?qū)崿F(xiàn)的求并、求交和差三中運算。現(xiàn)分述如下:并運算函數(shù)該函數(shù)采取了用新集合存儲兩集合并后的新集合.利用一個for循環(huán)來消除新集合中相同的元素.使其在屏幕上只顯示一次。B交運算函數(shù)該函數(shù)用于實現(xiàn)集合的并運算.利用for嵌套實現(xiàn)兩鏈表中數(shù)據(jù)的比較.輸出兩鏈表中相同的元素。C差函數(shù)該函數(shù)用于實現(xiàn)集合的差運算.利用鏈表中的數(shù)據(jù)域進行判斷。輸出不同于被減集合中不存在的元素。四程序流程圖流程圖:開始開始定義鏈表定義鏈表創(chuàng)建鏈表創(chuàng)建鏈表輸入數(shù)據(jù)輸入數(shù)據(jù)求兩集合的并集求兩集合的并集輸入數(shù)據(jù)輸入數(shù)據(jù)求兩集合的交集求兩集合的交集輸入數(shù)據(jù)輸入數(shù)據(jù)求兩集合的差集求兩集合的差集五程序的實現(xiàn)改程序的實現(xiàn)步驟是定義鏈表.創(chuàng)建鏈表.輸出鏈表。利用鏈表的來存儲集合。利用三個函數(shù)分別實現(xiàn)課程要求程序?qū)崿F(xiàn)的求并、求交和差三中運算?,F(xiàn)分述如下:5.1主函數(shù)voidbangzhu<>{printf<"\n\t\t\t***********************************">;printf<"\n\t\t\t*求集合的交并差*">;printf<"\n\t\t\t*********************************\n">;}voidmain<>/*主函數(shù)*/{structset*p,*q,*r;intm,n,node;bangzhu<>;for<;;>{do{printf<"請輸入您要選擇操作的代碼:\n">;printf<"1:求兩集合的并A∪B\n">;printf<"2:求兩集合的交A∩B\n">;printf<"3:求兩集合的差A(yù)-B\n">;printf<"0:退出該程序\n">;scanf<"%d",&node>;}while<node<0||node>3>;if<node==0>exit<1>;printf<"\t\t\t/*請輸入集合A中元素的個數(shù):*/\n">;scanf<"%d",&m>;createlist_p<p,m>;/*調(diào)用鏈表生成函數(shù)生成A鏈表*/printf<"\t\t\t/*請輸入集合B中元素的個數(shù):*/\n">;scanf<"%d",&n>;/*調(diào)用鏈表生成函數(shù)生成B鏈表*/createlist_p<q,n>;printf<"集合A中元素為:">;printlist_p<p>;/*調(diào)用集合輸出函數(shù)輸出集合A*/printf<"集合B中元素為:">;printlist_p<q>;/*調(diào)用集合輸出函數(shù)輸出集合A*/while<node<0||node>3>;switch<node>{case1:Addset<p,q,r>;printf<"A∪B:\n">;printlist_p<r>;break;case2:Subset<p,q,r>;printf<"A∩B:\n">;printlist_p<r>;break;case3:Intset<p,q,r>;printf<"A-B:\n">;printlist_p<r>;break;}printf<"\n">;}}5.2鏈表的生成voidcreatelist_p<structset*&p,intn>{inti;structset*L;p=<structset*>malloc<sizeof<set>>;/*申請結(jié)點p*/p->next=NULL;/*定義p的next指針為空*/for<i=n;i>0;i-->{L=<structset*>malloc<sizeof<set>>;/*申請結(jié)點L*/printf<"請輸入該集合中第%d個整數(shù)元素:",n-i+1>;scanf<"%s",&L->coef>;L->next=p->next;p->next=L;}}//生成新鏈表用于存放兩集合中的元素5.3集合的輸出voidprintlist_p<structset*&p>{structset*L;inti;L=p->next;if<!L>printf<"該表為空!\n">;while<L!=NULL>{printf<"%c",L->coef>;L=L->next;i++;}printf<"\n">;}//打印輸入的兩集合中的元素5.4并運算函數(shù)voidAddset<structset*&p,structset*&q,structset*&r>{structset*k,*m,*n;r=<structset*>malloc<sizeof<set>>;/*申請結(jié)點r*/r->next=NULL;/*定義r的next指針為空*/k=p->next;/*k指向p的下一個結(jié)點*/for<;k;>{m=<structset*>malloc<sizeof<set>>;/*申請結(jié)點m*/m->next=r->next;r->next=m;m->coef=k->coef;k=k->next;}/*把第一個集合中的元素放在新集合中*/k=q->next;m=<structset*>malloc<sizeof<set>>;m->next=r->next;r->next=m;m->coef=k->coef;k=k->next;for<;k;>{for<n=r->next;<k->coef!=n->coef>&&n->next;>{n=n->next;}/*與新集合中的元素比較.如果不同則鏈入鏈表中*/if<<k->coef!=n->coef>&&!<n->next>>{m=<structset*>malloc<sizeof<set>>;m->next=r->next;r->next=m;m->coef=k->coef;}k=k->next;}/*對第二個集合中的元素進行分析*/}/*求A∪B*/該函數(shù)采取了用新集合存儲兩集合并后的新集合.利用一個for循環(huán)來消除新集合中相同的元素.是其在屏幕上只顯示一次。5.5交運算函數(shù)voidSubset<structset*&p,structset*&q,structset*&r>{structset*k,*m,*n;r=<structset*>malloc<sizeof<set>>;/*申請結(jié)點r*/r->next=NULL;n=q->next;for<;n;>/*比較p和q鏈表中的元素.相同的元素存入鏈表r中*/{m=p->next;for<;<m->coef!=n->coef>&&m->next;>{m=m->next;}if<m->coef==n->coef>{k=<structset*>malloc<sizeof<set>>;k->next=r->next;r->next=k;k->coef=m->coef;}n=n->next;}}/*求A∩B*/該函數(shù)用于實現(xiàn)集合的并運算.利用for嵌套實現(xiàn)兩鏈表中數(shù)據(jù)的比較.輸出兩鏈表中相同的元素。5.6差函數(shù)voidIntset<structset*&p,structset*&q,structset*&r>{structset*k,*m,*n;r=<structset*>malloc<sizeof<set>>;r->next=NULL;m=p->next;for<;m;>{n=q->next;for<;<m->coef!=n->coef>&&n->next;>{n=n->next;}if<!n->next&&<m->coef!=n->coef>>/*比較鏈表p與q,找出p中不同于q的元素存入鏈表r中*/{k=<structset*>malloc<sizeof<set>>;k->next=r->next;r->next=k;k->coef=m->coef;}m=m->next;}}/*求A-B*/該函數(shù)用于實現(xiàn)集合的差運算.利用鏈表中的數(shù)據(jù)域進行判斷。輸出不同于被減集合中不存在的元素。六運行結(jié)果分析6.1程序主界面圖6.1程序主界面6.2整數(shù)集合并運算圖6.2整數(shù)集合并運算6.3整數(shù)集合交運算圖6.3整數(shù)集合交運算6.4整數(shù)集合差運算圖6.4整數(shù)集合差運算6.5字母集合并運算圖6.5字母集合并運算6.6字母集合交運算圖6.6字母集合交運算6.7字母集合差運算圖6.7字母集合差運算6.8字母和數(shù)據(jù)集合并運算圖6.8字母和數(shù)據(jù)集合并運算6.9字母和數(shù)據(jù)集合交運算圖6.9字母和數(shù)據(jù)集合交運算6.10字母和數(shù)據(jù)集合差運算圖6.10字母和數(shù)據(jù)集合差運算6.11退出程序圖6.11退出程七源代碼#include<stdio.h>#include<malloc.h>#include<stdlib.h>structset{charcoef;structset*next;};//線性表的單鏈表存儲結(jié)構(gòu)voidcreatelist_p<structset*&p,intn>{inti;structset*L;p=<structset*>malloc<sizeof<set>>;p->next=NULL;//建立一個帶頭結(jié)點的單鏈表for<i=n;i>0;i-->{L=<structset*>malloc<sizeof<set>>;//生成新節(jié)點printf<"請輸入該集合中第%d個整數(shù)元素:",n-i+1>;scanf<"%s",&L->coef>;L->next=p->next;p->next=L;//插入到表頭}}voidprintlist_p<structset*&p>{structset*L;inti;L=p->next;if<!L>printf<"該表為空!\n">;while<L!=NULL>{printf<"%c",L->coef>;L=L->next;i++;}printf<"\n">;}voidAddset<structset*&p,structset*&q,structset*&r>{structset*k,*m,*n;r=<structset*>malloc<sizeof<set>>;r->next=NULL;k=p->next;for<;k;>{m=<structset*>malloc<sizeof<set>>;m->next=r->next;r->next=m;m->coef=k->coef;k=k->next;//r中存放p}k=q->next;m=<structset*>malloc<sizeof<set>>;m->next=r->next;r->next=m;m->coef=k->coef;k=k->next;for<;k;>{for<n=r->next;<k->coef!=n->coef>&&n->next;>{n=n->next;}if<<k->coef!=n->coef>&&!<n->next>>{m=<structset*>malloc<sizeof<set>>;m->next=r->next;r->next=m;m->coef=k->coef;}k=k->next;}}//求A∪BvoidSubset<structset*&p,structset*&q,structset*&r>{structset*k,*m,*n;r=<structset*>malloc<sizeof<set>>;r->next=NULL;n=q->next;for<;n;>{m=p->next;for<;<m->coef!=n->coef>&&m->next;>{m=m->next;}if<m->coef==n->coef>{k=<structset*>malloc<sizeof<set>>;k->next=r->next;r->next=k;k->coef=m->coef;}n=n->next;}}//求A∩BvoidIntset<structset*&p,structset*&q,structset*&r>{structset*k,*m,*n;r=<structset*>malloc<sizeof<set>>;r->next=NULL;m=p->next;for<;m;>{n=q->next;for<;<m->coef!=n->coef>&&n->next;>{n=n->next;}if<!n->next&&<m->coef!=n->coef>>{k=<structset*>malloc<sizeof<set>>;k->next=r->next;r->next=k;k->coef=m->coef;}m=m->next;}}//求A-Bvoidbangzhu<>{printf<"\n\t\t\t***********************************">;printf<"\n\t\t\t*求集合的交并差*">;printf<"\n\t\t\t*********************************\n">;}voidmain<>{structset*p,*q,*r;intm,n,node;bangzhu<>;for<;;>{do{printf<"請輸入您要選擇操作的代碼:\n">;printf<"1:求兩集合的并A∪B\n">;printf<"2:求兩集合的交A∩B
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 《社會心理因素》課件
- 《電信業(yè)風(fēng)云》課件
- 寒假自習(xí)課 25春初中道德與法治八年級下冊教學(xué)課件 第二單元 第2課時 公民基本義務(wù)
- 《沙盤規(guī)則介紹》課件
- 《定價的基本策略》課件
- 班干部工作總結(jié)3篇
- 2023年學(xué)校志愿者心得體會字萬能-學(xué)校志愿者工作總結(jié)(5篇)
- 2023-2024年項目部安全培訓(xùn)考試題附答案(典型題)
- 畢業(yè)銷售實習(xí)報告模板匯編八篇
- 2023年項目部安全管理人員安全培訓(xùn)考試題及參考答案(模擬題)
- 推板式造波機的機械結(jié)構(gòu)設(shè)計
- SAPHR快速指南
- 廣東海洋大學(xué)大數(shù)據(jù)庫課程設(shè)計
- 商業(yè)發(fā)票INVOICE模板
- (完整版)食堂管理制度及流程
- 某醫(yī)院后備人才梯隊建設(shè)方案
- 二年級上冊英語教案Unit6 Lesson22︱北京課改版
- 桂枝加龍骨牡蠣湯_金匱要略卷上_方劑加減變化匯總
- 電機與電氣控制技術(shù)PPT課件
- 廢棄鉆井泥漿和壓裂返排液無害化處理研究報告
- 論文-基于單片機的搶答器.doc
評論
0/150
提交評論