華中科技大學(xué)數(shù)據(jù)結(jié)構(gòu)實(shí)驗(yàn)報(bào)告_第1頁
華中科技大學(xué)數(shù)據(jù)結(jié)構(gòu)實(shí)驗(yàn)報(bào)告_第2頁
華中科技大學(xué)數(shù)據(jù)結(jié)構(gòu)實(shí)驗(yàn)報(bào)告_第3頁
華中科技大學(xué)數(shù)據(jù)結(jié)構(gòu)實(shí)驗(yàn)報(bào)告_第4頁
華中科技大學(xué)數(shù)據(jù)結(jié)構(gòu)實(shí)驗(yàn)報(bào)告_第5頁
已閱讀5頁,還剩59頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、課課 程程 實(shí)實(shí) 驗(yàn)驗(yàn) 報(bào)報(bào) 告告課程名稱:課程名稱: 數(shù)數(shù) 據(jù)據(jù) 結(jié)結(jié) 構(gòu)構(gòu) 專業(yè)班級(jí):專業(yè)班級(jí):華中科技大學(xué)材控華中科技大學(xué)材控 1402 班班學(xué)學(xué) 號(hào):號(hào): U201411219 姓姓 名:名: 張煌張煌 指導(dǎo)教師:指導(dǎo)教師: 袁凌袁凌 報(bào)告日期:報(bào)告日期: 2016 年年 5 月月 20 日日 計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院目錄目錄實(shí)驗(yàn)報(bào)告要求說明.11 基于順序存儲(chǔ)結(jié)構(gòu)實(shí)現(xiàn)線性表的基本運(yùn)算.11.1 問題描述.11.2 順序表演示系統(tǒng)設(shè)計(jì).11.2.1 系統(tǒng)總體設(shè)計(jì).11.2.2 有關(guān)常量和類型定義.11.2.3 算法設(shè)計(jì).11.3 順序表演示系統(tǒng)實(shí)現(xiàn)與測(cè)試.11.3.1

2、系統(tǒng)實(shí)現(xiàn).11.3.2 系統(tǒng)測(cè)試.11.4 實(shí)驗(yàn)小結(jié).22 基于鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu)實(shí)現(xiàn)線性表的基本運(yùn)算.32.1 問題描述.32.2 單鏈表演示系統(tǒng)設(shè)計(jì).32.2.1 系統(tǒng)總體設(shè)計(jì).32.2.2 有關(guān)常量和類型定義.32.2.3 算法設(shè)計(jì).32.3 單鏈表演示系統(tǒng)實(shí)現(xiàn)與測(cè)試.32.3.1 系統(tǒng)實(shí)現(xiàn).32.3.2 系統(tǒng)測(cè)試.32.4 實(shí)驗(yàn)小結(jié).3參考文獻(xiàn).511 課程實(shí)驗(yàn)概述課程實(shí)驗(yàn)概述本次課程實(shí)驗(yàn)旨在加強(qiáng)學(xué)生課堂理論學(xué)習(xí)之后增強(qiáng)上機(jī)能力,熟練掌握并應(yīng)用數(shù)據(jù)結(jié)構(gòu)中的兩種邏輯結(jié)構(gòu)的典型代表線性表和樹。線性表的順序存儲(chǔ)具有隨機(jī)存取的功能,而鏈?zhǔn)酱鎯?chǔ)能有效的利用動(dòng)態(tài)存儲(chǔ)空間,學(xué)會(huì)合理的選擇這兩種存儲(chǔ)方式,看

3、似簡(jiǎn)單,但在實(shí)際應(yīng)用具有很大的用處。而樹(二叉樹)是非線性邏輯結(jié)構(gòu)的代表,樹模型的建立可以說完全建立在遞歸思想之上,樹的幾乎所有操作都涉及到遞歸調(diào)用,當(dāng)然我們也可以用棧來實(shí)現(xiàn)非遞歸調(diào)用,但是其思想也是相近的。因此樹的實(shí)驗(yàn)旨在幫助我們遞歸思想的建立和成熟。2 實(shí)驗(yàn)一實(shí)驗(yàn)一 基于順序結(jié)構(gòu)的線性表實(shí)現(xiàn)基于順序結(jié)構(gòu)的線性表實(shí)現(xiàn)2.1 實(shí)驗(yàn)內(nèi)容與要求實(shí)驗(yàn)內(nèi)容與要求實(shí)驗(yàn)內(nèi)容:基于順序存儲(chǔ)結(jié)構(gòu),實(shí)現(xiàn)線性表 ADT,具有 10 種基本運(yùn)算。具體要求:1.提供一個(gè)實(shí)現(xiàn)功能的演示系統(tǒng)。 2.具體物理結(jié)構(gòu)和數(shù)據(jù)元素類型自定。 3.線性表數(shù)據(jù)可以使用磁盤文件永久保存。2.2 程序概要設(shè)計(jì)程序概要設(shè)計(jì) 1.明確基本功能

4、程序需要實(shí)現(xiàn)的 12 個(gè)基本功能分別是:IntiaList(初始化),DestroyList(摧毀線性表),ClearList(清空線性表),ListEmpty(判斷表空),ListLength(求表長(zhǎng)),GetElem(取表中元素),LocatElem(獲得元素地址),PriorElem(取前繼),NextElem(取后繼)。ListInsert(插入), ListDelete(刪除),ListTrabverse(遍歷顯示),此外還有輔助功能:Load(載入),Save(保存)2.確定各功能實(shí)現(xiàn)的函數(shù)參數(shù)status IntiaList(SqList * L);status DestroyL

5、ist(SqList * L);status ClearList(SqList L);status ListEmpty(SqList L);int ListLength(SqList L);status GetElem(SqList L,int i,Elemtype *e);2int LocatElem(SqList L,Elemtype *e);3status PriorElem(SqList *L,Elemtype cur,Elemtype * pre_e);status NextElem(SqList L,Elemtype cur,Elemtype * next_e);status Li

6、stInsert(SqList *L, Elemtype e,int i);status ListDelete(SqList * L,Elemtype * e,int i);status ListTrabverse(SqList L,void (* visit)(Elemtype e);void Save(SqList L);status Load(SqList*L);2.3 數(shù)據(jù)結(jié)構(gòu)與算法設(shè)計(jì)數(shù)據(jù)結(jié)構(gòu)與算法設(shè)計(jì)為了滿足概述中的功能,結(jié)合線性表結(jié)構(gòu),給出以下結(jié)構(gòu)的定義:typedef int status;typedef structint item1;Elemtype;typedef str

7、uctElemtype * elem;int length;int listsize;SqList,*L;算法設(shè)計(jì): 1.IntiaList:初始化線性表,傳入的是頭結(jié)點(diǎn)地址。申請(qǐng)一個(gè)大小為 LIST_INT_SIZE、類型為 Elemtype 的線性存儲(chǔ)空間,并用頭結(jié)點(diǎn)中的首結(jié)點(diǎn)指針指向該空間首地址。2.DestroyList:銷毀頭結(jié)點(diǎn)中首結(jié)點(diǎn)址針指向的線性存儲(chǔ)空間,傳入的是頭結(jié)點(diǎn)地址。3.ClearList:與 Destroy 類似但是又有不同,ClearList 并不銷毀物理空間,而是修改邏輯關(guān)系值。4.ListEmpty:判空功能,判斷表是否為空表。傳入的是頭結(jié)點(diǎn)值,而非地址,因?yàn)椴?/p>

8、需要對(duì)頭結(jié)點(diǎn)進(jìn)行修改。若長(zhǎng)度為 0,表空,否則不空。5.ListLength:求表長(zhǎng)功能,由于創(chuàng)建過程中已經(jīng)把表長(zhǎng)信息包含在頭結(jié)點(diǎn)中,所以直接4調(diào)用并顯示即可。6.GetElem:獲取第 i 號(hào)元素,傳入的是頭結(jié)點(diǎn)值、元素編號(hào) i、以及出口表結(jié)點(diǎn)地址。7.LocatElem:取指定元素編號(hào),傳入頭結(jié)點(diǎn)值、存儲(chǔ)了所需元素信息的一個(gè)臨時(shí)表結(jié)點(diǎn)值、equal 函數(shù)地址。采用順序比較法從表頭遍歷并比較,一旦找到,返回編號(hào)i。8.PriorElem:求指定元素的前一個(gè)元素的內(nèi)容,傳入頭結(jié)點(diǎn)值、包含指定元素信息的一個(gè)臨時(shí)表結(jié)點(diǎn)值、存儲(chǔ)前一個(gè)元素的表結(jié)點(diǎn)地址。主要思路是先調(diào)用LocatElem 確定指定元素

9、的位置,如果不是首結(jié)點(diǎn)則可直接取到 PriorElem 的地址。9.NextElem:與 PriorElem 功能類似,不再贅述。10.ListInset:插入一個(gè)數(shù)據(jù)元素,傳入頭結(jié)點(diǎn)地址、插入位置 i、臨時(shí)表結(jié)點(diǎn)值。在調(diào)用插入函數(shù)前構(gòu)造一個(gè)臨時(shí)表結(jié)點(diǎn),用于存儲(chǔ)數(shù)據(jù)元素信息。進(jìn)入插入子函數(shù),插入前先判斷插入位置是否合理,再判斷是否“滿載”。如果滿載則重新申請(qǐng)更大的存儲(chǔ)空間。接下來正式插入數(shù)據(jù)元素,“先空位置再插入”。11.ListDelete: 刪除一個(gè)數(shù)據(jù)元素,傳入頭結(jié)點(diǎn)地址、刪除位置 i。刪除前先判斷位置是否合理,先刪除元素,然后將所有刪除元素之后的元素前移一個(gè)位置。12.ListTrab

10、verse: 傳入頭結(jié)點(diǎn),循環(huán)訪問各個(gè)元素,直至到表尾停止。2.4 輸入輸出設(shè)計(jì)輸入輸出設(shè)計(jì)1.輸入: 在輸入方面,我采用了用戶自定義輸入的方式,既可以采用用戶自行輸入,又可以載入之前保存的數(shù)據(jù)。在每次操作之后,會(huì)提示是否保存剛才的數(shù)據(jù),以便下次再次使用,以下是用戶自行輸入的功能實(shí)現(xiàn): void creat(SqList *L) int a=0; printf(Input the number of your datas?n); scanf(%d,&a); L-elem=(Elemtype*)malloc(a*sizeof(Elemtype);5 L-length=a; int i; prin

11、tf(Please input your datan); for (i=1;ielemi.item1); L-listsize=LIST_INIT_SIZE; printf(You have to save your data); getchar(); Save(*L);2.輸出: 采用遍歷輸出,即功能 10 的輸出。2.5 源程序及注釋源程序及注釋/* Linear Table On Sequence Structure */#include #include #include #include #define LIST_INIT_SIZE 10#define OK 1#define FAL

12、SE 0#define TRUE 1#define ERROR -1#define OVERFLOW -2#define LISTINCREMENT 1/*-*/typedef int status;typedef structint item1;Elemtype;typedef structElemtype * elem;int length;6int listsize;SqList,*L;int changed=0;/*-*/status IntiaList(SqList * L);status DestroyList(SqList * L);status ClearList(SqList

13、 L);status ListEmpty(SqList L);int ListLength(SqList L);status GetElem(SqList L,int i,Elemtype *e);int LocatElem(SqList L,Elemtype *e);status PriorElem(SqList *L,Elemtype cur,Elemtype * pre_e);status NextElem(SqList L,Elemtype cur,Elemtype * next_e);status ListInsert(SqList *L, Elemtype e,int i);sta

14、tus ListDelete(SqList * L,Elemtype * e,int i);status ListTrabverse(SqList L,void (* visit)(Elemtype e);/*-*/status compare(Elemtype e1,Elemtype e2);status equal(Elemtype x, Elemtype y);void display(Elemtype e);void Save(SqList L);status Load(SqList*L);void creat(SqList *L);/*-*/void menu(void);/*-*/

15、char file020;int main(void)SqList L;L.listsize=LIST_INIT_SIZE;int op=0;char req;do7 system(cls); menu(); printf(Do you want to input new liear table?Y/N); req=getchar();getchar(); if (req=Y |req=y) creat(&L); else printf(Do you want to load saved data?Y/N); req=getchar(); if (req=Y |req=y) while (!L

16、oad(&L) L.elem=(Elemtype*)malloc(L.listsize+)*sizeof(Elemtype); else printf(You still use the data use before!n); getchar(); getchar(); system(cls); menu(); printf( Then please input your option0-12:); scanf(%d,&op); switch(op) case 0: break; case 1: printf(n here is IntiaList(),which being realized

17、n);getchar();getchar(); if (IntiaList(&L) printf(Successfully realized!n);getchar();getchar(); /printf(Dou you want to save?Y/N) else printf(Not realised!n); getchar();getchar(); break;8 case 2: printf(n here is DestroyList(),which being realizedn); getchar();getchar(); if (DestroyList(&L) printf(Su

18、ccessfully realized!n); getchar();getchar(); else printf(Not realised!n); getchar();getchar(); break; case 3: printf(n here is ClearList(),which being realizedn); getchar();getchar(); if (ClearList(L) printf(Successfully realized!n); getchar();getchar(); else printf(Not realised!n); getchar();getcha

19、r(); break; case 4: printf(n here is ListEmpty(),which being realizedn); getchar();getchar(); if (ListEmpty(L) printf(It is an empty listn); getchar();getchar(); else printf(It is not an empty listn); getchar();getchar(); break; case 5: printf(n here is ListLength() ,which being realizedn); if (&L!=

20、NULL) printf(%d,L.elem1.item1); printf(Successfully realized!The length of L is %dn,ListLength(L); getchar();getchar();9 else printf(Not realised!n); getchar();getchar(); break; case 6: printf(n here is GetElem(),which being realizedn);getchar();getchar(); int i; Elemtype e; printf(which elem do you

21、 want to pick?i=?); scanf(%d,&i); if (GetElem(L,i,&e) printf(Successfully realized!n); printf(And the %dth elem data is %d,i,e.item1); getchar();getchar(); else printf(Not realised!n); getchar();getchar(); break; case 7: printf(n here is LocatElem(),which being realizedn); getchar();getchar(); int t

22、,i,a; Elemtype e; printf(What do you want to locate?item=); scanf(%d,&t); for (i=1;i=L.length;i+) if (L.elemi.item1=t) break; if (i=L.length+1) printf(There is no such item in this list!n); e=L.elemi; if (a=LocatElem(L,&e) printf(Successfully realized!n); printf(e is in the %dth locationn,a); getcha

23、r();getchar();10 else printf(Not realised!n); getchar();getchar(); break; case 8: printf(n here is PriorElem(),which being realizedn);getchar();getchar();Elemtype e,cur;int i;printf(To find the prio of who?i=);scanf(%d,&i);cur=L.elemi; if (PriorElem(&L,cur,&e) printf(Successfully realized!n); printf

24、(And the prio of elem%d is %dn,i,e.item1); getchar();getchar(); else printf(Not realised!n); getchar();getchar(); break; case 9: printf(n here is NextElem(),which being realizedn);getchar();getchar();Elemtype e,cur;int i;printf(To find the next of who?i=);scanf(%d,&i);cur=L.elemi; if (NextElem(L,cur

25、,&e) printf(Successfully realized!n); printf(And the nextelem of elem%d is %dn,i,e.item1); getchar();getchar(); else printf(Not realised!n); getchar();getchar(); break;11 case 10: printf(n here is ListInsert(),which being realizedn);getchar();getchar(); int i,j; Elemtype e; printf(choose where to in

26、sert?i=); scanf(%d,&i); printf(nInsert new data=); scanf(%d,&(e.item1); if (ListInsert(&L,e,i) printf(Successfully realized!n); printf(the list data is now:n); for (j=1;j=L.length;j+) printf(%d ,L.elemj.item1); getchar();getchar(); else printf(Not realised!n); getchar();getchar(); break; case 11: pr

27、intf(n here is ListDelete(),which being realizedn);getchar();getchar(); int i,j; Elemtype *e; printf(choose where to delete?i=); scanf(%d,&i); if (ListDelete(&L,e,i) printf(Successfully realized!n); printf(The deleted data is %dn,(*e).item1);getchar();getchar(); printf(the list data is now:n); for (

28、j=1;jelem=(Elemtype*)malloc(LIST_INIT_SIZE*sizeof(Elemtype); if (!L) exit(OVERFLOW); L-length=0; L-listsize=LIST_INIT_SIZE; return OK;status DestroyList(SqList * L)13 free(L); L=NULL; char req; printf(Are you sure to destroy the file?Y/N); req=getchar(); if (req=y|req=Y) remove(file0); printf(The fi

29、le has been destroyed!n); return OK;status ClearList(SqList L) L.length=0; return OK;status ListEmpty(SqList L) if (L.length=0) return TRUE; else return FALSE;int ListLength(SqList L) return L.length;status GetElem(SqList L,int i, Elemtype * e) if (!(L.length=0|iL.length) *e=L.elemi; return OK; 14 e

30、lse return ERROR;int LocatElem(SqList L,Elemtype *e) int i; for(i=1;ielem) return ERROR; else for(i=1;ilength;i+) if (compare(L-elemi,cur) break; if(i=1) return FALSE; else *pre_e=(L-elemi-1); return OK; status NextElem(SqList L,Elemtype cur,Elemtype * next_e) int i; if(!L.elem) return ERROR; else f

31、or(i=1;ilength=0) L-length+; L-elem1=e; return OK; if(iL-length) return FALSE; if(L-length=L-listsize) newbase=(Elemtype*)realloc(L-elem,(L-listsize+LISTINCREMENT)*sizeof(Elemtype); if(!newbase) return(OVERFLOW); L-elem=newbase; L-listsize+=LISTINCREMENT; q=&(L-elemi); for(p=&(L-elemL-length);p=q;p-

32、) *(p+1)= *p; *q=e; +L-length; return OK;status ListDelete(SqList * L,Elemtype * e, int i) Elemtype *q,*p; if(!L-elem) return ERROR; if(iL-length) return FALSE; q=&(L-elemi); for(p=&(L-elemL-length-1);p=q;p-) *p= *(p+1); (*e)=L-elemi;16 -L-length; return OK;status ListTrabverse(SqList L, void (* vis

33、it)(Elemtype e)int i;if(!L.length) return(0);printf(n-all elements of liear table-n);for(i=1;i=L.length;i+) visit(L.elemi);return(1);status compare(Elemtype e1 ,Elemtype e2 ) if (e1.item1=e2.item1) return OK; else return FALSE;/*-*/void menu(void)printf(nn);printf( Menu for Linear Table On Sequence

34、Structure n);printf(-n);printf( 1. IntiaList 7. LocatElemn);printf( 2. DestroyList 8. PriorElemn);printf( 3. ClearList 9. NextElem n);printf( 4. ListEmpty 10. ListInsertn);printf( 5. ListLength 11. ListDeleten);printf( 6. GetElem 12. ListTrabversen);printf( 0. Exitn);printf(-n);/*-*/status equal(Ele

35、mtype x, Elemtype y)return (x.item1=y.item1);17void display(Elemtype e)printf(%d ,e.item1);void Save(SqList L) FILE* fp=NULL; int i; char file120; do puts(nt creating data file.);puts(n please input the file name:);gets(file1);if (fp=fopen(file1, wb)=NULL) puts(nfile cannot open!);printf(press ENTER

36、 to continue.);getchar(); while (fp=NULL);for (i=1;ielem=(Elemtype*)malloc(LIST_INIT_SIZE*sizeof(Elemtype);18 if (changed) char req;puts(nYou have not saved,save nowY/N?);req=getchar();getchar();if (req=Y | req=y) Save(*L); do puts(nLoading data now.);puts(nPlease input the file name:);getchar();get

37、s(file1);if (fp=fopen(file1,rb)=NULL)puts(nThe file cannot open!);printf(press ENTER to continue.);getchar(); while (fp=NULL); int i=1; L-length=0; while (!feof(fp) if (ilistsize)fread(&L-elemi, sizeof(Elemtype), 1, fp);else printf(Loading overflown); getchar(); fclose(fp); return ERROR; L-length=i+

38、;L-length-; printf(Loading a %d lenth List,L-length); getchar();19 puts(nSuccessfully loaded); printf(press ENTER to continue.); getchar();changed=0;strcpy(file0,file1); fclose(fp); return OK;void creat(SqList *L) int a=0; printf(Input the number of your datas?n); scanf(%d,&a); L-elem=(Elemtype*)mal

39、loc(a*sizeof(Elemtype); L-length=a; int i; printf(Please input your datan); for (i=1;ielemi.item1); L-listsize=LIST_INIT_SIZE; printf(You have to save your data); getchar(); Save(*L);2.6 程序測(cè)試與結(jié)果程序測(cè)試與結(jié)果采用簡(jiǎn)易界面,實(shí)驗(yàn)測(cè)試數(shù)據(jù)之前保存在 hf0 文件中,內(nèi)容為:1 2 3 4 5 20圖 2.1下面選取幾個(gè)重要功能展示:1.求表長(zhǎng):圖 2.22.插入: 在 3 號(hào)位置插入值為 10 的元素。21

40、圖 2.33.遍歷輸出:圖 2.44.取某位置的元素: 22圖 2.55.刪除與插入類似,在實(shí)驗(yàn)二中演示其鏈?zhǔn)浇Y(jié)構(gòu)。2.72.7 復(fù)雜性分析復(fù)雜性分析空間復(fù)雜度為 O(1);時(shí)間復(fù)雜度見下表:函數(shù)時(shí)間復(fù)雜度函數(shù)時(shí)間復(fù)雜度InitialListO(1)LocatElemO(N)DestroyListO(1)PriorElemO(1)ClearListO(1)NextElemO(1)ListEmpyO(1)ListInsertO(N)ListLenthO(1)ListDeleteO(N)GetElemO(N)ListTrabverseO(N)表格 2.1233 實(shí)驗(yàn)二實(shí)驗(yàn)二 基于鏈?zhǔn)浇Y(jié)構(gòu)的線性表實(shí)

41、現(xiàn)基于鏈?zhǔn)浇Y(jié)構(gòu)的線性表實(shí)現(xiàn)3.2 程序概要設(shè)計(jì)程序概要設(shè)計(jì) 基于鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu),實(shí)現(xiàn)線性表 ADT,具有 8 種基本運(yùn)算,并籍此建立你在社交網(wǎng)站(如人人網(wǎng))的聯(lián)系人/好友表。提示: 提供一個(gè)實(shí)現(xiàn)功能的演示系統(tǒng) 具體物理結(jié)構(gòu)和數(shù)據(jù)元素類型自行選定與設(shè)計(jì) 線性表數(shù)據(jù)可以使用磁盤文件永久保存3.2 程序概要設(shè)計(jì)程序概要設(shè)計(jì)1.明確基本功能 程序需要實(shí)現(xiàn)的 12 個(gè)基本功能分別是:IntiaList(初始化),DestroyList(摧毀線性表),ClearList(清空線性表),ListEmpty(判斷表空),ListLength(求表長(zhǎng)),GetElem(取表中元素),Search(查找),List

42、Insert(插入), ListDelete(刪除),ListTrabverse(遍歷顯示),此外還有輔助功能:Load(載入),Save(保存) 2.確定各函數(shù)參數(shù)status IntiaList(LNode * L);status DestroyList(LNode * L);status ClearList(LNode *L);status ListEmpty(LNode *L);int ListLength(LNode *L);status Search(LNode *L);status LinkInsert(LNode *L);status LinkDelete(LNode *L);

43、status LinkMod(LNode *L);status LinkTrabverse(LNode *L);3.3 數(shù)據(jù)結(jié)構(gòu)與算法設(shè)計(jì)數(shù)據(jù)結(jié)構(gòu)與算法設(shè)計(jì)為了滿足概述中的功能,結(jié)合線性表結(jié)構(gòu),給出以下結(jié)構(gòu)的定義:24typedef int status;typedef structchar name10;char num20;Elemtype;typedef struct LNodeElemtype data;struct LNode *next;LNode;算法設(shè)計(jì): 1.IntiaList:初始化線性表,傳入的是頭結(jié)點(diǎn)地址的地址。釋放*L,重新申請(qǐng)一個(gè)節(jié)點(diǎn)作為表頭節(jié)點(diǎn),返回新的指向該表頭

44、節(jié)點(diǎn)的指針的指針。2.DestroyList:銷毀頭結(jié)點(diǎn)中首結(jié)點(diǎn)址針指向的線性存儲(chǔ)空間,傳入的是頭結(jié)點(diǎn)地址,并且銷毀文件。3.ClearList:與 Destroy 類似但是又有不同,ClearList 并不銷毀物理空間,而是修改邏輯關(guān)系值。4.ListEmpty:判空功能,判斷表是否為空表。傳入頭結(jié)點(diǎn)地址,若頭節(jié)點(diǎn)的 next 為空指針,則表空,否則不空。5.ListLength:求表長(zhǎng)功能,傳入頭結(jié)點(diǎn)地址,每向下取一次節(jié)點(diǎn),計(jì)數(shù)器自增 1,直至為空,此時(shí)計(jì)數(shù)器值為表長(zhǎng)。6.Search:根據(jù)用戶所選取的查找關(guān)鍵字進(jìn)行查找。查找方式為逐節(jié)點(diǎn)查找,一旦找到便返回包含該關(guān)鍵字的數(shù)據(jù)元素的所有信息

45、。7.ListInset:插入一個(gè)數(shù)據(jù)元素,傳入頭結(jié)點(diǎn)地址的地址、插入位置 i、臨時(shí)表結(jié)點(diǎn)值。在調(diào)用插入函數(shù)前構(gòu)造一個(gè)臨時(shí)結(jié)點(diǎn),用于存儲(chǔ)數(shù)據(jù)元素信息。進(jìn)入插入子函數(shù),插入前先判斷插入位置是否合理。先斷開所插位置,將臨時(shí)節(jié)點(diǎn)插入。 8.ListDelete:刪除一個(gè)數(shù)據(jù)元素,傳入頭結(jié)點(diǎn)地址的地址、刪除位置 i。刪除前先判斷位置是否合理,先刪除元素,將刪除節(jié)點(diǎn)的前繼和后繼相連,釋放刪除節(jié)點(diǎn)。259.ListMod: 修改一個(gè)元素的信息,調(diào)用 Search 來找到所要修改的節(jié)點(diǎn),根據(jù)用戶要求自行修改,返回頭結(jié)點(diǎn)地址。 10.ListTrabverse: 傳入頭結(jié)點(diǎn)地址,循環(huán)訪問各個(gè)元素,直至到表尾停

46、止。3 3.4.4 輸入輸出設(shè)計(jì)輸入輸出設(shè)計(jì)同實(shí)驗(yàn)一相同,此處不再贅述。 3 3. .5 5 源程序及注釋源程序及注釋#include #include #include #include #define LIST_INIT_SIZE 10#define OK 1#define FALSE 0#define TRUE 1#define ERROR -1#define OVERFLOW -2#define LISTINCREMENT 1/*-*/typedef int status;typedef structchar name10;char num20;Elemtype;typedef str

47、uct LNodeElemtype data;struct LNode *next;LNode;26int changed=0;char req;LNode *loc;/*-*/status IntiaList(LNode * L);status DestroyList(LNode * L);status ClearList(LNode *L);status ListEmpty(LNode *L);int ListLength(LNode *L);status Search(LNode *L);status LinkInsert(LNode *L);status LinkDelete(LNod

48、e *L);status LinkMod(LNode *L);status LinkTrabverse(LNode *L);/*-*/status equal(Elemtype x, Elemtype y);void display(Elemtype e);void Save(LNode *L);/status Save(LNode* L);status Load(LNode*L);status creat(LNode *L);/*-*/void menu(void);/*-*/char file020;int main(void)int op=0;do LNode *L; system(cl

49、s); menu(); printf(Do you want to input new link table?Y/N); req=getchar();getchar(); if (req=Y |req=y) creat(&L);27 else printf(Do you want to load saved data?Y/N); req=getchar(); if (req=Y |req=y) if (Load(&L)=OK) puts(nSuccessfully loaded); printf(press ENTER to continue.); getchar(); else printf

50、(fail to loadn);getchar();getchar(); else printf(You still use the data use before!); getchar();getchar(); system(cls); menu(); printf( Then please input your option0-12:); scanf(%d,&op); switch(op) case 0: break; case 1: printf(n here is IntiaList(),which being realizedn);getchar();getchar(); if (I

51、ntiaList(&L)=OK) printf(Successfully realized!n);getchar();getchar(); /printf(Dou you want to save?Y/N) else printf(Not realised!Maybe the cause is overflown); getchar();getchar(); break; case 2: printf(n here is DestroyList(),which being realizedn);28 getchar();getchar(); if (DestroyList(L) printf(

52、Successfully realized!n); getchar();getchar(); else printf(Not realised!n); getchar();getchar(); break; case 3: printf(n here is ClearList(),which being realizedn); getchar();getchar(); if (ClearList(L) printf(Successfully realized!n); getchar();getchar(); else printf(Not realised!n); getchar();getc

53、har(); break; case 4: printf(n here is ListEmpty(),which being realizedn); getchar();getchar(); if (ListEmpty(L) printf(It is an empty listn); getchar();getchar(); else printf(It is not an empty listn); getchar();getchar(); break; case 5: printf(n here is ListLength() ,which being realizedn); printf

54、(Successfully realized!The length of L is %dn,ListLength(L); getchar();getchar(); break; case 6: printf(n here is Search(),which being realizedn);getchar();getchar(); if (Search(L)=OK) printf(Successfully realized!n);29 getchar();getchar(); else printf(Not realised!n); getchar();getchar(); break; ca

55、se 7: printf(n here is LinkInsert(),which being realizedn); getchar();getchar(); if (LinkInsert(L)=OK) printf(Successfully realized!n); getchar();getchar(); else printf(Not realised!n); getchar();getchar(); break; case 8: printf(n here is LinkDelete(),which being realizedn);getchar();getchar(); if (

56、LinkDelete(L)=OK) printf(Successfully realized!n); getchar();getchar(); else printf(Not realised!n); getchar();getchar(); break; case 9: printf(n here is LinkMod(),which being realizedn); getchar();getchar(); if (LinkMod(L)=OK) printf(Successfully realized!n); getchar();getchar(); else printf(Not re

57、alised!n); getchar();getchar(); break; case 10: printf(n here LinkTrabverse(),which being realizedn); getchar();getchar();30 if (LinkTrabverse(L)=OK) printf(Successfully realized!n); getchar();getchar(); else printf(Not realised!n); getchar();getchar(); break; default: ; while(op);printf(n-Welcome a

58、gain!-n);getchar();getchar();return 1;status IntiaList(LNode *L) free(*L); *L=(LNode*)malloc(sizeof(LNode); if (*L)=NULL) return OVERFLOW; (*L)-next=NULL; return OK;status DestroyList(LNode * L) free(L); L=NULL; char req; printf(Are you sure to destroy the file?Y/N); req=getchar(); if (req=y|req=Y)

59、remove(file0); printf(The file has been destroyed!n);31 return OK;status ClearList(LNode *L) L-next=NULL; return OK;status ListEmpty(LNode *L) if (L-next=NULL) return TRUE; else return FALSE;int ListLength(LNode *L) int i=0; printf(n%s,L-next-data.num); while (!(L=NULL) L=L-next; i+; printf(%d,i); r

60、eturn i-1;/*status GetElem(LNode L,int i, Elemtype * e) if (!(L.length=0|iL.length) *e=L.elemi; return OK; else return ERROR;32*/status Search(LNode *L) LNode *p; int i; char req120,req220; p=L-next; printf(Search ifo according to which way? 1.name 2.tel_num); scanf(%d,&i); if (i=1) printf(Please in

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(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)論