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

下載本文檔

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

文檔簡介

1、<p>  課 程 設(shè) 計 報 告</p><p>  課程名稱 數(shù)據(jù)結(jié)構(gòu) </p><p>  課題名稱 集合的并、交和差運算 </p><p>  專 業(yè) 通信工程 </p><p>  班 級

2、 通信1101 </p><p>  學(xué) 號 </p><p>  姓 名 </p><p>  指導(dǎo)教師 </p><p&

3、gt;  2013 年6月29日</p><p>  課 程 設(shè) 計 任 務(wù) 書</p><p>  課程名稱 數(shù)據(jù)結(jié)構(gòu) </p><p>  課 題 集合的并、交和差運算 </p><p>  專業(yè)班級 </p><p> 

4、 學(xué)生姓名 </p><p>  學(xué) 號 </p><p>  指導(dǎo)老師 </p><p>  審 批 </p><p>  任務(wù)書下達(dá)日期 2013 年

5、6 月 23 日</p><p>  任 務(wù) 完成日期 2013 年 6 月 29 日</p><p><b>  目 錄</b></p><p>  一.需求分析..........................................................................................

6、.....................................1</p><p>  1.問題描述........................................................................................................... ............ .........1</p><p> 

7、 2.基本要求...................................................................................................................... ...........1</p><p>  3.測試數(shù)據(jù)............................. .......................

8、.............................................................................1</p><p>  4.實現(xiàn)提示........................................................................................ ........................

9、.................1</p><p>  二.概要設(shè)計.............................................................................................................................1</p><p>  數(shù)據(jù)類型定義..................

10、........................................................................................................1</p><p>  集合的定義.......................................................................................

11、.......................................1</p><p>  基本操作..................................................................................................................................1</p><p> 

12、 調(diào)用關(guān)系....................... ............................ ....................................................................... .....2</p><p>  三.詳細(xì)設(shè)計.......................................................

13、......................................................................3</p><p>  具體算法流程........................................................................................................................

14、.4</p><p>  具體的程序功能實現(xiàn)..............................................................................................................5</p><p>  偽碼算法................................................

15、.................................................................................5</p><p>  調(diào)試分析...............................................................................................................

16、..............9</p><p>  1.調(diào)試過程中遇到的問題................................................................................................. ...... 9 </p><p>  2.算法的時空分析...............................

17、....................................................................................10</p><p>  3.經(jīng)驗和體會........................................................................................................

18、...................10</p><p>  五.用戶使用說明.....................................................................................................................11</p><p>  六.測試結(jié)果....................

19、.........................................................................................................11</p><p>  做完一次運算后按回車鍵繼續(xù)下一次運算.......................................................................1

20、1</p><p>  做完運算后輸入字母“e”退出運算..................................................................................12</p><p>  附錄.......................................................................

21、............................................................13</p><p>  程序源代碼...................................... ........................................................................... .....13</p&g

22、t;<p><b>  一.需求分析</b></p><p><b>  1.問題描述</b></p><p>  編制一個能演示執(zhí)行集合的并、交和差運算的程序。</p><p><b>  2.基本要求</b></p><p>  (1) 集合的元素限定為小寫字

23、母字符 [‘a(chǎn)’..’z’] 。</p><p>  (2) 演示程序以用戶和計算機(jī)的對話方式執(zhí)行。</p><p><b>  3.測試數(shù)據(jù)</b></p><p>  (1)Set1="magazine",Set2="paper",</p><p>  Set1∪Set2=&q

24、uot;aegimnprz",Setl ∩Set2="ae",Set1-Set2="gimnz"。</p><p>  (2)Set1= " 012oper4a6tion89",Set2="error data",</p><p>  Set1∪Set2="adeinoprt",S

25、etl ∩Set2="aeort",Set1-Set2="inp"。</p><p><b>  4.實現(xiàn)提示</b></p><p>  以有序鏈表表示集合。</p><p><b>  二.概要設(shè)計</b></p><p>  為實現(xiàn)上述程序功能,應(yīng)以有序

26、鏈表表示集合。為此,需要兩個抽象數(shù)據(jù)類型:有序表和集合。</p><p>  有序表的抽象數(shù)據(jù)類型定義為:</p><p>  typedef struct LNode</p><p><b>  {</b></p><p>  char data;</p><p>  struct LNode

27、*next;</p><p>  }LinkList;</p><p><b>  2集合的定義為:</b></p><p>  char set1[maxsize],set2[maxsize];</p><p><b>  3.基本操作</b></p><p>  voi

28、d GreatListR(LinkList *&L,char a[],int n) //尾插法建表</p><p>  void InitList(LinkList *&L)//初始化線性表</p><p>  void DestroyList(LinkList *&L)//銷毀線性表</p><p>  void DispList(

29、LinkList *L)//輸出線性表</p><p>  void sort(LinkList *&L)//元素排序</p><p>  void bingji(LinkList *L,LinkList *N,LinkList *&M)//并集運算</p><p>  void dels(LinkList *&M) //刪除相

30、同元素 僅留一個</p><p>  void jiaoji(LinkList *&M,LinkList *L,LinkList *N)//交集運算</p><p>  void chayunsuan(LinkList *L,LinkList *M,LinkList *&K)//集合差運算</p><p>  int main()//為

31、設(shè)計程序主頁面的函數(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>  GreatListR(U,set

32、1,i);</p><p>  sort(U);//元素排序</p><p>  dels(U);//刪除相同元素 僅留一個</p><p>  sort(L);//元素排序</p><p>  dels(L);//刪除相同元素 僅留一個</p><p>  printf("請輸入集合set2

33、=");</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>&l

34、t;p><b>  break;</b></p><p><b>  }</b></p><p>  GreatListR(N,set2,j);</p><p>  sort(N);//元素排序</p><p>  dels(N);//刪除相同元素 僅留一個</p>&l

35、t;p>  bingji(L,N,M);//集合合并</p><p>  dels(M);//刪除相同元素 僅留一個</p><p>  DispList(M); </p><p>  jiaoji(M,L,N);//交集運算</p><p>  DispList(M); </p><p>  cha

36、yunsuan(U,M,K);//集合差運算</p><p>  DispList(K);</p><p><b>  char n;</b></p><p>  printf("\n是否退出運算?\n");</p><p>  scanf("%c",&n);</p

37、><p>  if(n=='e')</p><p><b>  exit(0);</b></p><p>  DestroyList(L);</p><p>  DestroyList(N);</p><p>  DestroyList(U);</p><p>

38、  DestroyList(M);</p><p>  DestroyList(K);</p><p>  system("PAUSE");</p><p><b>  三. 詳細(xì)設(shè)計</b></p><p>  1.具體算法流程圖為:2.具體的程序功能實現(xiàn)</p><p>

39、  (1)利用c++引用類型,對線性表LinkList *L,*N</p><p>  進(jìn)行初始化,并用for循環(huán)將將集合set1[maxsize],set2[maxsize]分別存入線性表L和K。</p><p>  (2)用sort()函數(shù)對兩個線性表里的元素進(jìn)行排序,得到兩個有序表。</p><p>  (3)用dels()函數(shù)分別刪除兩個有序表里相同元素,

40、僅留一個。</p><p>  (4)用函數(shù)bingji(L,N,M)合并兩個有序表,得到有序表M,并再次調(diào)用函數(shù)dels(M)刪除有序表里相同的元素,僅留下一個,從而得到集合的并集。</p><p>  (5)調(diào)用函數(shù)jiaoji(M,L,N),進(jìn)行交集運算,從而得到一個新的有序表M,存著兩個集合的交集。</p><p>  (6)利用交集運算得到的結(jié)果M進(jìn)行集合

41、差運算,調(diào)用函數(shù)chayunsuan(U,M,K),得到兩個集合差集為有序表K。</p><p>  (7)調(diào)用函數(shù)DispList()輸出并集,交集和差集的結(jié)果。 </p><p><b>  (8)用代碼</b></p><p><b>  char n;</b></p><p>  pri

42、ntf("\n是否退出運算?\n");</p><p>  scanf("%c",&n);</p><p>  if(n=='e')</p><p><b>  exit(0);</b></p><p>  判斷是否進(jìn)行下一次運輸,如果進(jìn)行下一次運算按回車鍵

43、繼續(xù),否則輸入字母“e”退出運算。</p><p>  (9)最后利用函數(shù)DestroyList()銷毀所有線性表。</p><p>  (10)加上頭文件#include <windows.h> 和語句system("color B5")對界面進(jìn)行顏色設(shè)置,得到自己喜歡的顏色。</p><p><b>  3.偽碼算法&l

44、t;/b></p><p><b>  (1)并集運算</b></p><p>  void bingji(LinkList *L,LinkList *N,LinkList *&M)//并集運算</p><p><b>  {</b></p><p>  LinkList *pa=L

45、->next,*pb=N->next,*r,*s;//時歸并算法</p><p>  M=(LinkList *)malloc(sizeof(LinkList));</p><p><b>  r=M;</b></p><p>  while(pa!=NULL&&pb!=NULL)//集合合并</p>

46、<p><b>  {</b></p><p>  if(pa->data<pb->data)</p><p><b>  {</b></p><p>  s=(LinkList *)malloc(sizeof(LinkList));</p><p>  s->

47、data=pa->data;</p><p>  r->next=s;r=s;</p><p>  pa=pa->next;</p><p><b>  }</b></p><p><b>  else</b></p><p><b>  {<

48、;/b></p><p>  s=(LinkList *)malloc(sizeof(LinkList));</p><p>  s->data=pb->data;</p><p>  r->next=s;r=s;</p><p>  pb=pb->next;</p><p><b&

49、gt;  }</b></p><p><b>  }</b></p><p>  while(pa!=NULL)</p><p><b>  {</b></p><p>  s=(LinkList *)malloc(sizeof(LinkList));</p><p&

50、gt;  s->data=pa->data;</p><p>  r->next=s;r=s;</p><p>  pa=pa->next;</p><p><b>  }</b></p><p>  while(pb!=NULL)</p><p><b>  {

51、</b></p><p>  s=(LinkList *)malloc(sizeof(LinkList));</p><p>  s->data=pb->data;</p><p>  r->next=s;r=s;</p><p>  pb=pb->next;</p><p><

52、;b>  }</b></p><p>  r->next=NULL;</p><p>  printf("兩個集合的并集為set1∪set2:");</p><p><b>  }</b></p><p>  void dels(LinkList *&M) //

53、刪除相同元素 僅留一個</p><p><b>  {</b></p><p>  LinkList *p=M->next,*q;</p><p>  while(p->next!=NULL)</p><p><b>  {</b></p><p>  if(p

54、->data==p->next->data)</p><p><b>  {</b></p><p>  q=p->next;</p><p>  p->next=q->next;</p><p><b>  free(q);</b></p><

55、;p><b>  }</b></p><p><b>  else</b></p><p>  p=p->next;</p><p><b>  }</b></p><p><b>  }</b></p><p><

56、;b>  交集運算</b></p><p>  void jiaoji(LinkList *&M,LinkList *L,LinkList *N)//交集運算</p><p><b>  {</b></p><p>  LinkList *pa=L->next,*pb=N->next,*q,*r;//

57、以單鏈表M的頭節(jié)點創(chuàng)建一個空單鏈表</p><p>  M->next=NULL;</p><p>  r=M;//r指向這個新鏈表的最后一個節(jié)點</p><p>  while(pa!=NULL)//以pa掃描單鏈表M的數(shù)據(jù)節(jié)點,判斷是否在單鏈表L和N中</p><p><b>  {<

58、;/b></p><p>  while(pb!=NULL&&pa->data>pb->data)</p><p>  pb=pb->next;</p><p>  if(pa!=NULL&&pb!=NULL&&pa->data==pb->data)</p>&l

59、t;p><b>  {</b></p><p>  r->next=pa;</p><p><b>  r=pa;</b></p><p>  pa=pa->next;</p><p><b>  }</b></p><p><b

60、>  else</b></p><p><b>  {</b></p><p><b>  q=pa;</b></p><p>  pa=pa->next;</p><p><b>  free(q);</b></p><p>&

61、lt;b>  }</b></p><p><b>  }</b></p><p>  r->next=NULL;</p><p>  printf("兩個集合的交集為set1∩set2=");</p><p><b>  }</b></p>

62、<p><b>  差集運算</b></p><p>  void chayunsuan(LinkList *L,LinkList *M,LinkList *&K)//集合差運算</p><p><b>  {</b></p><p>  LinkList *p1=L->next,*p2=M-&g

63、t;next,*s,*r;</p><p>  K=(LinkList *)malloc(sizeof(LinkList));</p><p><b>  r=K;</b></p><p>  r->next=NULL;</p><p>  while(p1!=NULL)</p><p>&

64、lt;b>  {</b></p><p>  p2=M->next;</p><p>  while(p2!=NULL&&p2->data!=p1->data)</p><p>  p2=p2->next;</p><p>  if(p2==NULL)</p><p

65、><b>  {</b></p><p>  s=(LinkList *)malloc(sizeof(LinkList));</p><p>  s->data=p1->data;</p><p>  r->next=s;r=s;</p><p><b>  }</b><

66、;/p><p>  p1=p1->next;</p><p><b>  }</b></p><p>  r->next=NULL;</p><p>  printf("兩個集合的差集為set1 - set2=");</p><p><b>  }</b

67、></p><p><b>  四.調(diào)試分析</b></p><p>  1.調(diào)試過程中遇到的問題</p><p>  (1)由于對集合的三種運算的算法推敲不足,在有序鏈表類型的早期版本未設(shè)置尾指針操作,導(dǎo)致算法低效。</p><p>  (2)由于首先沒設(shè)置數(shù)組最大值,導(dǎo)致數(shù)組不能正確輸入,后來定義了#defi

68、ne maxsize 100才解決這個問題。</p><p>  (3)在子函數(shù)中線性表的創(chuàng)建不正確,導(dǎo)致在輸入數(shù)組后不能正確執(zhí)行,出現(xiàn)下圖結(jié)果,經(jīng)過多次調(diào)試才得到正確結(jié)果。</p><p>  (4)在進(jìn)行差運算的算法設(shè)計時出現(xiàn)邏輯上的錯誤,導(dǎo)致結(jié)果不正確,集合的首元素未能正確參與運算。進(jìn)過仔細(xì)的推敲才發(fā)現(xiàn)沒有創(chuàng)建一個空的頭結(jié)點就直接把pa=pa->next,使第一個數(shù)據(jù)元素未參加

69、運算。</p><p>  (5)程序首先只能進(jìn)行一次運算就退出了,不能人性化的進(jìn)行多次運算,后來在主函數(shù)中加入for語句,進(jìn)行循環(huán),才能進(jìn)行多次運算,并在for語句里加入if條件語句,進(jìn)行是否進(jìn)行下一次運算的判斷,使程序更加優(yōu)化。</p><p>  (6)首先把刪除相同元素的算法寫在交集,并集和差集的算法運算里面,使程序代碼冗長,后來為了使代碼更加簡潔,就另外單獨寫了一個刪除相同元素的

70、算法,只要在各個運算中調(diào)用即可。</p><p><b>  2.算法的時空分析</b></p><p>  (1)void GreatListR(LinkList *&L,char a[],int n) //尾插法建表</p><p>  本算法的時間復(fù)雜度為O(n),其中n為單鏈表中數(shù)據(jù)節(jié)點的個數(shù)。</p><

71、p>  void InitList(LinkList *&L)//初始化線性表</p><p>  本算法的時間復(fù)雜度為O(1)。</p><p>  void DestroyList(LinkList *&L)</p><p>  本算法的時間復(fù)雜度為O(n),其中n為單鏈表中數(shù)據(jù)節(jié)點的個數(shù)。</p><p>  

72、void DispList(LinkList *L)//輸出線性表</p><p>  本算法的時間復(fù)雜度為O(n),其中n為單鏈表中數(shù)據(jù)節(jié)點的個數(shù)。</p><p>  void sort(LinkList *&L)//元素排序</p><p>  本算法的時間復(fù)雜度為O(n),其中n為單鏈表中數(shù)據(jù)節(jié)點的個數(shù)。</p><p>

73、;  void bingji(LinkList *L,LinkList *N,LinkList *&M)//并集運算</p><p>  本算法的時間復(fù)雜度為O(ListLength(L)+ListLength(N))。</p><p>  void dels(LinkList *&M) //刪除相同元素 僅留一個</p><p>  本算

74、法的時間復(fù)雜度為O(n),其中n為單鏈表中數(shù)據(jù)節(jié)點的個數(shù)。</p><p>  void jiaoji(LinkList *&M,LinkList *L,LinkList *N)//交集運算</p><p>  本算法的時間復(fù)雜度為O(m+n+p)。</p><p>  void chayunsuan(LinkList *L,LinkList *M,Li

75、nkList *&K)//集合差運算</p><p>  本算法的時間復(fù)雜度為O(n*n),其中n為單鏈表中數(shù)據(jù)節(jié)點的個數(shù)。</p><p><b>  經(jīng)驗和體會</b></p><p>  數(shù)據(jù)結(jié)構(gòu)是計算機(jī)程序設(shè)計的重要理論技術(shù)基礎(chǔ),它不僅是計算機(jī)科學(xué)的核心課程,而且也已經(jīng)成為其他理工專業(yè)的熱門選修課。隨著高級語言的發(fā)展,數(shù)據(jù)結(jié)構(gòu)

76、在計算機(jī)的研究和應(yīng)用中已展現(xiàn)出強(qiáng)大的生命力,它兼顧了諸多高級語言的特點,是一種典型的結(jié)構(gòu)化程序設(shè)計語言,它處理能力強(qiáng),使用靈活方便,應(yīng)用面廣,具有良好的可移植性。 數(shù)據(jù)結(jié)構(gòu)課設(shè)使我們鞏固了以前的知識并在此基礎(chǔ)上還對數(shù)據(jù)結(jié)構(gòu)的特點和算法有了更深的了解,使我們在這門課程的實際應(yīng)用上也有了一個提高。 首先這兩周的學(xué)習(xí),使我們在鞏固了原有的理論知識上,又培養(yǎng)了靈活運用和組合集成所學(xué)過知識及技能來分析、解決實際問題的能力,使我們體會到自身知識和能

77、力在實際中的應(yīng)用和發(fā)揮。其次,它激發(fā)了我們創(chuàng)新意識,開發(fā)創(chuàng)造的能力和培養(yǎng)溝通能力。另外,讓我們進(jìn)一步熟悉了數(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è)計過程,如解決一些實際問題,從解決實際問題的角度。 課程設(shè)計讓我們受益匪淺。我們深深認(rèn)識到,要學(xué)好一門學(xué)科,沒有刻苦鉆研的精神是不行的,只有在不斷的嘗試</p>

78、<p><b>  五.用戶使用說明</b></p><p>  用戶在使用時首先輸入要進(jìn)行運算的兩個集合,然后按回車鍵則會出現(xiàn)運算結(jié)果。只能進(jìn)行小寫字母a到z的運算,如果輸入其他以外的數(shù)字、字母或字符,則不會在運算結(jié)果中顯示!若用戶需要在進(jìn)行下一次運算,則按回車鍵繼續(xù),否則按字母“e”退出計算!</p><p><b>  六. 測試結(jié)果<

79、;/b></p><p>  1.做完一次運算后按回車鍵繼續(xù)下一次運算:</p><p>  2.做完運算后輸入字母“e”退出運算</p><p><b>  七.附錄</b></p><p><b>  程序源代碼:</b></p><p>  #include<

80、;iostream></p><p>  #include <windows.h> </p><p>  using namespace std;</p><p>  #define maxsize 100</p><p>  typedef struct LNode</p><p><b>

81、;  {</b></p><p>  char data;</p><p>  struct LNode *next;</p><p>  }LinkList;</p><p>  void GreatListR(LinkList *&L,char a[],int n) //尾插法建表</p><p&

82、gt;<b>  {</b></p><p>  LinkList *s,*r;</p><p><b>  int i;</b></p><p>  L=(LinkList *)malloc(sizeof(LinkList));//創(chuàng)建頭節(jié)點</p><p><b>  r=L;&l

83、t;/b></p><p>  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-&

84、gt;next=s;</p><p><b>  r=s;</b></p><p><b>  }</b></p><p>  r->next=NULL;</p><p><b>  }</b></p><p>  void InitList(Li

85、nkList *&L)//初始化線性表</p><p><b>  {</b></p><p>  L=(LinkList *)malloc(sizeof(LinkList));</p><p>  L->next=NULL;</p><p><b>  }</b></p&g

86、t;<p>  void DestroyList(LinkList *&L)</p><p><b>  {</b></p><p>  LinkList *pre=L,*p=L->next;</p><p>  while(p!=NULL)</p><p><b>  {</

87、b></p><p>  free(pre);</p><p><b>  pre=p;</b></p><p>  p=pre->next;</p><p><b>  }</b></p><p>  free(pre);</p><p>

88、;<b>  }</b></p><p>  void DispList(LinkList *L)//輸出線性表</p><p><b>  {</b></p><p>  LinkList *p=L->next;</p><p>  while(p!=NULL)</p>&

89、lt;p><b>  {</b></p><p>  if((p->data>='a')&&(p->data<='z'))</p><p>  printf("%c",p->data);</p><p>  p=p->next;<

90、/p><p><b>  }</b></p><p>  printf("\n");</p><p><b>  }</b></p><p>  void sort(LinkList *&L)//元素排序</p><p><b>  {&l

91、t;/b></p><p>  LinkList *p,*pre,*q;</p><p>  p=L->next->next;//p指向L的第2個數(shù)據(jù)節(jié)點</p><p>  L->next->next=NULL;//構(gòu)件只含一個數(shù)據(jù)節(jié)點的有序表</p><p>  while(p!=NULL)</p&

92、gt;<p><b>  {</b></p><p>  q=p->next;</p><p>  while(p!=NULL)</p><p><b>  {</b></p><p>  q=p->next;//q保存*p節(jié)點沒后繼節(jié)點的指針</p>&l

93、t;p>  pre=L;//從有序表開頭進(jìn)行比較,pre指向插入*p的前驅(qū)節(jié)點</p><p>  while(pre->next!=NULL&&pre->next->data<p->data)</p><p>  pre=pre->next;</p><p>  p->next=pre->n

94、ext;</p><p>  pre->next=p;</p><p><b>  p=q;</b></p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b><

95、;/p><p>  void bingji(LinkList *L,LinkList *N,LinkList *&M)//并集運算</p><p><b>  {</b></p><p>  LinkList *pa=L->next,*pb=N->next,*r,*s;//時歸并算法</p><p>

96、  M=(LinkList *)malloc(sizeof(LinkList));</p><p><b>  r=M;</b></p><p>  while(pa!=NULL&&pb!=NULL)//集合合并</p><p><b>  {</b></p><p>  if(p

97、a->data<pb->data)</p><p><b>  {</b></p><p>  s=(LinkList *)malloc(sizeof(LinkList));</p><p>  s->data=pa->data;</p><p>  r->next=s;r=s;<

98、;/p><p>  pa=pa->next;</p><p><b>  }</b></p><p><b>  else</b></p><p><b>  {</b></p><p>  s=(LinkList *)malloc(sizeof(Li

99、nkList));</p><p>  s->data=pb->data;</p><p>  r->next=s;r=s;</p><p>  pb=pb->next;</p><p><b>  }</b></p><p><b>  }</b>&

100、lt;/p><p>  while(pa!=NULL)</p><p><b>  {</b></p><p>  s=(LinkList *)malloc(sizeof(LinkList));</p><p>  s->data=pa->data;</p><p>  r->nex

101、t=s;r=s;</p><p>  pa=pa->next;</p><p><b>  }</b></p><p>  while(pb!=NULL)</p><p><b>  {</b></p><p>  s=(LinkList *)malloc(sizeof

102、(LinkList));</p><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;&

103、lt;/p><p>  printf("兩個集合的并集為set1∪set2:");</p><p><b>  }</b></p><p>  void dels(LinkList *&M) //刪除相同元素 僅留一個</p><p><b>  {</b></

104、p><p>  LinkList *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>

105、;  {</b></p><p>  q=p->next;</p><p>  p->next=q->next;</p><p><b>  free(q);</b></p><p><b>  }</b></p><p><b>  

106、else</b></p><p>  p=p->next;</p><p><b>  }</b></p><p><b>  }</b></p><p>  void jiaoji(LinkList *&M,LinkList *L,LinkList *N)//交集運算

107、</p><p><b>  {</b></p><p>  LinkList *pa=L->next,*pb=N->next,*q,*r;//以單鏈表M的頭節(jié)點創(chuàng)建一個空單鏈表</p><p>  M->next=NULL;</p><p>  r=M;//r指向這個新鏈表的最后一

108、個節(jié)點</p><p>  while(pa!=NULL)//以pa掃描單鏈表M的數(shù)據(jù)節(jié)點,判斷是否在單鏈表L和N中</p><p><b>  {</b></p><p>  while(pb!=NULL&&pa->data>pb->data)</p><p>  pb=

109、pb->next;</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;<

110、/b></p><p>  pa=pa->next;</p><p><b>  }</b></p><p><b>  else</b></p><p><b>  {</b></p><p><b>  q=pa;</b&

111、gt;</p><p>  pa=pa->next;</p><p><b>  free(q);</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  r->next=NULL;<

112、/p><p>  printf("兩個集合的交集為set1∩set2=");</p><p><b>  }</b></p><p>  void chayunsuan(LinkList *L,LinkList *M,LinkList *&K)//集合差運算</p><p><b> 

113、 {</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></p><p>  r->nex

114、t=NULL;</p><p>  while(p1!=NULL)</p><p><b>  {</b></p><p>  p2=M->next;</p><p>  while(p2!=NULL&&p2->data!=p1->data)</p><p>  

115、p2=p2->next;</p><p>  if(p2==NULL)</p><p><b>  {</b></p><p>  s=(LinkList *)malloc(sizeof(LinkList));</p><p>  s->data=p1->data;</p><p&g

116、t;  r->next=s;r=s;</p><p><b>  }</b></p><p>  p1=p1->next;</p><p><b>  }</b></p><p>  r->next=NULL;</p><p>  printf("

117、兩個集合的差集為set1 - set2=");</p><p><b>  }</b></p><p>  void main()</p><p><b>  {</b></p><p>  printf("******************************集合的并、交

118、和差運算******************************\n運算完輸入“e”退出運算,否則按回車鍵繼續(xù)下次運算!\n");</p><p>  system("color B5"); </p><p><b>  int k;</b></p><p>  LinkList *L,*N,*U,*M,*K;

119、</p><p>  for(k=0;;k++)</p><p><b>  {</b></p><p><b>  int i,j;</b></p><p>  char set1[maxsize],set2[maxsize];</p><p>  printf(&qu

120、ot;請輸入集合set1=");</p><p>  for(i=0;i<maxsize;i++)</p><p><b>  {</b></p><p>  scanf("%c",&set1[i]);</p><p>  if(set1[i]=='\n')&l

121、t;/p><p><b>  break;</b></p><p><b>  }</b></p><p>  InitList(L);</p><p>  InitList(N);</p><p>  GreatListR(L,set1,i);</p><p

122、>  GreatListR(U,set1,i);</p><p>  sort(U);//元素排序</p><p>  dels(U);//刪除相同元素 僅留一個</p><p>  sort(L);//元素排序</p><p>  dels(L);//刪除相同元素 僅留一個</p><p>  

123、printf("請輸入集合set2=");</p><p>  for(j=0;j<maxsize;j++)</p><p><b>  {</b></p><p>  scanf("%c",&set2[j]);</p><p>  if(set2[j]=='

124、\n')</p><p><b>  break;</b></p><p><b>  }</b></p><p>  GreatListR(N,set2,j);</p><p>  sort(N);//元素排序</p><p>  dels(N);//刪除相同

125、元素 僅留一個</p><p>  bingji(L,N,M);//集合合并</p><p>  dels(M);//刪除相同元素 僅留一個</p><p>  DispList(M); </p><p>  jiaoji(M,L,N);//交集運算</p><p>  DispList(M); <

126、/p><p>  chayunsuan(U,M,K);//集合差運算</p><p>  DispList(K);</p><p><b>  char n;</b></p><p>  printf("\n是否退出運算?\n");</p><p>  scanf("%

127、c",&n);</p><p>  if(n=='e')</p><p><b>  exit(0);</b></p><p><b>  }</b></p><p>  DestroyList(L);</p><p>  DestroyLi

128、st(N);</p><p>  DestroyList(U);</p><p>  DestroyList(M);</p><p>  DestroyList(K);</p><p>  system("PAUSE");</p><p><b>  }</b></p&g

溫馨提示

  • 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. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論