版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、<p> 課 程 設(shè) 計(jì) 報(bào) 告</p><p> 課程名稱 數(shù)據(jù)結(jié)構(gòu) </p><p> 課題名稱 集合的并、交和差運(yùn)算 </p><p> 專 業(yè) 通信工程 </p><p> 班 級(jí)
2、 通信1101 </p><p> 學(xué) 號(hào) </p><p> 姓 名 </p><p> 指導(dǎo)教師 </p><
3、;p> 2013 年6月29日</p><p> 課 程 設(shè) 計(jì) 任 務(wù) 書(shū)</p><p> 課程名稱 數(shù)據(jù)結(jié)構(gòu) </p><p> 課 題 集合的并、交和差運(yùn)算 </p><p> 專業(yè)班級(jí) </p><p&
4、gt; 學(xué)生姓名 </p><p> 學(xué) 號(hào) </p><p> 指導(dǎo)老師 </p><p> 審 批 </p><p
5、> 任務(wù)書(shū)下達(dá)日期 2013 年 6 月 23 日</p><p> 任 務(wù) 完成日期 2013 年 6 月 29 日</p><p><b> 目錄 </b></p><p><b> 1. 需求分析1</b></p><p> 1.1. 問(wèn)題描述1</p>
6、<p> 1.2. 基本要求1</p><p> 1.3. 測(cè)試數(shù)據(jù)1</p><p> 1.4. 實(shí)現(xiàn)提示1</p><p><b> 2. 概要設(shè)計(jì)1</b></p><p> 2.1. 有序表的抽象數(shù)據(jù)類型定義為1</p><p> 2.2. 集合的定義為
7、1</p><p> 2.3. 基本操作2</p><p> 2.4. 調(diào)用關(guān)系2</p><p><b> 3. 詳細(xì)設(shè)計(jì)4</b></p><p> 3.1. 具體算法流程4</p><p> 3.2. 具體的程序功能實(shí)現(xiàn)4</p><p> 3.
8、3. 偽碼算法5</p><p><b> 4. 調(diào)試分析9</b></p><p> 4.1. 調(diào)試過(guò)程中遇到的問(wèn)題9</p><p> 4.2. 算法的時(shí)空分析9</p><p> 5. 用戶使用說(shuō)明10</p><p> 6. 測(cè)試結(jié)果11</p><
9、;p> 6.1. 做完一次運(yùn)算后按回車鍵繼續(xù)下一次運(yùn)算11</p><p> 6.2. 做完運(yùn)算后輸入字母“e”退出運(yùn)算12</p><p><b> 7. 總結(jié)12</b></p><p><b> 8. 附錄13</b></p><p> 8.1. 程序源代碼13<
10、;/p><p> 集合的并、交和差運(yùn)算</p><p><b> 需求分析</b></p><p><b> 問(wèn)題描述</b></p><p> 編制一個(gè)能演示執(zhí)行集合的并、交和差運(yùn)算的程序。</p><p><b> 基本要求</b></p
11、><p> (1) 集合的元素限定為小寫(xiě)字母字符 [‘a(chǎn)’..’z’] 。</p><p> (2) 演示程序以用戶和計(jì)算機(jī)的對(duì)話方式執(zhí)行。</p><p><b> 測(cè)試數(shù)據(jù)</b></p><p> (1)Set1="magazine",Set2="paper",</
12、p><p> Set1∪Set2="aegimnprz",Setl ∩Set2="ae",Set1-Set2="gimnz"。</p><p> (2)Set1= " 012oper4a6tion89",Set2="error data",</p><p> Set
13、1∪Set2="adeinoprt",Setl ∩Set2="aeort",Set1-Set2="inp"。</p><p><b> 實(shí)現(xiàn)提示</b></p><p> 以有序鏈表表示集合。</p><p><b> 概要設(shè)計(jì)</b></p>
14、<p> 為實(shí)現(xiàn)上述程序功能,應(yīng)以有序鏈表表示集合。為此,需要兩個(gè)抽象數(shù)據(jù)類型:有序表和集合。</p><p> 有序表的抽象數(shù)據(jù)類型定義為</p><p> typedef struct LNode</p><p><b> {</b></p><p> char data;</p>
15、<p> struct LNode *next;</p><p> }LinkList;</p><p><b> 集合的定義為</b></p><p> char set1[maxsize],set2[maxsize];</p><p><b> 基本操作</b></
16、p><p> void GreatListR(LinkList *&L,char a[],int n) //尾插法建表</p><p> void InitList(LinkList *&L)//初始化線性表</p><p> void DestroyList(LinkList *&L)//銷毀線性表</p><
17、p> void DispList(LinkList *L)//輸出線性表</p><p> void sort(LinkList *&L)//元素排序</p><p> void bingji(LinkList *L,LinkList *N,LinkList *&M)//并集運(yùn)算</p><p> void dels(LinkL
18、ist *&M) //刪除相同元素 僅留一個(gè)</p><p> void jiaoji(LinkList *&M,LinkList *L,LinkList *N)//交集運(yùn)算</p><p> void chayunsuan(LinkList *L,LinkList *M,LinkList *&K)//集合差運(yùn)算</p><p&
19、gt; int main()//為設(shè)計(jì)程序主頁(yè)面的函數(shù),并且使用了所有的函數(shù)</p><p><b> 調(diào)用關(guān)系</b></p><p> InitList(L);</p><p> InitList(N);</p><p> GreatListR(L,set1,i);</p><p&
20、gt; GreatListR(U,set1,i);</p><p> sort(U);//元素排序</p><p> dels(U);//刪除相同元素 僅留一個(gè)</p><p> sort(L);//元素排序</p><p> dels(L);//刪除相同元素 僅留一個(gè)</p><p> p
21、rintf("請(qǐng)輸入集合set2=");</p><p> for(j=0;j<maxsize;j++)</p><p><b> {</b></p><p> scanf("%c",&set2[j]);</p><p> if(set2[j]=='\
22、n')</p><p><b> break;</b></p><p><b> }</b></p><p> GreatListR(N,set2,j);</p><p> sort(N);//元素排序</p><p> dels(N);//刪除相同元
23、素 僅留一個(gè)</p><p> bingji(L,N,M);//集合合并</p><p> dels(M);//刪除相同元素 僅留一個(gè)</p><p> DispList(M); </p><p> jiaoji(M,L,N);//交集運(yùn)算</p><p> DispList(M); </
24、p><p> chayunsuan(U,M,K);//集合差運(yùn)算</p><p> DispList(K);</p><p><b> char n;</b></p><p> printf("\n是否退出運(yùn)算?\n");</p><p> scanf("%c
25、",&n);</p><p> if(n=='e')</p><p><b> exit(0);</b></p><p> DestroyList(L);</p><p> DestroyList(N);</p><p> DestroyList(U);
26、</p><p> DestroyList(M);</p><p> DestroyList(K);</p><p> system("PAUSE");</p><p><b> 詳細(xì)設(shè)計(jì)</b></p><p><b> 具體算法流程</b>&
27、lt;/p><p> 圖3-1 具體算法流程</p><p><b> 具體的程序功能實(shí)現(xiàn)</b></p><p> (1)利用c++引用類型,對(duì)線性表LinkList *L,*N</p><p> 進(jìn)行初始化,并用for循環(huán)將將集合set1[maxsize],set2[maxsize]分別存入線性表L和K。<
28、;/p><p> (2)用sort()函數(shù)對(duì)兩個(gè)線性表里的元素進(jìn)行排序,得到兩個(gè)有序表。</p><p> (3)用dels()函數(shù)分別刪除兩個(gè)有序表里相同元素,僅留一個(gè)。</p><p> (4)用函數(shù)bingji(L,N,M)合并兩個(gè)有序表,得到有序表M,并再次調(diào)用函數(shù)dels(M)刪除有序表里相同的元素,僅留下一個(gè),從而得到集合的并集。</p>
29、<p> (5)調(diào)用函數(shù)jiaoji(M,L,N),進(jìn)行交集運(yùn)算,從而得到一個(gè)新的有序表M,存著兩個(gè)集合的交集。</p><p> (6)利用交集運(yùn)算得到的結(jié)果M進(jìn)行集合差運(yùn)算,調(diào)用函數(shù)chayunsuan(U,M,K),得到兩個(gè)集合差集為有序表K。</p><p> (7)調(diào)用函數(shù)DispList()輸出并集,交集和差集的結(jié)果。 </p><p&g
30、t;<b> (8)用代碼</b></p><p><b> char n;</b></p><p> printf("\n是否退出運(yùn)算?\n");</p><p> scanf("%c",&n);</p><p> if(n=='
31、e')</p><p><b> exit(0);</b></p><p> 判斷是否進(jìn)行下一次運(yùn)輸,如果進(jìn)行下一次運(yùn)算按回車鍵繼續(xù),否則輸入字母“e”退出運(yùn)算。</p><p> (9)最后利用函數(shù)DestroyList()銷毀所有線性表。</p><p> (10)加上頭文件#include <
32、windows.h> 和語(yǔ)句system("color B5")對(duì)界面進(jìn)行顏色設(shè)置,得到自己喜歡的顏色。</p><p><b> 偽碼算法</b></p><p><b> (1)并集運(yùn)算</b></p><p> void bingji(LinkList *L,LinkList *N,L
33、inkList *&M)//并集運(yùn)算</p><p><b> {</b></p><p> LinkList *pa=L->next,*pb=N->next,*r,*s;//時(shí)歸并算法</p><p> M=(LinkList *)malloc(sizeof(LinkList));</p><
34、p><b> r=M;</b></p><p> while(pa!=NULL&&pb!=NULL)//集合合并</p><p><b> {</b></p><p> if(pa->data<pb->data)</p><p><b>
35、 {</b></p><p> s=(LinkList *)malloc(sizeof(LinkList));</p><p> s->data=pa->data;</p><p> r->next=s;r=s;</p><p> pa=pa->next;</p><p>&
36、lt;b> }</b></p><p><b> else</b></p><p><b> {</b></p><p> s=(LinkList *)malloc(sizeof(LinkList));</p><p> s->data=pb->data;&l
37、t;/p><p> r->next=s;r=s;</p><p> pb=pb->next;</p><p><b> }</b></p><p><b> }</b></p><p> while(pa!=NULL)</p><p>
38、;<b> {</b></p><p> s=(LinkList *)malloc(sizeof(LinkList));</p><p> s->data=pa->data;</p><p> r->next=s;r=s;</p><p> pa=pa->next;</p>
39、<p><b> }</b></p><p> while(pb!=NULL)</p><p><b> {</b></p><p> s=(LinkList *)malloc(sizeof(LinkList));</p><p> s->data=pb->data
40、;</p><p> r->next=s;r=s;</p><p> pb=pb->next;</p><p><b> }</b></p><p> r->next=NULL;</p><p> printf("兩個(gè)集合的并集為set1∪set2:&quo
41、t;);</p><p><b> }</b></p><p> void dels(LinkList *&M) //刪除相同元素 僅留一個(gè)</p><p><b> {</b></p><p> LinkList *p=M->next,*q;</p>&
42、lt;p> while(p->next!=NULL)</p><p><b> {</b></p><p> if(p->data==p->next->data)</p><p><b> {</b></p><p> q=p->next;</p&
43、gt;<p> p->next=q->next;</p><p><b> free(q);</b></p><p><b> }</b></p><p><b> else</b></p><p> p=p->next;</p&
44、gt;<p><b> }</b></p><p><b> }</b></p><p><b> 交集運(yùn)算</b></p><p> void jiaoji(LinkList *&M,LinkList *L,LinkList *N)//交集運(yùn)算</p>
45、<p><b> {</b></p><p> LinkList *pa=L->next,*pb=N->next,*q,*r;//以單鏈表M的頭節(jié)點(diǎn)創(chuàng)建一個(gè)空單鏈表</p><p> M->next=NULL;</p><p> r=M;//r指向這個(gè)新鏈表的最后一個(gè)節(jié)點(diǎn)</p&g
46、t;<p> while(pa!=NULL)//以pa掃描單鏈表M的數(shù)據(jù)節(jié)點(diǎn),判斷是否在單鏈表L和N中</p><p><b> {</b></p><p> while(pb!=NULL&&pa->data>pb->data)</p><p> pb=pb->nex
47、t;</p><p> if(pa!=NULL&&pb!=NULL&&pa->data==pb->data)</p><p><b> {</b></p><p> r->next=pa;</p><p><b> r=pa;</b><
48、/p><p> pa=pa->next;</p><p><b> }</b></p><p><b> else</b></p><p><b> {</b></p><p><b> q=pa;</b></p&
49、gt;<p> pa=pa->next;</p><p><b> free(q);</b></p><p><b> }</b></p><p><b> }</b></p><p> r->next=NULL;</p>&l
50、t;p> printf("兩個(gè)集合的交集為set1∩set2=");</p><p><b> }</b></p><p><b> 差集運(yùn)算</b></p><p> void chayunsuan(LinkList *L,LinkList *M,LinkList *&K)//
51、集合差運(yùn)算</p><p><b> {</b></p><p> LinkList *p1=L->next,*p2=M->next,*s,*r;</p><p> K=(LinkList *)malloc(sizeof(LinkList));</p><p><b> r=K;</b
52、></p><p> r->next=NULL;</p><p> while(p1!=NULL)</p><p><b> {</b></p><p> p2=M->next;</p><p> while(p2!=NULL&&p2->data!
53、=p1->data)</p><p> p2=p2->next;</p><p> if(p2==NULL)</p><p><b> {</b></p><p> s=(LinkList *)malloc(sizeof(LinkList));</p><p> s->
54、data=p1->data;</p><p> r->next=s;r=s;</p><p><b> }</b></p><p> p1=p1->next;</p><p><b> }</b></p><p> r->next=NULL;
55、</p><p> printf("兩個(gè)集合的差集為set1 - set2=");</p><p><b> }</b></p><p><b> 調(diào)試分析</b></p><p> 調(diào)試過(guò)程中遇到的問(wèn)題</p><p> (1)由于對(duì)集合的三種
56、運(yùn)算的算法推敲不足,在有序鏈表類型的早期版本未設(shè)置尾指針操作,導(dǎo)致算法低效。</p><p> (2)由于首先沒(méi)設(shè)置數(shù)組最大值,導(dǎo)致數(shù)組不能正確輸入,后來(lái)定義了#define maxsize 100才解決這個(gè)問(wèn)題。</p><p> (3)在子函數(shù)中線性表的創(chuàng)建不正確,導(dǎo)致在輸入數(shù)組后不能正確執(zhí)行,出現(xiàn)下圖結(jié)果,經(jīng)過(guò)多次調(diào)試才得到正確結(jié)果。</p><p>
57、 (4)在進(jìn)行差運(yùn)算的算法設(shè)計(jì)時(shí)出現(xiàn)邏輯上的錯(cuò)誤,導(dǎo)致結(jié)果不正確,集合的首元素未能正確參與運(yùn)算。進(jìn)過(guò)仔細(xì)的推敲才發(fā)現(xiàn)沒(méi)有創(chuàng)建一個(gè)空的頭結(jié)點(diǎn)就直接把pa=pa->next,使第一個(gè)數(shù)據(jù)元素未參加運(yùn)算。</p><p> (5)程序首先只能進(jìn)行一次運(yùn)算就退出了,不能人性化的進(jìn)行多次運(yùn)算,后來(lái)在主函數(shù)中加入for語(yǔ)句,進(jìn)行循環(huán),才能進(jìn)行多次運(yùn)算,并在for語(yǔ)句里加入if條件語(yǔ)句,進(jìn)行是否進(jìn)行下一次運(yùn)算的判斷,使
58、程序更加優(yōu)化。</p><p> (6)首先把刪除相同元素的算法寫(xiě)在交集,并集和差集的算法運(yùn)算里面,使程序代碼冗長(zhǎng),后來(lái)為了使代碼更加簡(jiǎn)潔,就另外單獨(dú)寫(xiě)了一個(gè)刪除相同元素的算法,只要在各個(gè)運(yùn)算中調(diào)用即可。</p><p><b> 算法的時(shí)空分析</b></p><p> (1)void GreatListR(LinkList *&
59、;L,char a[],int n) //尾插法建表</p><p> 本算法的時(shí)間復(fù)雜度為O(n),其中n為單鏈表中數(shù)據(jù)節(jié)點(diǎn)的個(gè)數(shù)。</p><p> void InitList(LinkList *&L)//初始化線性表</p><p> 本算法的時(shí)間復(fù)雜度為O(1)。</p><p> void DestroyLi
60、st(LinkList *&L)</p><p> 本算法的時(shí)間復(fù)雜度為O(n),其中n為單鏈表中數(shù)據(jù)節(jié)點(diǎn)的個(gè)數(shù)。</p><p> void DispList(LinkList *L)//輸出線性表</p><p> 本算法的時(shí)間復(fù)雜度為O(n),其中n為單鏈表中數(shù)據(jù)節(jié)點(diǎn)的個(gè)數(shù)。</p><p> void sort(L
61、inkList *&L)//元素排序</p><p> 本算法的時(shí)間復(fù)雜度為O(n),其中n為單鏈表中數(shù)據(jù)節(jié)點(diǎn)的個(gè)數(shù)。</p><p> void bingji(LinkList *L,LinkList *N,LinkList *&M)//并集運(yùn)算</p><p> 本算法的時(shí)間復(fù)雜度為O(ListLength(L)+ListLength(
62、N))。</p><p> void dels(LinkList *&M) //刪除相同元素 僅留一個(gè)</p><p> 本算法的時(shí)間復(fù)雜度為O(n),其中n為單鏈表中數(shù)據(jù)節(jié)點(diǎn)的個(gè)數(shù)。</p><p> void jiaoji(LinkList *&M,LinkList *L,LinkList *N)//交集運(yùn)算</p>
63、<p> 本算法的時(shí)間復(fù)雜度為O(m+n+p)。</p><p> void chayunsuan(LinkList *L,LinkList *M,LinkList *&K)//集合差運(yùn)算</p><p> 本算法的時(shí)間復(fù)雜度為O(n*n),其中n為單鏈表中數(shù)據(jù)節(jié)點(diǎn)的個(gè)數(shù)。</p><p><b> 用戶使用說(shuō)明</b
64、></p><p> 用戶在使用時(shí)首先輸入要進(jìn)行運(yùn)算的兩個(gè)集合,然后按回車鍵則會(huì)出現(xiàn)運(yùn)算結(jié)果。只能進(jìn)行小寫(xiě)字母a到z的運(yùn)算,如果輸入其他以外的數(shù)字、字母或字符,則不會(huì)在運(yùn)算結(jié)果中顯示!若用戶需要在進(jìn)行下一次運(yùn)算,則按回車鍵繼續(xù),否則按字母“e”退出計(jì)算!</p><p><b> 測(cè)試結(jié)果</b></p><p> 做完一次運(yùn)算后按
65、回車鍵繼續(xù)下一次運(yùn)算</p><p> 圖6-1運(yùn)算完一次進(jìn)行第二次運(yùn)算</p><p> 圖6-2 進(jìn)行多次運(yùn)算</p><p> 做完運(yùn)算后輸入字母“e”退出運(yùn)算</p><p> 圖6-1 運(yùn)算完按字母“e”退出</p><p><b> 總結(jié)</b></p><
66、;p> 數(shù)據(jù)結(jié)構(gòu)是計(jì)算機(jī)程序設(shè)計(jì)的重要理論技術(shù)基礎(chǔ),它不僅是計(jì)算機(jī)科學(xué)的核心課程,而且也已經(jīng)成為其他理工專業(yè)的熱門選修課。隨著高級(jí)語(yǔ)言的發(fā)展,數(shù)據(jù)結(jié)構(gòu)在計(jì)算機(jī)的研究和應(yīng)用中已展現(xiàn)出強(qiáng)大的生命力,它兼顧了諸多高級(jí)語(yǔ)言的特點(diǎn),是一種典型的結(jié)構(gòu)化程序設(shè)計(jì)語(yǔ)言,它處理能力強(qiáng),使用靈活方便,應(yīng)用面廣,具有良好的可移植性。 數(shù)據(jù)結(jié)構(gòu)課設(shè)使我們鞏固了以前的知識(shí)并在此基礎(chǔ)上還對(duì)數(shù)據(jù)結(jié)構(gòu)的特點(diǎn)和算法有了更深的了解,使我們?cè)谶@門課程的實(shí)際應(yīng)用上也有
67、了一個(gè)提高。 首先這兩周的學(xué)習(xí),使我們?cè)陟柟塘嗽械睦碚撝R(shí)上,又培養(yǎng)了靈活運(yùn)用和組合集成所學(xué)過(guò)知識(shí)及技能來(lái)分析、解決實(shí)際問(wèn)題的能力,使我們體會(huì)到自身知識(shí)和能力在實(shí)際中的應(yīng)用和發(fā)揮。其次,它激發(fā)了我們創(chuàng)新意識(shí),開(kāi)發(fā)創(chuàng)造的能力和培養(yǎng)溝通能力。另外,讓我們進(jìn)一步熟悉了數(shù)據(jù)結(jié)構(gòu)的設(shè)計(jì)應(yīng)用。每一處編碼都是在反復(fù)的熟悉數(shù)據(jù)結(jié)構(gòu)的結(jié)構(gòu)特性,及其語(yǔ)法、函數(shù)和程序設(shè)計(jì)思想的過(guò)程,對(duì)我們數(shù)據(jù)結(jié)構(gòu)的學(xué)習(xí)和提高很有益處,并且使我們明白了程序設(shè)計(jì)過(guò)程,如解決一
68、些實(shí)際問(wèn)題,從解決實(shí)際問(wèn)題的角度。 課程設(shè)計(jì)讓我們受益匪淺。我們深深認(rèn)識(shí)到,要學(xué)好一門學(xué)科,沒(méi)有刻苦鉆研的精神是不行的,只有在不斷的嘗試</p><p><b> 附錄</b></p><p><b> 程序源代碼</b></p><p> #include<iostream></p>&l
69、t;p> #include <windows.h> </p><p> using namespace std;</p><p> #define maxsize 100</p><p> typedef struct LNode</p><p><b> {</b></p>&
70、lt;p> char data;</p><p> struct LNode *next;</p><p> }LinkList;</p><p> void GreatListR(LinkList *&L,char a[],int n) //尾插法建表</p><p><b> {</b>&l
71、t;/p><p> LinkList *s,*r;</p><p><b> int i;</b></p><p> L=(LinkList *)malloc(sizeof(LinkList));//創(chuàng)建頭節(jié)點(diǎn)</p><p><b> r=L;</b></p><p&g
72、t; for(i=0;i<n;i++)</p><p><b> {</b></p><p> s=(LinkList *)malloc(sizeof(LinkList));</p><p> s->data=a[i];</p><p> r->next=s;</p><p
73、><b> r=s;</b></p><p><b> }</b></p><p> r->next=NULL;</p><p><b> }</b></p><p> void InitList(LinkList *&L)//初始化線性表&l
74、t;/p><p><b> {</b></p><p> L=(LinkList *)malloc(sizeof(LinkList));</p><p> L->next=NULL;</p><p><b> }</b></p><p> void Destroy
75、List(LinkList *&L)</p><p><b> {</b></p><p> LinkList *pre=L,*p=L->next;</p><p> while(p!=NULL)</p><p><b> {</b></p><p>
76、 free(pre);</p><p><b> pre=p;</b></p><p> p=pre->next;</p><p><b> }</b></p><p> free(pre);</p><p><b> }</b><
77、/p><p> void DispList(LinkList *L)//輸出線性表</p><p><b> {</b></p><p> LinkList *p=L->next;</p><p> while(p!=NULL)</p><p><b> {</b&
78、gt;</p><p> if((p->data>='a')&&(p->data<='z'))</p><p> printf("%c",p->data);</p><p> p=p->next;</p><p><b>
79、 }</b></p><p> printf("\n");</p><p><b> }</b></p><p> void sort(LinkList *&L)//元素排序</p><p><b> {</b></p><p&g
80、t; LinkList *p,*pre,*q;</p><p> p=L->next->next;//p指向L的第2個(gè)數(shù)據(jù)節(jié)點(diǎn)</p><p> L->next->next=NULL;//構(gòu)件只含一個(gè)數(shù)據(jù)節(jié)點(diǎn)的有序表</p><p> while(p!=NULL)</p><p><b> {&
81、lt;/b></p><p> q=p->next;</p><p> while(p!=NULL)</p><p><b> {</b></p><p> q=p->next;//q保存*p節(jié)點(diǎn)沒(méi)后繼節(jié)點(diǎn)的指針</p><p> pre=L;//從有序表開(kāi)頭進(jìn)行
82、比較,pre指向插入*p的前驅(qū)節(jié)點(diǎn)</p><p> while(pre->next!=NULL&&pre->next->data<p->data)</p><p> pre=pre->next;</p><p> p->next=pre->next;</p><p>
83、pre->next=p;</p><p><b> p=q;</b></p><p><b> }</b></p><p><b> }</b></p><p><b> }</b></p><p> void bi
84、ngji(LinkList *L,LinkList *N,LinkList *&M)//并集運(yùn)算</p><p><b> {</b></p><p> LinkList *pa=L->next,*pb=N->next,*r,*s;//時(shí)歸并算法</p><p> M=(LinkList *)malloc(size
85、of(LinkList));</p><p><b> r=M;</b></p><p> while(pa!=NULL&&pb!=NULL)//集合合并</p><p><b> {</b></p><p> if(pa->data<pb->data)&
86、lt;/p><p><b> {</b></p><p> s=(LinkList *)malloc(sizeof(LinkList));</p><p> s->data=pa->data;</p><p> r->next=s;r=s;</p><p> pa=pa-&
87、gt;next;</p><p><b> }</b></p><p><b> else</b></p><p><b> {</b></p><p> s=(LinkList *)malloc(sizeof(LinkList));</p><p&
88、gt; s->data=pb->data;</p><p> r->next=s;r=s;</p><p> pb=pb->next;</p><p><b> }</b></p><p><b> }</b></p><p> while
89、(pa!=NULL)</p><p><b> {</b></p><p> s=(LinkList *)malloc(sizeof(LinkList));</p><p> s->data=pa->data;</p><p> r->next=s;r=s;</p><p&g
90、t; pa=pa->next;</p><p><b> }</b></p><p> while(pb!=NULL)</p><p><b> {</b></p><p> s=(LinkList *)malloc(sizeof(LinkList));</p><
91、;p> s->data=pb->data;</p><p> r->next=s;r=s;</p><p> pb=pb->next;</p><p><b> }</b></p><p> r->next=NULL;</p><p> print
92、f("兩個(gè)集合的并集為set1∪set2:");</p><p><b> }</b></p><p> void dels(LinkList *&M) //刪除相同元素 僅留一個(gè)</p><p><b> {</b></p><p> LinkList
93、*p=M->next,*q;</p><p> while(p->next!=NULL)</p><p><b> {</b></p><p> if(p->data==p->next->data)</p><p><b> {</b></p>&
94、lt;p> q=p->next;</p><p> p->next=q->next;</p><p><b> free(q);</b></p><p><b> }</b></p><p><b> else</b></p>&
95、lt;p> p=p->next;</p><p><b> }</b></p><p><b> }</b></p><p> void jiaoji(LinkList *&M,LinkList *L,LinkList *N)//交集運(yùn)算</p><p><b&
96、gt; {</b></p><p> LinkList *pa=L->next,*pb=N->next,*q,*r;//以單鏈表M的頭節(jié)點(diǎn)創(chuàng)建一個(gè)空單鏈表</p><p> M->next=NULL;</p><p> r=M;//r指向這個(gè)新鏈表的最后一個(gè)節(jié)點(diǎn)</p><p> w
97、hile(pa!=NULL)//以pa掃描單鏈表M的數(shù)據(jù)節(jié)點(diǎn),判斷是否在單鏈表L和N中</p><p><b> {</b></p><p> while(pb!=NULL&&pa->data>pb->data)</p><p> pb=pb->next;</p><
98、;p> if(pa!=NULL&&pb!=NULL&&pa->data==pb->data)</p><p><b> {</b></p><p> r->next=pa;</p><p><b> r=pa;</b></p><p>
99、 pa=pa->next;</p><p><b> }</b></p><p><b> else</b></p><p><b> {</b></p><p><b> q=pa;</b></p><p> p
100、a=pa->next;</p><p><b> free(q);</b></p><p><b> }</b></p><p><b> }</b></p><p> r->next=NULL;</p><p> printf(&
101、quot;兩個(gè)集合的交集為set1∩set2=");</p><p><b> }</b></p><p> void chayunsuan(LinkList *L,LinkList *M,LinkList *&K)//集合差運(yùn)算</p><p><b> {</b></p><
102、;p> LinkList *p1=L->next,*p2=M->next,*s,*r;</p><p> K=(LinkList *)malloc(sizeof(LinkList));</p><p><b> r=K;</b></p><p> r->next=NULL;</p><p>
103、; while(p1!=NULL)</p><p><b> {</b></p><p> p2=M->next;</p><p> while(p2!=NULL&&p2->data!=p1->data)</p><p> p2=p2->next;</p>
104、<p> if(p2==NULL)</p><p><b> {</b></p><p> s=(LinkList *)malloc(sizeof(LinkList));</p><p> s->data=p1->data;</p><p> r->next=s;r=s;</p
105、><p><b> }</b></p><p> p1=p1->next;</p><p><b> }</b></p><p> r->next=NULL;</p><p> printf("兩個(gè)集合的差集為set1 - set2=")
106、;</p><p><b> }</b></p><p> void main()</p><p><b> {</b></p><p> printf("******************************集合的并、交和差運(yùn)算***********************
107、*******\n運(yùn)算完輸入“e”退出運(yùn)算,否則按回車鍵繼續(xù)下次運(yùn)算!\n");</p><p> system("color B5"); </p><p><b> int k;</b></p><p> LinkList *L,*N,*U,*M,*K;</p><p> for(
108、k=0;;k++)</p><p><b> {</b></p><p><b> int i,j;</b></p><p> char set1[maxsize],set2[maxsize];</p><p> printf("請(qǐng)輸入集合set1=");</p
109、><p> for(i=0;i<maxsize;i++)</p><p><b> {</b></p><p> scanf("%c",&set1[i]);</p><p> if(set1[i]=='\n')</p><p><b>
110、; break;</b></p><p><b> }</b></p><p> InitList(L);</p><p> InitList(N);</p><p> GreatListR(L,set1,i);</p><p> GreatListR(U,set1,i);
111、</p><p> sort(U);//元素排序</p><p> dels(U);//刪除相同元素 僅留一個(gè)</p><p> sort(L);//元素排序</p><p> dels(L);//刪除相同元素 僅留一個(gè)</p><p> printf("請(qǐng)輸入集合set2=&quo
112、t;);</p><p> for(j=0;j<maxsize;j++)</p><p><b> {</b></p><p> scanf("%c",&set2[j]);</p><p> if(set2[j]=='\n')</p><p&g
113、t;<b> break;</b></p><p><b> }</b></p><p> GreatListR(N,set2,j);</p><p> sort(N);//元素排序</p><p> dels(N);//刪除相同元素 僅留一個(gè)</p><p&g
114、t; bingji(L,N,M);//集合合并</p><p> dels(M);//刪除相同元素 僅留一個(gè)</p><p> DispList(M); </p><p> jiaoji(M,L,N);//交集運(yùn)算</p><p> DispList(M); </p><p> chayunsu
115、an(U,M,K);//集合差運(yùn)算</p><p> DispList(K);</p><p><b> char n;</b></p><p> printf("\n是否退出運(yùn)算?\n");</p><p> scanf("%c",&n);</p>
116、<p> if(n=='e')</p><p><b> exit(0);</b></p><p><b> }</b></p><p> DestroyList(L);</p><p> DestroyList(N);</p><p>
117、 DestroyList(U);</p><p> DestroyList(M);</p><p> DestroyList(K);</p><p> system("PAUSE");</p><p><b> }</b></p><p><b> 課程設(shè)
溫馨提示
- 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ù)僅提供信息存儲(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)--集合的并、交和差運(yùn)算
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告--集合的并、交和差運(yùn)算
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)--編制一個(gè)演示集合的并、交和差運(yùn)算的程序
- 數(shù)據(jù)庫(kù)課程設(shè)計(jì)---集合交、并、差、對(duì)稱差運(yùn)算
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)集合的交并差運(yùn)算
- java語(yǔ)言課程設(shè)計(jì)--集合的并、交和差運(yùn)算
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告(集合交集并集運(yùn)算)
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)--文章編輯集合運(yùn)算
- 數(shù)據(jù)結(jié)構(gòu)----集合運(yùn)算課程設(shè)計(jì)報(bào)告(c++)
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)-- 稀疏矩陣的運(yùn)算
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)--大整數(shù)的運(yùn)算
- 西安石油大學(xué)數(shù)據(jù)結(jié)構(gòu)數(shù)據(jù)結(jié)構(gòu)程序設(shè)計(jì)報(bào)告--設(shè)計(jì)一個(gè)一元稀疏多項(xiàng)式簡(jiǎn)單計(jì)算器和集合的并,交和差運(yùn)算
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告-長(zhǎng)整數(shù)運(yùn)算
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)-長(zhǎng)整數(shù)加減運(yùn)算
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告---二叉排序樹(shù)實(shí)現(xiàn)集合的運(yùn)算
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)--廣義表運(yùn)算的驗(yàn)算設(shè)計(jì)
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)--數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)----huffman編碼
- 4、集合的交、并、補(bǔ)運(yùn)算
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)--基本稀疏矩陣運(yùn)算的運(yùn)算器
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)--稀疏矩陣運(yùn)算器
評(píng)論
0/150
提交評(píng)論