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

下載本文檔

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

文檔簡介

1、<p><b>  計算機科學(xué)與技術(shù)系</b></p><p><b>  課程設(shè)計報告</b></p><p>  2012~2013學(xué)年第二學(xué)期</p><p><b>  2013年 6月</b></p><p>  題目: 集合的并、交和差運算</p&g

2、t;<p><b>  【問題描述】</b></p><p>  編制一個能演示執(zhí)行集合的并、交和差運算的程序。</p><p><b>  【基本要求】</b></p><p>  (1) 集合的元素限定為小寫字母字符 [‘a(chǎn)’..’z’] 。</p><p>  (2) 演示程序以

3、用戶和計算機的對話方式執(zhí)行。</p><p><b>  【測試數(shù)據(jù)】</b></p><p>  (1)Set1="magazine",Set2="paper",</p><p>  Set1∪Set2="aegimnprz",Setl ∩Set2="ae",Se

4、t1-Set2="gimnz"。</p><p>  (2)Set1= " 012oper4a6tion89",Set2="error data",</p><p>  Set1∪Set2="adeinoprt",Setl ∩Set2="aeort",Set1-Set2="inp&

5、quot;。</p><p><b>  【實現(xiàn)提示】</b></p><p>  以有序鏈表表示集合。</p><p><b>  【選作內(nèi)容】</b></p><p>  (1) 集合的元素判定和子集判定運算。</p><p>  (2) 求集合的補集。</p>

6、;<p>  (3) 集合的混合運算表達式求值。</p><p>  (4) 集合的元素類型推廣到其他類型 , 甚至任意類型。</p><p><b>  實驗內(nèi)容</b></p><p>  實驗題目:編制一個演示集合的并、交和差運算的程序。</p><p><b>  需求分析:</b&

7、gt;</p><p>  1、  本演示程序中,集合的元素限定為小寫字母字符[“a”…”z”]。集合輸入的形式為一個以“回車符“為結(jié)束標志的字符串,串中字符順序不限。</p><p>  2、  演示程序以用戶和計算機的對話方式執(zhí)行,即在計算機終端上顯示“提示信息“之后,由用戶在鍵盤上輸入演示程序中規(guī)定的運算命令;相應(yīng)的輸入數(shù)據(jù)和運算結(jié)果顯示在其后。</p>

8、;<p>  3、  程序執(zhí)行的命令包括:</p><p>  1)  構(gòu)造集合1;2)構(gòu)造在集合2;3)求并集;4)求交集;5)求差集;6)返回;7)結(jié)束?!皹?gòu)造集合1”和“構(gòu)造集合2”時,需以字符的形式鍵入集合元素。</p><p><b>  二、數(shù)據(jù)結(jié)構(gòu)設(shè)計</b></p><p>  為了實現(xiàn)上述程序

9、的功能,應(yīng)以有序鏈表表示集合。為此,需要兩個抽象數(shù)據(jù)類型:有序表和集合。</p><p>  1、有序表的抽象數(shù)據(jù)類型定義為:</p><p>  readdata(pointer head)</p><p>  初始條件:head是以head為頭節(jié)點的空鏈表。</p><p>  操作結(jié)果:生成以head為頭節(jié)點的非空鏈表。</p&g

10、t;<p>  pop(pointer head)</p><p>  初始條件:head是以head為頭節(jié)點的非空鏈表。</p><p>  操作結(jié)果:將以head為頭節(jié)點的鏈表中數(shù)據(jù)逐個輸出。</p><p>  2、集合的抽象數(shù)據(jù)類型定義為:</p><p>  and(pointer head1,pointer head

11、2,pointer head3)</p><p>  初始條件:鏈表head1、head2、head3已存在</p><p>  操作結(jié)果:生成一個由head1和head2的并集構(gòu)成的集合head3。</p><p>  or(pointer head1,pointer head2,pointer head3)</p><p>  初始條件:

12、鏈表head1、head2、head3已存在</p><p>  操作結(jié)果:生成一個由head1和head2的交集構(gòu)成的集合head3。</p><p>  differ(pointer head1,pointer head2,pointer head3)</p><p>  初始條件:鏈表head1、head2、head3已存在</p><p&

13、gt;  操作結(jié)果:生成一個由head1和head2的差集構(gòu)成的集合head3。</p><p>  3、本程序抱含四個模塊:</p><p>  1)  節(jié)點結(jié)構(gòu)單元模塊——定義有序表的節(jié)點結(jié)構(gòu);</p><p>  2)  有序表單元模塊——實現(xiàn)有序表的抽象數(shù)據(jù)類型;</p><p>  3)  集合單元模塊

14、——實現(xiàn)集合獲得抽象數(shù)據(jù)類型;</p><p><b>  4)主程序模塊:</b></p><p>  Void main(){</p><p><b>  初始化;</b></p><p><b>  do{</b></p><p><b>

15、;  接受命令;</b></p><p><b>  處理命令;</b></p><p>  }while(“命令”!=“退出”);</p><p><b>  }</b></p><p><b>  三、算法設(shè)計</b></p><p> 

16、 #include<stdio.h></p><p>  #include<stdlib.h></p><p>  typedef struct LNode//定義結(jié)構(gòu)體類型指針</p><p><b>  {</b></p><p>  char data;</p><p&g

17、t;  struct LNode*next;</p><p>  }*pointer;</p><p>  void readdata(pointer head)//定義輸入集合函數(shù)</p><p><b>  {</b></p><p>  pointer p;</p><p><b>

18、;  char tmp;</b></p><p>  scanf("%c",&tmp);</p><p>  while(tmp!='\n')</p><p><b>  {</b></p><p>  p=(pointer)malloc(sizeof(struct

19、 LNode));</p><p>  p->data=tmp;</p><p>  p->next=head->next;</p><p>  head->next=p;</p><p>  scanf("%c",&tmp);</p><p><b>  

20、}</b></p><p><b>  }</b></p><p>  void pop(pointer head)//定義輸出集合函數(shù)</p><p><b>  {</b></p><p>  pointer p;</p><p>  p=head->n

21、ext;</p><p>  while(p!=NULL)</p><p><b>  {</b></p><p>  printf("%c",p->data);</p><p>  p=p->next;</p><p><b>  }</b>

22、</p><p>  printf("\n");</p><p><b>  }</b></p><p>  void and(pointer head1,pointer head2,pointer head3)//定義集合的并集函數(shù)</p><p><b>  {</b><

23、;/p><p>  pointer p1,p2,p3;</p><p>  p1=head1->next;</p><p>  while(p1!=NULL)</p><p><b>  { </b></p><p>  p3=(pointer)malloc(sizeof(struct LNo

24、de));</p><p>  p3->data=p1->data;</p><p>  p3->next=head3->next;</p><p>  head3->next=p3;</p><p>  p1=p1->next;</p><p><b>  }</b

25、></p><p>  p2=head2->next;</p><p>  while(p2!=NULL)</p><p><b>  {</b></p><p>  p1=head1->next;</p><p>  while((p1!=NULL)&&(p1-

26、>data!=p2->data))</p><p>  p1=p1->next;</p><p>  if (p1==NULL)</p><p><b>  {</b></p><p>  p3=(pointer)malloc(sizeof(struct LNode));</p><

27、p>  p3->data=p2->data;</p><p>  p3->next=head3->next;</p><p>  head3->next=p3;</p><p><b>  }</b></p><p>  p2=p2->next;</p><p

28、><b>  }</b></p><p><b>  }</b></p><p>  void or(pointer head1,pointer head2,pointer head3)//定義集合的交集函數(shù)</p><p><b>  {</b></p><p>  p

29、ointer p1,p2,p3;</p><p>  p1=head1->next;</p><p>  while(p1!=NULL)</p><p><b>  {</b></p><p>  p2=head2->next;</p><p>  while((p2!=NULL)&a

30、mp;&(p2->data!=p1->data))</p><p>  p2=p2->next;</p><p>  if((p2!=NULL)&&(p2->data==p1->data))</p><p><b>  {</b></p><p>  p3=(poin

31、ter)malloc(sizeof(struct LNode));</p><p>  p3->data=p1->data;</p><p>  p3->next=head3->next;</p><p>  head3->next=p3;</p><p><b>  }</b></p

32、><p>  p1=p1->next;</p><p><b>  }</b></p><p><b>  }</b></p><p>  void differ(pointer head1,pointer head2,pointer head3)//定義集合的差集函數(shù)</p>&l

33、t;p><b>  {</b></p><p>  pointer p1,p2,p3;</p><p>  p1=head1->next;</p><p>  while(p1!=NULL)</p><p><b>  {</b></p><p>  p2=hea

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

35、p>  p3=(pointer)malloc(sizeof(struct LNode));</p><p>  p3->data=p1->data;</p><p>  p3->next=head3->next;</p><p>  head3->next=p3;</p><p><b>  }&

36、lt;/b></p><p>  p1=p1->next;</p><p><b>  }</b></p><p><b>  }</b></p><p>  void main()//主函數(shù)</p><p><b>  {</b></

37、p><p><b>  int x;</b></p><p>  printf("(輸入數(shù)據(jù),按回車鍵結(jié)束,第一個集合大于第二個集合)\n");</p><p>  pointer head1,head2,head3;</p><p>  head1=(pointer)malloc(sizeof(stru

38、ct LNode));</p><p>  head1->next=NULL;</p><p>  head2=(pointer)malloc(sizeof(struct LNode));</p><p>  head2->next=NULL;</p><p>  head3=(pointer)malloc(sizeof(stru

39、ct LNode));</p><p>  head3->next=NULL;</p><p>  printf("請輸入集合1:\n");</p><p>  readdata(head1);//調(diào)用輸入集合函數(shù)</p><p>  printf("請輸入集合2:\n");</p>

40、<p>  readdata(head2);//調(diào)用輸入集合函數(shù)</p><p>  A:printf("1.并集 2.交集 3.差集 4.結(jié)束 x.重新運算\n");</p><p><b>  do{</b></p><p>  printf("請選擇序號\n");</p&g

41、t;<p>  scanf("%d",&x);</p><p><b>  switch(x)</b></p><p><b>  {</b></p><p><b>  case 1:</b></p><p>  printf(&qu

42、ot;兩集合的并是\n");</p><p>  and(head1,head2,head3);//調(diào)用并集函數(shù)</p><p>  pop(head3);</p><p>  head3->next=NULL;</p><p><b>  break;</b></p><p>&

43、lt;b>  case 2:</b></p><p>  printf("兩集合的交是\n");</p><p>  or(head1,head2,head3);//調(diào)用交集函數(shù)</p><p>  pop(head3);</p><p>  head3->next=NULL;</p>

44、<p><b>  break;</b></p><p><b>  case 3:</b></p><p>  printf("兩集合的差是\n");</p><p>  differ(head1,head2,head3);//調(diào)用差集函數(shù)</p><p>  po

45、p(head3);</p><p>  head3->next=NULL;</p><p><b>  break; </b></p><p>  case 4:break;</p><p>  default:goto A;</p><p><b>  }</b>&l

46、t;/p><p>  }while(x!=4);</p><p><b>  }</b></p><p>  四、測試數(shù)據(jù)及程序運行情況 </p><p><b>  運行時提示輸入:</b></p><p><b>  輸入集合1:asd</b></

47、p><p><b>  輸入集合2:asf</b></p><p>  根據(jù)提示輸入運算類型:1.并集 2.交集 3.差集 4.結(jié)束 x.重新運算 </p><p>  輸入1,輸出”fasd”</p><p>  輸入2,輸出”as”</p><p><b>  輸入3,輸出”d

48、”</b></p><p>  輸入4,輸出”press any key to continue”(結(jié)束)</p><p>  輸入其他數(shù),輸出” 1.并集 2.交集 3.差集 4.結(jié)束 x.重新運算”(重新選擇運算類型)</p><p>  下面是運行時的界面(附圖):</p><p><b>  五、參考資料

49、</b></p><p>  [1] 王昆侖,李紅. 數(shù)據(jù)結(jié)構(gòu)與算法. 北京:中國鐵道出版社,2006年5月。</p><p>  [2] 陳朔鷹,《C語言程序設(shè)計習(xí)題集(第二版)》,人民郵電出版社,2003.2</p><p>  [3] 嚴蔚敏 吳偉民. 《數(shù)據(jù)結(jié)構(gòu)(C語言版) 》. 北京: 清華大學(xué)出版社,2009</p><p

溫馨提示

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

最新文檔

評論

0/150

提交評論