九九热最新网址,777奇米四色米奇影院在线播放,国产精品18久久久久久久久久,中文有码视频,亚洲一区在线免费观看,国产91精品在线,婷婷丁香六月天

清華嚴(yán)蔚敏《大數(shù)據(jù)結(jié)構(gòu)》地全部代碼實(shí)現(xiàn)C語(yǔ)言

上傳人:仙*** 文檔編號(hào):89643189 上傳時(shí)間:2022-05-13 格式:DOC 頁(yè)數(shù):65 大小:211KB
收藏 版權(quán)申訴 舉報(bào) 下載
清華嚴(yán)蔚敏《大數(shù)據(jù)結(jié)構(gòu)》地全部代碼實(shí)現(xiàn)C語(yǔ)言_第1頁(yè)
第1頁(yè) / 共65頁(yè)
清華嚴(yán)蔚敏《大數(shù)據(jù)結(jié)構(gòu)》地全部代碼實(shí)現(xiàn)C語(yǔ)言_第2頁(yè)
第2頁(yè) / 共65頁(yè)
清華嚴(yán)蔚敏《大數(shù)據(jù)結(jié)構(gòu)》地全部代碼實(shí)現(xiàn)C語(yǔ)言_第3頁(yè)
第3頁(yè) / 共65頁(yè)

下載文檔到電腦,查找使用更方便

10 積分

下載資源

還剩頁(yè)未讀,繼續(xù)閱讀

資源描述:

《清華嚴(yán)蔚敏《大數(shù)據(jù)結(jié)構(gòu)》地全部代碼實(shí)現(xiàn)C語(yǔ)言》由會(huì)員分享,可在線閱讀,更多相關(guān)《清華嚴(yán)蔚敏《大數(shù)據(jù)結(jié)構(gòu)》地全部代碼實(shí)現(xiàn)C語(yǔ)言(65頁(yè)珍藏版)》請(qǐng)?jiān)谘b配圖網(wǎng)上搜索。

1、 /* (程序名) */#include#include#include /* malloc()等 */#include /* INT_MAX等 */#include /* EOF(=Z或F6),NULL */#include /* atoi() */#include /* eof() */#include /* floor(),ceil(),abs() */#include /* exit() */* 函數(shù)結(jié)果狀態(tài)代碼 */#defineTRUE 1#defineFALSE 0#defineOK 1#defineERROR 0#defineINFEASIBLE -1/* #define OV

2、ERFLOW -2 因?yàn)樵趍ath.h中已定義OVERFLOW的值為3,故去掉此行 */ typedef intStatus; /* Status是函數(shù)的類(lèi)型,其值是函數(shù)結(jié)果狀態(tài)代碼,如OK等 */ typedef intBoolean; /* Boolean是布爾類(lèi)型,其值是TRUE或FALSE */* algo2-1.c 實(shí)現(xiàn)算法2.1的程序 */#includec1.h typedef intElemType;#includec2-1.h/*c2-1.h 線性表的動(dòng)態(tài)分配順序存儲(chǔ)結(jié)構(gòu) */#defineLIST_INIT_SIZE 10 /* 線性表存儲(chǔ)空間的初始分配量 */#defin

3、eLISTINCREMENT 2/* 線性表存儲(chǔ)空間的分配增量 */typedefstruct ElemType*elem; /* 存儲(chǔ)空間基址 */intlength; /* 當(dāng)前長(zhǎng)度 */intlistsize; /* 當(dāng)前分配的存儲(chǔ)容量(以sizeof(ElemType)為單位) */ SqList;#includebo2-1.c/* bo2-1.c 順序表示的線性表(存儲(chǔ)結(jié)構(gòu)由c2-1.h定義)的根本操作(12個(gè)) */StatusInitList(SqList*L) /* 算法2.3 */ /* 操作結(jié)果:構(gòu)造一個(gè)空的順序線性表 */ (*L).elem=(ElemType*)mal

4、loc(LIST_INIT_SIZE*sizeof(ElemType);if(!(*L).elem)exit(OVERFLOW); /* 存儲(chǔ)分配失敗 */ (*L).length=0; /* 空表長(zhǎng)度為0 */ (*L).listsize=LIST_INIT_SIZE; /* 初始存儲(chǔ)容量 */return OK; StatusDestroyList(SqList*L) /* 初始條件:順序線性表L已存在。操作結(jié)果:銷(xiāo)毀順序線性表L */ free(*L).elem); (*L).elem=NULL; (*L).length=0; (*L).listsize=0;return OK; Sta

5、tusClearList(SqList*L) /* 初始條件:順序線性表L已存在。操作結(jié)果:將L重置為空表 */ (*L).length=0;return OK; StatusListEmpty(SqList L) /* 初始條件:順序線性表L已存在。操作結(jié)果:假如L為空表,如此返回TRUE,否如此返回FALSE */if(L.length=0)return TRUE;elsereturn FALSE; int ListLength(SqList L) /* 初始條件:順序線性表L已存在。操作結(jié)果:返回L中數(shù)據(jù)元素個(gè)數(shù) */return L.length; Status GetElem(SqL

6、ist L,int i,ElemType *e) /* 初始條件:順序線性表L已存在,1iListLength(L) */* 操作結(jié)果:用e返回L中第i個(gè)數(shù)據(jù)元素的值 */if(iL.length)exit(ERROR); *e=*(L.elem+i-1);return OK; int LocateElem(SqList L,ElemType e,Status(*pare)(ElemType,ElemType) /* 初始條件:順序線性表L已存在,pare()是數(shù)據(jù)元素判定函數(shù)(滿足為1,否如此為0) */* 操作結(jié)果:返回L中第1個(gè)與e滿足關(guān)系pare()的數(shù)據(jù)元素的位序。 */* 假如這樣

7、的數(shù)據(jù)元素不存在,如此返回值為0。算法2.6 */ElemType *p;int i=1; /* i的初值為第1個(gè)元素的位序 */ p=L.elem; /* p的初值為第1個(gè)元素的存儲(chǔ)位置 */while(i=L.length&!pare(*p+,e) +i;if(i=L.length)return i;elsereturn 0; Status PriorElem(SqList L,ElemType cur_e,ElemType *pre_e) /* 初始條件:順序線性表L已存在 */* 操作結(jié)果:假如cur_e是L的數(shù)據(jù)元素,且不是第一個(gè),如此用pre_e返回它的前驅(qū), */* 否如此操作失

8、敗,pre_e無(wú)定義 */int i=2;ElemType *p=L.elem+1;while(iL.length)return INFEASIBLE;else *pre_e=*-p;return OK; Status NextElem(SqList L,ElemType cur_e,ElemType *next_e) /* 初始條件:順序線性表L已存在 */* 操作結(jié)果:假如cur_e是L的數(shù)據(jù)元素,且不是最后一個(gè),如此用next_e返回它的后繼, */* 否如此操作失敗,next_e無(wú)定義 */int i=1;ElemType *p=L.elem;while(iL.length&*p!=c

9、ur_e) i+; p+; if(i=L.length)return INFEASIBLE;else *next_e=*+p;return OK; Status ListInsert(SqList*L,int i,ElemType e) /* 算法2.4 */ /* 初始條件:順序線性表L已存在,1iListLength(L)+1 */* 操作結(jié)果:在L中第i個(gè)位置之前插入新的數(shù)據(jù)元素e,L的長(zhǎng)度加1 */ElemType *newbase,*q,*p;if(i(*L).length+1) /* i值不合法 */return ERROR;if(*L).length=(*L).listsize)

10、 /* 當(dāng)前存儲(chǔ)空間已滿,增加分配 */ newbase=(ElemType *)realloc(*L).elem,(*L).listsize+LISTINCREMENT)*sizeof(ElemType);if(!newbase)exit(OVERFLOW); /* 存儲(chǔ)分配失敗 */ (*L).elem=newbase; /* 新基址 */ (*L).listsize+=LISTINCREMENT; /* 增加存儲(chǔ)容量 */ q=(*L).elem+i-1; /* q為插入位置 */for(p=(*L).elem+(*L).length-1;p=q;-p) /* 插入位置與之后的元素右移

11、*/ *(p+1)=*p; *q=e; /* 插入e */ +(*L).length; /* 表長(zhǎng)增1 */return OK; Status ListDelete(SqList*L,int i,ElemType *e) /* 算法2.5 */ /* 初始條件:順序線性表L已存在,1iListLength(L) */* 操作結(jié)果:刪除L的第i個(gè)數(shù)據(jù)元素,并用e返回其值,L的長(zhǎng)度減1 */ElemType *p,*q;if(i(*L).length) /* i值不合法 */return ERROR; p=(*L).elem+i-1; /* p為被刪除元素的位置 */ *e=*p; /* 被刪除元

12、素的值賦給e */ q=(*L).elem+(*L).length-1; /* 表尾元素的位置 */for(+p;p=q;+p) /* 被刪除元素之后的元素左移 */ *(p-1)=*p; (*L).length-; /* 表長(zhǎng)減1 */return OK; Status ListTraverse(SqList L,void(*vi)(ElemType*) /* 初始條件:順序線性表L已存在 */* 操作結(jié)果:依次對(duì)L的每個(gè)數(shù)據(jù)元素調(diào)用函數(shù)vi()。一旦vi()失敗,如此操作失敗 */* vi()的形參加&,明確可通過(guò)調(diào)用vi()改變?cè)氐闹?*/ElemType *p;int i; p=L.

13、elem;for(i=1;i=L.length;i+) vi(p+); printf(n);return OK; Status equal(ElemType c1,ElemType c2) /* 判斷是否相等的函數(shù),Union()用到 */if(c1=c2)return TRUE;elsereturn FALSE; void Union(SqList*La,SqList Lb) /* 算法2.1 */ /* 將所有在線性表Lb中但不在La中的數(shù)據(jù)元素插入到La中 */ElemType e;int La_len,Lb_len;int i; La_len=ListLength(*La); /* 求

14、線性表的長(zhǎng)度 */ Lb_len=ListLength(Lb);for(i=1;i=Lb_len;i+) GetElem(Lb,i,&e); /* 取Lb中第i個(gè)數(shù)據(jù)元素賦給e */if(!LocateElem(*La,e,equal) /* La中不存在和e一樣的元素,如此插入之 */ ListInsert(La,+La_len,e); void print(ElemType *c) printf(%d ,*c); void main() SqList La,Lb;Status i;int j; i=InitList(&La);if(i=1) /* 創(chuàng)建空表La成功 */for(j=1;j=

15、5;j+) /* 在表La中插入5個(gè)元素 */ i=ListInsert(&La,j,j); printf(La= ); /* 輸出表La的容 */ ListTraverse(La,print);InitList(&Lb); /* 也可不判斷是否創(chuàng)建成功 */for(j=1;j=5;j+) /* 在表Lb中插入5個(gè)元素 */ i=ListInsert(&Lb,j,2*j); printf(Lb= ); /* 輸出表Lb的容 */ ListTraverse(Lb,print); Union(&La,Lb); printf(new La= ); /* 輸出新表La的容 */ ListTravers

16、e(La,print);/* algo2-2.c 實(shí)現(xiàn)算法2.2的程序 */#includec1.h typedef intElemType;#includec2-1.h#includebo2-1.cvoid MergeList(SqList La,SqList Lb,SqList*Lc) /* 算法2.2 */ /* 線性表La和Lb中的數(shù)據(jù)元素按值非遞減排列。 */* 歸并La和Lb得到新的線性表Lc,Lc的數(shù)據(jù)元素也按值非遞減排列 */int i=1,j=1,k=0;int La_len,Lb_len;ElemType ai,bj;InitList(Lc); /* 創(chuàng)建空表Lc */ L

17、a_len=ListLength(La); Lb_len=ListLength(Lb);while(i=La_len&j=Lb_len) /* 表La和表Lb均非空 */ GetElem(La,i,&ai); GetElem(Lb,j,&bj);if(ai=bj) ListInsert(Lc,+k,ai); +i; else ListInsert(Lc,+k,bj); +j; while(i=La_len) /* 表La非空且表Lb空 */ GetElem(La,i+,&ai); ListInsert(Lc,+k,ai); while(j=Lb_len) /* 表Lb非空且表La空 */ Ge

18、tElem(Lb,j+,&bj); ListInsert(Lc,+k,bj); void print(ElemType *c) printf(%d ,*c); void main() SqList La,Lb,Lc;int j,a4=3,5,8,11,b7=2,6,8,9,11,15,20;InitList(&La); /* 創(chuàng)建空表La */for(j=1;j=4;j+) /* 在表La中插入4個(gè)元素 */ ListInsert(&La,j,aj-1); printf(La= ); /* 輸出表La的容 */ ListTraverse(La,print);InitList(&Lb); /*

19、創(chuàng)建空表Lb */for(j=1;j=7;j+) /* 在表Lb中插入7個(gè)元素 */ ListInsert(&Lb,j,bj-1); printf(Lb= ); /* 輸出表Lb的容 */ ListTraverse(Lb,print); MergeList(La,Lb,&Lc); printf(Lc= ); /* 輸出表Lc的容 */ ListTraverse(Lc,print); /* algo2-3.c 實(shí)現(xiàn)算法2.7的程序 */#includec1.h typedef intElemType;#includec2-1.h#includebo2-1.cvoid MergeList(SqLi

20、st La,SqList Lb,SqList*Lc) /* 算法2.7 */ /* 順序線性表La和Lb的元素按值非遞減排列。 */* 歸并La和Lb得到新的順序線性表Lc,Lc的元素也按值非遞減排列 */ElemType *pa,*pa_last,*pb,*pb_last,*pc; pa=La.elem; pb=Lb.elem; (*Lc).listsize=(*Lc).length=La.length+Lb.length;/*不用InitList()創(chuàng)建空表Lc */ pc=(*Lc).elem=(ElemType *)malloc(*Lc).listsize*sizeof(ElemTyp

21、e);if(!(*Lc).elem) /* 存儲(chǔ)分配失敗 */exit(OVERFLOW); pa_last=La.elem+La.length-1; pb_last=Lb.elem+Lb.length-1;while(pa=pa_last&pb=pb_last) /* 表La和表Lb均非空 */ /* 歸并 */if(*pa=*pb) *pc+=*pa+;else *pc+=*pb+; while(pa=pa_last) /* 表La非空且表Lb空 */ *pc+=*pa+; /* 插入La的剩余元素 */while(pb=pb_last) /* 表Lb非空且表La空 */ *pc+=*pb

22、+; /* 插入Lb的剩余元素 */ void print(ElemType *c) printf(%d ,*c); void main() SqList La,Lb,Lc;int j;InitList(&La); /* 創(chuàng)建空表La */for(j=1;j=5;j+) /* 在表La中插入5個(gè)元素 */ ListInsert(&La,j,j); printf(La= ); /* 輸出表La的容 */ ListTraverse(La,print);InitList(&Lb); /* 創(chuàng)建空表Lb */for(j=1;j=5;j+) /* 在表Lb中插入5個(gè)元素 */ ListInsert(&L

23、b,j,2*j); printf(Lb= ); /* 輸出表Lb的容 */ ListTraverse(Lb,print); MergeList(La,Lb,&Lc); printf(Lc= ); /* 輸出表Lc的容 */ ListTraverse(Lc,print); /* algo2-4.c 修改算法2.7的第一個(gè)循環(huán)語(yǔ)句中的條件語(yǔ)句為開(kāi)關(guān)語(yǔ)句,且當(dāng) */* *pa=*pb時(shí),只將兩者中之一插入Lc。此操作的結(jié)果和算法2.1一樣 */#includec1.h typedef intElemType;#includec2-1.h#includebo2-1.cint p(ElemType c1

24、,ElemType c2) int i;if(c1c2) i=1;elseif(c1=c2) i=0;else i=-1;return i; void MergeList(SqList La,SqList Lb,SqList*Lc) /* 另一種合并線性表的方法根據(jù)算法2.7下的要求修改算法2.7 */ElemType *pa,*pa_last,*pb,*pb_last,*pc; pa=La.elem; pb=Lb.elem; (*Lc).listsize=La.length+Lb.length; /* 此句與算法2.7不同 */ pc=(*Lc).elem=(ElemType *)mallo

25、c(*Lc).listsize*sizeof(ElemType);if(!(*Lc).elem)exit(OVERFLOW); pa_last=La.elem+La.length-1; pb_last=Lb.elem+Lb.length-1;while(pa=pa_last&pb=pb_last) /* 表La和表Lb均非空 */ switch(p(*pa,*pb) /* 此句與算法2.7不同 */ case 0: pb+; case 1: *pc+=*pa+; break; case -1: *pc+=*pb+; while(pa=pa_last) /* 表La非空且表Lb空 */ *pc+

26、=*pa+;while(pb=pb_last) /* 表Lb非空且表La空 */ *pc+=*pb+; (*Lc).length=pc-(*Lc).elem; /* 加此句 */ void print(ElemType *c) printf(%d ,*c); void main() SqList La,Lb,Lc;int j;InitList(&La); /* 創(chuàng)建空表La */for(j=1;j=5;j+) /* 在表La中插入5個(gè)元素 */ ListInsert(&La,j,j); printf(La= ); /* 輸出表La的容 */ ListTraverse(La,print);Ini

27、tList(&Lb); /* 創(chuàng)建空表Lb */for(j=1;jnext=NULL; /* 指針域?yàn)榭?*/return OK; StatusDestroyList(LinkList *L) /* 初始條件:線性表L已存在。操作結(jié)果:銷(xiāo)毀線性表L */ LinkList q;while(*L) q=(*L)-next; free(*L);*L=q; return OK; StatusClearList(LinkList L) /* 不改變L */ /* 初始條件:線性表L已存在。操作結(jié)果:將L重置為空表 */ LinkList p,q; p=L-next; /* p指向第一個(gè)結(jié)點(diǎn) */whi

28、le(p) /* 沒(méi)到表尾 */ q=p-next; free(p); p=q; L-next=NULL; /* 頭結(jié)點(diǎn)指針域?yàn)榭?*/return OK; StatusListEmpty(LinkList L) /* 初始條件:線性表L已存在。操作結(jié)果:假如L為空表,如此返回TRUE,否如此返回FALSE */if(L-next) /* 非空 */return FALSE;elsereturn TRUE; int ListLength(LinkList L) /* 初始條件:線性表L已存在。操作結(jié)果:返回L中數(shù)據(jù)元素個(gè)數(shù) */int i=0; LinkList p=L-next; /* p指

29、向第一個(gè)結(jié)點(diǎn) */while(p) /* 沒(méi)到表尾 */ i+; p=p-next; return i; Status GetElem(LinkList L,int i,ElemType *e) /* 算法2.8 */ /* L為帶頭結(jié)點(diǎn)的單鏈表的頭指針。當(dāng)?shù)趇個(gè)元素存在時(shí),其值賦給e并返回OK,否如此返回ERROR */int j=1; /* j為計(jì)數(shù)器 */ LinkList p=L-next; /* p指向第一個(gè)結(jié)點(diǎn) */while(p&jnext; j+; if(!p|ji) /* 第i個(gè)元素不存在 */return ERROR; *e=p-data; /* 取第i個(gè)元素 */retu

30、rn OK; int LocateElem(LinkList L,ElemType e,Status(*pare)(ElemType,ElemType) /* 初始條件: 線性表L已存在,pare()是數(shù)據(jù)元素判定函數(shù)(滿足為1,否如此為0) */* 操作結(jié)果: 返回L中第1個(gè)與e滿足關(guān)系pare()的數(shù)據(jù)元素的位序。 */* 假如這樣的數(shù)據(jù)元素不存在,如此返回值為0 */int i=0; LinkList p=L-next;while(p) i+;if(pare(p-data,e) /* 找到這樣的數(shù)據(jù)元素 */return i; p=p-next; return 0; Status Pri

31、orElem(LinkList L,ElemType cur_e,ElemType *pre_e) /* 初始條件: 線性表L已存在 */* 操作結(jié)果: 假如cur_e是L的數(shù)據(jù)元素,且不是第一個(gè),如此用pre_e返回它的前驅(qū), */* 返回OK;否如此操作失敗,pre_e無(wú)定義,返回INFEASIBLE */ LinkList q,p=L-next; /* p指向第一個(gè)結(jié)點(diǎn) */while(p-next) /* p所指結(jié)點(diǎn)有后繼 */ q=p-next; /* q為p的后繼 */if(q-data=cur_e) *pre_e=p-data;return OK; p=q; /* p向后移 */

32、 return INFEASIBLE; Status NextElem(LinkList L,ElemType cur_e,ElemType *next_e) /* 初始條件:線性表L已存在 */* 操作結(jié)果:假如cur_e是L的數(shù)據(jù)元素,且不是最后一個(gè),如此用next_e返回它的后繼, */* 返回OK;否如此操作失敗,next_e無(wú)定義,返回INFEASIBLE */ LinkList p=L-next; /* p指向第一個(gè)結(jié)點(diǎn) */while(p-next) /* p所指結(jié)點(diǎn)有后繼 */ if(p-data=cur_e) *next_e=p-next-data;return OK; p=

33、p-next; return INFEASIBLE; Status ListInsert(LinkList L,int i,ElemType e) /* 算法2.9。不改變L */ /* 在帶頭結(jié)點(diǎn)的單鏈線性表L中第i個(gè)位置之前插入元素e */int j=0; LinkList p=L,s;while(p&jnext; j+; if(!p|ji-1) /* i小于1或者大于表長(zhǎng) */return ERROR; s=(LinkList)malloc(sizeof(struct LNode); /* 生成新結(jié)點(diǎn) */ s-data=e; /* 插入L中 */ s-next=p-next; p-ne

34、xt=s;return OK; Status ListDelete(LinkList L,int i,ElemType *e) /* 算法2.10。不改變L */ /* 在帶頭結(jié)點(diǎn)的單鏈線性表L中,刪除第i個(gè)元素,并由e返回其值 */int j=0; LinkList p=L,q;while(p-next&jnext; j+; if(!p-next|ji-1) /* 刪除位置不合理 */return ERROR; q=p-next; /* 刪除并釋放結(jié)點(diǎn) */ p-next=q-next; *e=q-data; free(q);return OK; Status ListTraverse(Li

35、nkList L,void(*vi)(ElemType)/* vi的形參類(lèi)型為ElemTypeElemType&不同 */ /* 初始條件:線性表L已存在 */* 操作結(jié)果:依次對(duì)L的每個(gè)數(shù)據(jù)元素調(diào)用函數(shù)vi()。一旦vi()失敗,如此操作失敗 */ LinkList p=L-next;while(p) vi(p-data); p=p-next; printf(n);return OK; void CreateList(LinkList *L,int n) /* 算法2.11 */ /* 逆位序(插在表頭)輸入n個(gè)元素的值,建立帶表頭結(jié)構(gòu)的單鏈線性表L */int i; LinkList p;

36、*L=(LinkList)malloc(sizeof(struct LNode); (*L)-next=NULL; /* 先建立一個(gè)帶頭結(jié)點(diǎn)的單鏈表 */ printf(請(qǐng)輸入%d個(gè)數(shù)據(jù)n,n);for(i=n;i0;-i) p=(LinkList)malloc(sizeof(struct LNode); /* 生成新結(jié)點(diǎn) */ scanf(%d,&p-data); /* 輸入元素值 */ p-next=(*L)-next; /* 插入到表頭 */ (*L)-next=p; void CreateList2(LinkList *L,int n) /* 正位序(插在表尾)輸入n個(gè)元素的值,建立帶

37、表頭結(jié)構(gòu)的單鏈線性表 */int i; LinkList p,q;*L=(LinkList)malloc(sizeof(struct LNode); /* 生成頭結(jié)點(diǎn) */ (*L)-next=NULL; q=*L; printf(請(qǐng)輸入%d個(gè)數(shù)據(jù)n,n);for(i=1;idata); q-next=p; q=q-next; p-next=NULL; void MergeList(LinkList La,LinkList *Lb,LinkList *Lc)/* 算法2.12 */ /* 單鏈線性表La和Lb的元素按值非遞減排列。 */* 歸并La和Lb得到新的單鏈線性表Lc,Lc的元素也按值

38、非遞減排列 */ LinkList pa=La-next,pb=(*Lb)-next,pc;*Lc=pc=La; /* 用La的頭結(jié)點(diǎn)作為L(zhǎng)c的頭結(jié)點(diǎn) */while(pa&pb)if(pa-datadata) pc-next=pa; pc=pa; pa=pa-next; else pc-next=pb; pc=pb; pb=pb-next; pc-next=pa?pa:pb; /* 插入剩余段 */ free(*Lb); /* 釋放Lb的頭結(jié)點(diǎn) */ Lb=NULL; void visit(ElemType c) /* ListTraverse()調(diào)用的函數(shù)(類(lèi)型要一致) */ printf

39、(%d ,c); void main() int n=5; LinkList La,Lb,Lc; printf(按非遞減順序, ); CreateList2(&La,n); /* 正位序輸入n個(gè)元素的值 */ printf(La=); /* 輸出鏈表La的容 */ ListTraverse(La,visit); printf(按非遞增順序, ); CreateList(&Lb,n); /* 逆位序輸入n個(gè)元素的值 */ printf(Lb=); /* 輸出鏈表Lb的容 */ ListTraverse(Lb,visit); MergeList(La,&Lb,&Lc); /* 按非遞減順序歸并La

40、和Lb,得到新表Lc */ printf(Lc=); /* 輸出鏈表Lc的容 */ ListTraverse(Lc,visit); /* algo2-6.c 利用單鏈表結(jié)構(gòu)處理教科書(shū)圖2.1(學(xué)生健康登記表) */#includec1.h#define NAMELEN 8 /* 最大長(zhǎng)度 */#define CLASSLEN 4 /* 班級(jí)名最大長(zhǎng)度 */struct stud /* 記錄的結(jié)構(gòu) */ char nameNAMELEN+1; long num; char sex;int age; char ClassCLASSLEN+1;int health; ;typedefstruct s

41、tud ElemType; /* 鏈表結(jié)點(diǎn)元素類(lèi)型為結(jié)構(gòu)體 */#includec2-2.h char sta39=健康 ,一般 ,神經(jīng)衰弱; /* 健康狀況(3類(lèi)) */ FILE *fp;StatusInitList(LinkList *L) /* 拷自bo2-2.c */ /* 操作結(jié)果:構(gòu)造一個(gè)空的線性表L */*L=(LinkList)malloc(sizeof(struct LNode); /* 產(chǎn)生頭結(jié)點(diǎn),并使L指向此頭結(jié)點(diǎn) */if(!*L) /* 存儲(chǔ)分配失敗 */exit(OVERFLOW); (*L)-next=NULL; /* 指針域?yàn)榭?*/return OK; St

42、atus ListTraverse(LinkList L,void(*vi)(ElemType) /* 拷自bo2-2.c */ /* 初始條件:線性表L已存在 */* 操作結(jié)果:依次對(duì)L的每個(gè)數(shù)據(jù)元素調(diào)用函數(shù)vi()。一旦vi()失敗,如此操作失敗 */ LinkList p=L-next;while(p) vi(p-data); p=p-next; printf(n);return OK; void InsertAscend(LinkList L,ElemType e) /* 此函數(shù)是由bo2-9.c中的同名函數(shù)改寫(xiě) */ /* 按學(xué)號(hào)非降序插入 */ LinkList q=L,p=L-n

43、ext;while(p&e.nump-data.num) q=p; p=p-next; q-next=(LinkList)malloc(sizeof(struct LNode); /* 插在q后 */ q-next-data=e; q-next-next=p; void Print(struct stud e) /* 顯示記錄e的容 */ printf(%-8s %6ld,e.name,e.num);if(e.sex=m) printf( 男);else printf( 女); printf(%5d %-4s,e.age,e.Class); printf(%9sn,stae.health);

44、void ReadIn(struct stud *e) /* 由鍵盤(pán)輸入結(jié)點(diǎn)信息 */ printf(請(qǐng)輸入(name); printf(請(qǐng)輸入學(xué)號(hào): ); scanf(%ld,&e-num); printf(請(qǐng)輸入性別(m:男 f:女): ); scanf(%*c%c,&e-sex); printf(請(qǐng)輸入年齡: ); scanf(%d,&e-age); printf(請(qǐng)輸入班級(jí)(Class); printf(請(qǐng)輸入健康狀況(0:%s 1:%s 2:%s):,sta0,sta1,sta2); scanf(%d,&e-health); void WriteToFile(struct stud

45、e) /* 將結(jié)點(diǎn)信息寫(xiě)入fp指定的文件 */ fwrite(&e,sizeof(struct stud),1,fp); Status ReadFromFile(struct stud *e) /* 由fp指定的文件讀取結(jié)點(diǎn)信息到e */int i; i=fread(e,sizeof(struct stud),1,fp);if(i=1) /* 讀取文件成功 */return OK;elsereturn ERROR; Status FindFromNum(LinkList L,long num,LinkList *p,LinkList *q) /* 查找表中學(xué)號(hào)為num的結(jié)點(diǎn),如找到,q指向此結(jié)

46、點(diǎn),p指向q的前驅(qū), */* 并返回TRUE;如無(wú)此元素,如此返回FALSE */ *p=L;while(*p) *q=(*p)-next;if(*q&(*q)-data.numnum) /* 因?yàn)槭前磳W(xué)號(hào)非降序排列 */ break;if(*q&(*q)-data.num=num) /* 找到該學(xué)號(hào) */return TRUE; *p=*q; return FALSE; Status FindFromName(LinkList L,char name,LinkList *p,LinkList *q) /* 查找表中為name的結(jié)點(diǎn),如找到,q指向此結(jié)點(diǎn),p指向q的前驅(qū), */* 并返回TRU

47、E;如無(wú)此元素,如此返回FALSE */ *p=L;while(*p) *q=(*p)-next;if(*q&!strcmp(*q)-data.name,name) /* 找到該 */return TRUE; *p=*q; return FALSE; Status DeleteElemNum(LinkList L,long num) /* 刪除表中學(xué)號(hào)為num的元素,并返回TRUE;如無(wú)此元素,如此返回FALSE */ LinkList p,q;if(FindFromNum(L,num,&p,&q) /* 找到此結(jié)點(diǎn),且q指向其,p指向其前驅(qū) */ p-next=q-next; free(q)

48、;return TRUE; return FALSE; Status DeleteElemName(LinkList L,char name) /* 刪除表中為name的元素,并返回TRUE;如無(wú)此元素,如此返回FALSE */ LinkList p,q;if(FindFromName(L,name,&p,&q) /* 找到此結(jié)點(diǎn),且q指向其,p指向其前驅(qū) */ p-next=q-next; free(q);return TRUE; return FALSE; void Modify(ElemType *e) /* 修改結(jié)點(diǎn)容 */ char s80; Print(*e); /* 顯示原容 *

49、/ printf(請(qǐng)輸入待修改項(xiàng)的容,不修改的項(xiàng)按回車(chē)鍵保持原值:n); printf(請(qǐng)輸入(name,s); printf(請(qǐng)輸入學(xué)號(hào): ); gets(s);if(strlen(s) e-num=atol(s); printf(請(qǐng)輸入性別(m:男 f:女): ); gets(s);if(strlen(s) e-sex=s0; printf(請(qǐng)輸入年齡: ); gets(s);if(strlen(s) e-age=atoi(s); printf(請(qǐng)輸入班級(jí)(Class,s); printf(請(qǐng)輸入健康狀況(0:%s 1:%s 2:%s):,sta0,sta1,sta2); gets(s);

50、if(strlen(s) e-health=atoi(s); /* 修改完畢 */ #define N 4 /* student記錄的個(gè)數(shù) */void main() struct stud studentN=王小林,790631,m,18,計(jì)91,0, 紅,790632,f,20,計(jì)91,1, 建平,790633,m,21,計(jì)91,0, 立立,790634,m,17,計(jì)91,2; /* 表的初始記錄 */int i,j,flag=1; long num; char filename13,nameNAMELEN+1;ElemType e; LinkList T,p,q;InitList(&T); /* 初始化鏈表 */while(flag) printf(1:將結(jié)構(gòu)體數(shù)組student中的記錄按學(xué)號(hào)非降序插入鏈表n); printf(2:將文件中的記錄按學(xué)號(hào)非降序插入鏈表n); printf(3:鍵盤(pán)輸入新記錄,并將其按學(xué)號(hào)非降序插入鏈表n); printf(4:刪除鏈表中第一個(gè)有給定學(xué)號(hào)的記錄n); printf(5:刪除鏈表中第一個(gè)有給定的

展開(kāi)閱讀全文
溫馨提示:
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. 裝配圖網(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ì)自己和他人造成任何形式的傷害或損失。

相關(guān)資源

更多
正為您匹配相似的精品文檔
關(guān)于我們 - 網(wǎng)站聲明 - 網(wǎng)站地圖 - 資源地圖 - 友情鏈接 - 網(wǎng)站客服 - 聯(lián)系我們

copyright@ 2023-2025  zhuangpeitu.com 裝配圖網(wǎng)版權(quán)所有   聯(lián)系電話:18123376007

備案號(hào):ICP2024067431號(hào)-1 川公網(wǎng)安備51140202000466號(hào)


本站為文檔C2C交易模式,即用戶上傳的文檔直接被用戶下載,本站只是中間服務(wù)平臺(tái),本站所有文檔下載所得的收益歸上傳人(含作者)所有。裝配圖網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)上載內(nèi)容本身不做任何修改或編輯。若文檔所含內(nèi)容侵犯了您的版權(quán)或隱私,請(qǐng)立即通知裝配圖網(wǎng),我們立即給予刪除!