數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告集合運(yùn)算_第1頁(yè)
數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告集合運(yùn)算_第2頁(yè)
數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告集合運(yùn)算_第3頁(yè)
數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告集合運(yùn)算_第4頁(yè)
數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告集合運(yùn)算_第5頁(yè)
已閱讀5頁(yè),還剩15頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告設(shè)計(jì)題目: 集合運(yùn)算專 業(yè) 班 級(jí) 學(xué) 生 學(xué) 號(hào) 指導(dǎo)教師 2011 年 5 月1目目 錄錄一一.設(shè)計(jì)題目設(shè)計(jì)題目 .2(一).題目:集合運(yùn)算.2(二).問(wèn)題描述和分析.2二二.設(shè)計(jì)內(nèi)容設(shè)計(jì)內(nèi)容 .3(一). 數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì).3(二). 算法設(shè)計(jì).3三三.概要設(shè)計(jì)概要設(shè)計(jì) .4(一一).程序結(jié)構(gòu)圖程序結(jié)構(gòu)圖.4(二).具體程序設(shè)計(jì).4四四.算法分析算法分析 .5源代碼.5五五.結(jié)果分析結(jié)果分析 .16六六.心得體會(huì)心得體會(huì) .21七七.參考文獻(xiàn)參考文獻(xiàn) .222一一.設(shè)計(jì)題目設(shè)計(jì)題目(一).題目:集合運(yùn)算功能:使用鏈表來(lái)表示集合,完成集合的合并,求交集等操作。主要包含以下內(nèi)

2、容:1初步完成總體設(shè)計(jì),搭好框架,確定人機(jī)對(duì)話的界面,確定函數(shù)個(gè)數(shù);2完成最低要求; 3進(jìn)一步要求:要求:1)界面友好,函數(shù)功能要?jiǎng)澐趾?)總體設(shè)計(jì)應(yīng)畫一流程圖3)程序要加必要的注釋4)要提供程序測(cè)試方案5)程序一定要經(jīng)得起測(cè)試,寧可功能少一些,也要能運(yùn)行起來(lái),不能運(yùn)行的程序是沒(méi)有價(jià)值的。(二).問(wèn)題描述和分析 本課程設(shè)計(jì)中,鏈表長(zhǎng)度不能超過(guò) 100,集合輸入的形式為一個(gè)以“回車符”為結(jié)束標(biāo)志的字符串,串中字符順序不限,且允許出現(xiàn)重復(fù)字符或非法字符,程序應(yīng)能自動(dòng)濾。輸出的運(yùn)算結(jié)果字符串中將不含重復(fù)字符或非法字符。 問(wèn)題描述: 有兩個(gè)集合 a、b,要求它的交集、并集。用兩個(gè)鏈表 l1、l2 存儲(chǔ)

3、集合a、b。描 述該問(wèn)題的存儲(chǔ)結(jié)構(gòu),算法,并通過(guò)編寫程序來(lái)實(shí)現(xiàn)。 問(wèn)題分析: 1. 定義一個(gè)鏈表來(lái)存儲(chǔ)集合元素; 2. 鏈表 l 包括數(shù)據(jù)域和指針域,數(shù)據(jù)域中存儲(chǔ)集合元素,指針域中存儲(chǔ)下一個(gè)集合元素的位置; 3. 創(chuàng)建若干個(gè)基本函數(shù),通過(guò)函數(shù)調(diào)用對(duì)鏈表進(jìn)行作,實(shí)現(xiàn)集合的交、并運(yùn)算。 3二二.設(shè)計(jì)內(nèi)容設(shè)計(jì)內(nèi)容(一). 數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì) 1. 數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)考慮 創(chuàng)建三個(gè)帶頭結(jié)點(diǎn)的單鏈表,用來(lái)存儲(chǔ)兩個(gè)集合中的元素和最終的結(jié)果,為實(shí)現(xiàn)集合的交,并運(yùn)算功能,應(yīng)以有序鏈表表示集合。為此,需要兩個(gè)抽象數(shù)據(jù)類型:有序表和集合。 2. 邏輯結(jié)構(gòu)存儲(chǔ)結(jié)構(gòu) 邏輯結(jié)構(gòu): 創(chuàng)造一個(gè)帶結(jié)點(diǎn)的單鏈表包括(頭結(jié)點(diǎn) l,結(jié)點(diǎn)若干,

4、尾結(jié)點(diǎn)) 單鏈表中每個(gè)結(jié)點(diǎn)包括(*next 表示指針 data 表示域) (二). 算法設(shè)計(jì) 程序以用戶和計(jì)算機(jī)的對(duì)話方式執(zhí)行,即在計(jì)算機(jī)終端上顯示“提示信息”之后,由用戶在鍵盤上輸入演示程序中規(guī)定的運(yùn)算命令;相應(yīng)的輸入數(shù)據(jù)(濾輸入中的非法字符)和運(yùn)算結(jié)果顯示在其后。 程序執(zhí)行的命令包括: a) 構(gòu)造集合 a; b) 構(gòu)造集合 b; c) 求交集; d) 求并集; e) 結(jié)束。 “構(gòu)造集合 a”和“構(gòu)造集合 b”時(shí),需以字符串的形式鍵入集合元素。4三三.概要設(shè)計(jì)概要設(shè)計(jì)(一).程序結(jié)構(gòu)圖main 函數(shù)intersect交函數(shù)union并函數(shù)sort鏈表排序函數(shù)createlist尾插法建表di

5、splist輸出函數(shù)(二).具體程序設(shè)計(jì)1.定義鏈表 typedef int elemtype;typedef struct lnode2.返回鏈表長(zhǎng)度3.返回指定節(jié)點(diǎn)的值4.定位制定值的節(jié)點(diǎn)的值5.顯示鏈表 void display(struct lnode *l)6.創(chuàng)建鏈表,并設(shè)置鏈表為空 void creat(struct lnode *l)7.向鏈表中插入元素 void insert(struct lnode *l,int n,elemtype x)8.插在第 n 個(gè)節(jié)點(diǎn)的前面9.刪除指定位置的節(jié)點(diǎn)10.初始化鏈表 void init(struct lnode *l,int len)

6、11.復(fù)制鏈表 l1 到 l2 void copy(struct lnode *l1,struct lnode *l2 )12.求交集 void intersection(struct lnode *l1,struct lnode *l2,struct lnode *l3)13.求并集unionset(struct lnode *l1,struct lnode *l2,struct lnode *l3)14.把 l1 復(fù)制到 l3,然后比較 l2 和 l3,得到 l2 與 l3 中沒(méi)有的元素,并插入15.插在排序的位置上insert(&*l3,k,t2-data); 16.插在鏈尾5四四.算法

7、分析算法分析源代碼如下如下:#include #include #include #define null 0#define m 100typedef int elemtype;/*定義鏈表*/typedef struct lnode elemtype data; struct lnode *next;int lenth(struct lnode *l) int n=0; struct lnode *t; t=*l; while(t!=null) n+; t=t-next; return n;elemtype get(struct lnode *l,int n) int i=1; struct

8、 lnode *t; t=*l; while (inext; i+; if(t!=null) return(t-data); else6 printf(the %dth lnode havent find !n,n); int locate(struct lnode *l,elemtype x ) int n=1; struct lnode *t; t=*l; while (t!=null&t-data!=x) t=t-next; n+; if(t=null) return(0); else return(n); void display(struct lnode *l)/*顯示鏈表*/ st

9、ruct lnode *t; t=*l; if(t=null) printf(the link is null!); else do printf(%d,t-data); t=t-next; while(t!=null); printf(n);void creat(struct lnode *l)/*創(chuàng)建鏈表*/7 *l=null;void insert(struct lnode *l,int n,elemtype x)/*向鏈表中插入元素*/ struct lnode *t1,*t2; int j=1; t1=(struct lnode *)malloc(sizeof(struct lnod

10、e); t1-data=x; t2=*l; if(n=1) t1-next=t2; *l=t1; else while(jnext!=null) t2=t2-next; j+; if(j=n-1) t1-next=t2-next; t2-next=t1; else printf(insert error!); void delete(struct lnode *l,int n) int i=1; struct lnode *t1,*t2; t1=*l; if(n=1) t2=t1; *l=t1-next; else 8 while(inext!=null) t1=t1-next; i+; if

11、(t1-next!=null&i=n-1) t2=t1-next; t1-next=t2-next; else printf(delete error!n); if(t2=null) free(t2); void init(struct lnode *l,int len)/*初始化鏈表*/ int dm,i,j,k,ti; struct lnode *t;input: for(i=1;i=len;i+) scanf(%d,&di); for(j=1;j=len;j+) for(k=j+1;kdk) ti=dj; dj=dk; dk=ti; for(i=1;ilen;i+) if(di=di+1

12、) printf(dont allow the same data! please reinput!);9 goto input; creat(&*l); for(i=1;i=len;i+) insert(&*l,i,di); printf(the data of the linktable is: ); display(&*l); void copy(struct lnode *l1,struct lnode *l2 )/*復(fù)制鏈表 l1到 l2*/ int i,len; elemtype t; len=lenth(&*l1); creat(&*l2); for(i=1;i=len;i+)

13、t=get(&*l1,i); insert(&*l2,i,t); void intersection(struct lnode *l1,struct lnode *l2,struct lnode *l3)/*求交集*/ int i,j,k=1; struct lnode *t1,*t2; t1=*l1; t2=*l2; creat(&*l3); for(i=1;i=lenth(&*l1);i+) for(j=1;jdata=t2-data) insert(&*l3,k,t1-data); k+; t2=t2-next; 10 t1=t1-next; t2=*l2; unionset(struc

14、t lnode *l1,struct lnode *l2,struct lnode *l3)/*求并集*/ int i,j,k; struct lnode *tt,*t2,*t3; creat(&*l3); copy(&*l1,&*l3); t2=*l2; t3=*l3; for(i=1;i=lenth(&*l2);i+) k=1; for(j=1;jdata=t3-data) k=0; break; else if(t2-datadata) break; else if(t2-datat3-data) k+; if(knext; if(k0&kdata); else if(klenth(&*

15、l3) tt=(struct lnode *)malloc(sizeof(struct lnode); tt-data=t2-data;11 tt-next=null; t3-next=tt; t2=t2-next; t3=*l3; void diffrenceset(struct lnode *l1,struct lnode *l2,struct lnode *l3) int i,t,n; creat(&*l3); copy(&*l1,&*l3); for(i=1;i=lenth(&*l2);i+) t=get(&*l2,i); n=locate(&*l3,t); if(n) delete(

16、&*l3,n); main() int len1,len2;char r;static struct lnode *head1,*head2,*head3,*head4;printf(/*the begin*/n);printf(please input the lenth of the first linktable! );scanf(%d,&len1);printf(the lenth of the first linktable is %d,please input %d datas! ,len1,len1);init(&head1,len1);printf(/-/n);printf(p

17、lease input the lenth of the second linktable! );scanf(%d,&len2);printf(the lenth of the second linktable is %d,please input %d datas! ,len2,len2);init(&head2,len2);printf(nn/-/n);intersection(&head1,&head2,&head3);printf(the intersection of two linktable: );display(&head3);unionset(&head1,&head2,&h

18、ead4);12printf(the union set of two linktable: );display(&head4);printf(/*the end*/n);五五.結(jié)果分析結(jié)果分析1.在 turboc2.01 環(huán)境中輸入源代碼2.按 atl+f9 編譯文件得到以下結(jié)果,發(fā)現(xiàn)無(wú)錯(cuò)誤。133.由提示按任意鍵,后按 ctrl+f9 編譯運(yùn)行,得到以下結(jié)果。給第一個(gè)鏈表的長(zhǎng)度設(shè)為 5 后按 enter程序開始(程序開始(thethe beginbegin)4.輸入以下數(shù)字:10 25 78 99 1000 145.輸完數(shù)字后按 enter,得到以下結(jié)果,第一個(gè)鏈表輸入完畢。6.由提示任意給定第二個(gè)鏈表長(zhǎng)度為 17。157.屏幕提示鏈表長(zhǎng)度已定,并要求輸入 17 個(gè)數(shù)字。8.輸入以下 17 個(gè)數(shù)字:1 2 3 4 5 6 7 8 9 28 78 86 99 100 120 150 10000169.按 enter 屏幕顯示如下10.按 alt+f5 查看輸出結(jié)果得出交集:78 99并集:1 2 3 4 5 6 7 8 9 10 25 28 78 86 99 100 120 150 1000 1000017程序結(jié)束程序結(jié)束(the(the end)

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論