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

下載本文檔

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

文檔簡介

1、集合的并、交和差運算實習(xí)報告題目:編制一個演示集合的并、交和差運算的程序班級:10092711姓名:魏洲學(xué)號:10927128完成日期:2012.4一、需求分析 1.本演示程序中,集合的元素限制在小寫字母a-z之間。集合的大小不限制,集合的輸入形式為一個以“回車符”為結(jié)束標志的字符串,串中字符順序不限,且允許出現(xiàn)重復(fù)字符或非法字符,程序運用時自動過濾去,輸出的運算結(jié)果中將不含重復(fù)字符和非法字符。 2.演示程序以用戶和計算機對話的形式進行,即在計算機終端中顯示提示信息之后,有用戶自行選擇下一步命令,相應(yīng)輸入數(shù)據(jù)和運算結(jié)果在其后顯示。 3.程序的執(zhí)行命令有:1)選擇操作 2)任意鍵清屏 4.數(shù)據(jù)測

2、試 (1) set1=”magazine”, set2=paper”, set1set2=”aegimnprz”,set1set2=”ae”,set1-set2=”gimnz”; (2) set1=”012oper4a6tion89”,set2=”error data”,set1set2=”adeinoprt”,set1set2=”aeort”, set1-set2=”inp”.二、概要設(shè)計為實現(xiàn)上述功能,需要順序表這個抽象數(shù)據(jù)類型。1.順序表抽象數(shù)據(jù)類型定義adt sqlist 數(shù)據(jù)對象:d=ai|aielemset,i=1,2,3,n,n=0 數(shù)據(jù)關(guān)系:r1=|ai-1,aid,i=2,

3、n 基本操作: initlist(&l) 操作結(jié)果:構(gòu)造一個空的順序表l。 listlength(l) 初始條件:順序表l已存在。 操作結(jié)果:返回l中的元素個數(shù)。 listinsert_sq(&l, i, e) 初始條件:順序表l已存在。 操作結(jié)果:在l中第i個元素前面插入元素e。 creatsqlist(&l, a,n) 初始條件:順序表l已存在。 操作結(jié)果:將數(shù)組an每個元素賦給順序表l。 getelem(l, i, &e) 初始條件:順序表l已存在。操作結(jié)果:返回l中第i個元素的值 locateelem_sq(l, e, status (*compare)() 初始條件:順序表l已存在。

4、 操作結(jié)果:依次遍歷l中每個元素帶入函數(shù)。 listdelete(&l,i, &e) 初始條件:順序表l已存在。 操作結(jié)果:刪除順序表中第i個元素。 outputlist(&l)初始條件:順序表l已存在。 操作結(jié)果:輸出順序表的每個元素值。adt sqlist三、詳細設(shè)計/ 程序的頭文件#include#include#include#include/ 函數(shù)返回值#define ok 1#define error 0#define true 1#define false 0#define infeasible -1#define overflow -2#define null 0#define

5、 list_init_size 100 /順序表的初始大小#define listincrement 10 /順序表的遞增大小typedef int status; /返回狀態(tài)類型typedef char elemtype; /元素類型 typedef structelemtype *elem;int length;int listsize;sqlist;status initlist(sqlist &l)l.elem=(elemtype *)malloc(list_init_size *sizeof(elemtype);if(!l.elem) exit(overflow);l.length=

6、0;l.listsize=list_init_size;return ok;int listlength(sqlist &l)return l.length;status listinsert(sqlist &l,int i, elemtype e)if(il.length+1)return error;if(l.length=l.listsize)elemtype *newbase = (elemtype *)realloc(l.elem,(l.listsize+listincrement)*sizeof(elemtype);if(!newbase)exit(overflow);l.elem

7、 = newbase;l.listsize+=listincrement;elemtype *q=&(l.elemi-1);for(elemtype *p = &(l.eleml.length-1);p=q;-p)*(p+1)=*p;*q=e;+l.length;return ok;status creatsqlist(sqlist &l,elemtype a,int n)int len=listlength(l);for(int i=0;i=a&ai=0&ai=9)listinsert(l,+len,ai);return ok;status getelem(sqlist l,int i,el

8、emtype &e)if(il.length)return error;elsee=*(l.elem+i-1);return ok;status listdelete(sqlist &l,int i,elemtype &e)if(il.length) return error;elemtype *p = &(l.elemi-1);e=*p;elemtype *q=l.elem+l.length-1;for(+p;p=q;+p) *(p-1)=*p;-l.length;return ok;void paichu(sqlist &l) int i,j,l;l=listlength(l);elemt

9、ype e,u;for(i=1;i=l-1;i+)getelem(l,i,e);for(j=1;j=l;j+)getelem(l,j,u);if(i=j)continue;elseif(u=e)listdelete(l,j,u);j=1;int locateelem(sqlist &l,elemtype e,status(*compare)(elemtype,elemtype)int i=1;elemtype *p=l.elem;while(i=l.length&!(*compare)(*p+,e) +i;if(i=l.length) return i;else return 0;status

10、 jiaoji(sqlist l1,sqlist l2, sqlist &l3)int l1_len, l2_len,l3_len,i=1,j=1;elemtype e,u;l1_len=listlength(l1);l2_len=listlength(l2);l3_len=listlength(l3);for(i=1;i=1;j-)getelem(l2,j,u);if(e=u) listinsert(l3,+l3_len,u); break;elsecontinue;return ok;status chaji(sqlist l1,sqlist l2,sqlist &ld)sqlist lc

11、;int count=0,lc_len,l1_len,l2_len,k=1,flag;elemtype e,u,f;initlist(lc);jiaoji(l1,l2,lc);lc_len=listlength(lc);l1_len=listlength(l1);l2_len=listlength(l2);for(int i=1;i=l1_len;i+)flag=0;getelem(l1,i,e);for(int j=1;j=lc_len;j+) getelem(lc,j,u);if(u=e)flag=1;if(flag=0)listinsert(ld,k,e);k+;return ok;vo

12、id union(sqlist &la,sqlist lb,sqlist &lc)sqlist l1;initlist(l1);jiaoji(la,lb,l1);int la_len , lb_len,l1_len,flag;elemtype e,u;int i,j; la_len=listlength(la); lb_len=listlength(lb);l1_len=listlength(l1);for(i=1;i=la_len;+i)getelem(la,i,e); listinsert(lc,i,e); for(i=1;i=lb_len;+i)flag=0;getelem(lb,i,e

13、);for(j=1;j=l1_len;j+)getelem(l1,j,u);if(u=e)flag=1;if(flag=0)la_len+;listinsert(lc,la_len,e);void outputlist(sqlist &l)paichu(l);if(0=l.length)printf(空集!);else for(int i=0;i=0;i-) /從最后一個開始依次與前面的比較 重復(fù)賦值為0 for(j=0;j=0;i-) /同上 for(j=0;jnull); system(cls);elseexit(0);四、調(diào)試分析 1.本程序的模塊劃分比較合理,且盡可能的將指針的操作封裝在結(jié)點和鏈表的兩個模塊中,致使集合模塊的調(diào)試比較成功。 2.將數(shù)據(jù)存入數(shù)組再轉(zhuǎn)入鏈表,可以忽略輸入集合的長度,設(shè)計更加巧妙,便于用戶使用。 3.本實習(xí)作業(yè)采用數(shù)據(jù)抽象的程序設(shè)計方法,將程序劃分為三個層次:元素

溫馨提示

  • 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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論