清華嚴蔚敏《大數據結構》地全部代碼實現(xiàn)C語言

上傳人:m**** 文檔編號:76430011 上傳時間:2022-04-18 格式:DOC 頁數:51 大?。?82KB
收藏 版權申訴 舉報 下載
清華嚴蔚敏《大數據結構》地全部代碼實現(xiàn)C語言_第1頁
第1頁 / 共51頁
清華嚴蔚敏《大數據結構》地全部代碼實現(xiàn)C語言_第2頁
第2頁 / 共51頁
清華嚴蔚敏《大數據結構》地全部代碼實現(xiàn)C語言_第3頁
第3頁 / 共51頁

本資源只提供3頁預覽,全部文檔請下載后查看!喜歡就下載吧,查找使用更方便

50 積分

下載資源

資源描述:

《清華嚴蔚敏《大數據結構》地全部代碼實現(xiàn)C語言》由會員分享,可在線閱讀,更多相關《清華嚴蔚敏《大數據結構》地全部代碼實現(xiàn)C語言(51頁珍藏版)》請在裝配圖網上搜索。

1、/* cl.h (程序名)*/#in elude#in elude#in elude#in eludevmalloc .h /* malloc() 等 */* INT MAX等 */#in clude/* EOF(=AZ 或 F6),NULL */#in clude#in clude#in clude/* atoi() */ /* eof() */ /* floor(),ceil(),abs() */#in clude /* exit() */*函數結果狀態(tài)代碼*/ #defi ne TRUE 1#defi ne FALSE 0#defi ne OK 1#defi ne ERROR 0#def

2、i ne INFEASIBLE -1/* #define OVERFLOW -2因為在 math.h中已定義 OVERFLO的值為3,故去掉此行*/typedef int Status ; /* Status 是函數的類型,其值是函數結果狀態(tài)代碼,如OK等*/typedef int Boolean ; /* Boolean 是布爾類型,其值是 TRUE或 FALSE */* algo2-1.c實現(xiàn)算法2.1的程序*/#include cl.htypedef intElemType;#include c2-1.h/*c2-1.h線性表的動態(tài)分配順序存儲結構*/#define LIST_INIT_

3、SIZE 10 /*線性表存儲空間的初始分配量*/#define LISTINCREMENT 2/* 線性表存儲空間的分配增量*/typedef structElemType *elem; /* 存儲空間基址 */int length ; /* 當前長度 */int listsize ; /* 當前分配的存儲容量 (以sizeof( ElemType)為單位)*/ SqList ;#include bo2-1.c/* bo2-1.c順序表示的線性表(存儲結構由c2-1.h定義)的基本操作(12個)*/Status InitList (SqList *L) /* 算法 2.3 */ /*操作結果

4、:構造一個空的順序線性表*/(*L). elem=( ElemType*) malloc (LIST_INIT_SIZE *sizeof ( ElemType);if (!( *L). elem)exit (OVERFLOW);/* 存儲分配失敗 */(*L). length =0; /* 空表長度為 0 */(*L). listsize =LIST_INIT_SIZE ; /* 初始存儲容量 */ return OK;Status DestroyList (SqList*L) /*初始條件:順序線性表L已存在。操作結果:銷毀順序線性表L */free( *L). elem);(*L). el

5、em=NULL;(*L). length =0;(*L). listsize =0; return OK;Status ClearList (SqList *L) /*初始條件:順序線性表L已存在。操作結果:將L重置為空表*/(*L). length =0;return OK;Status ListEmpty (SqListL) /*初始條件:順序線性表L已存在。操作結果:若L為空表,則返回 TRUE否則返回FALSE */if (L. length =0)return TRUE;elsereturn FALSE;int List Length (SqList L) /*初始條件:順序線性表L

6、已存在。操作結果:返回L中數據元素個數*/return L. length ;Status Get Elem( SqList L, int i, ElemType *e) /*初始條件:順序線性表L已存在,1 i w ListLength(L) */*操作結果:用e返回L中第i個數據元素的值*/if (iL. length )exit (ERROR);*e=*(L. elem+i-1);return OK;int Locate Elem( SqList L, ElemType e, Status (*compare)( ElemType, ElemType) /*初始條件:順序線性表L已存在,

7、compare()是數據元素判定函數(滿足為1,否則為0) */*操作結果:返回L中第1個與e滿足關系compare()的數據元素的位序。*/*若這樣的數據元素不存在,則返回值為0。算法2.6 */ElemType *p;int i=1; /* i的初值為第1個元素的位序*/p=L. elem; /* p的初值為第1個元素的存儲位置*/while (i=L. length &!compare(*p+,e)+i;if (i=L. length )return i;elsereturn 0;Status Prior Elem( SqList L, ElemType cur_e, ElemType

8、*pre_e) /*初始條件:順序線性表L已存在*/*操作結果:若cur_e是L的數據元素,且不是第一個,則用pre_e返回它的前驅,*/ /*否則操作失敗,pre_e無定義*/int i=2;ElemType *p=L. elem+1;while (iL. length )return INFEASIBLE;else*pre_e=*-p;return OK;Status Next Elem(SqList L, ElemType cur_e, ElemType *next_e) /*初始條件:順序線性表L已存在*/*操作結果:若cur_e是L的數據元素,且不是最后一個,則用next_e返回它的

9、后繼, */*否則操作失敗,next_e無定義*/int i=1;ElemType *p=L. elem;while (iL. length &*p!=cur_e)i+;p+;if (i=L. length )return INFEASIBLE;else*n ext_e=*+p;return OK;Status List In sert(SqList *L, i nt i, ElemType e) /* 算法 2.4 */ /*初始條件:順序線性表L已存在,1 i ListLength(L)+1 */*操作結果:在L中第i個位置之前插入新的數據元素e, L的長度加1 */ElemType *n

10、 ewbase,*q,*p;if (i(*L). length +1) /* i值不合法 */return ERROR;if ( *L). length =(*L). listsize ) /*當前存儲空間已滿,增加分配*/n ewbase=( ElemType*)realloc( *L). elem,( *L). listsize +LISTINCREMENT)Sizeof (ElemType);if (!newbase)exit (OVERFLOW); /* 存儲分配失敗 */(*L). elem =newbase; /* 新基址 */(*L). listsize +=LISTINCREM

11、ENT;/* 增加存儲容量 */q=( *L). elem+i-1; /* q 為插入位置 */for (p=( *L). elem+(*L). length -1;p=q;-p)/* 插入位置及之后的元素右移*/*(p+1)=*p;*q=e;/* 插入 e */+( *L). length ; /* 表長增 1 */return OK;Status ListDelete( SqList *L, int i, ElemType *e)/* 算法 2.5 */ /*初始條件:順序線性表L已存在,1 i ListLength(L) */*操作結果:刪除L的第i個數據元素,并用e返回其值,L的長度減

12、1 */ElemType *p,*q;if (i(*L). length ) /* i值不合法 */return ERROR;p=( *L). elem+i-1; /* p為被刪除元素的位置 */*e=*p;/*被刪除元素的值賦給 e */q=( *L). elem+(*L). length -1;/* 表尾元素的位置 */for什+p;p=q;+p)/*被刪除元素之后的元素左移*/*(p-1)=*p;(*L). length -;/* 表長減 1 */return OK;Status ListTraverse( SqList L,void(*vi)( ElemType*) /*初始條件:順序

13、線性表L已存在*/*操作結果:依次對L的每個數據元素調用函數vi()。一旦vi()失敗,則操作失敗*/* vi()的形參加& ,表明可通過調用 vi()改變元素的值*/ElemType *p;int i;p=L. elem;for (i=1;i=L.length ;i+)vi(p+);pr int f(n);return OK;Status equal( ElemType c1, ElemType c2) /*判斷是否相等的函數,Union()用到*/if (c1=c2)return TRUE;elsereturn FALSE;void Union( SqList *La, SqList Lb

14、) /* 算法 2.1 */ /*將所有在線性表Lb中但不在La中的數據元素插入到La中*/ElemType e;int La_len,Lb_len;int i;La_len=ListLength (*L a); /* 求線性表的長度 */Lb_len=ListLength (Lb);for (i=1;i=Lb_len;i+)GetElem(Lb,i,&e);/*取Lb中第i個數據元素賦給 e */if (!Locate Elem( *La,e,equal) /* La 中不存在和e相同的元素,則插入之*/ ListI nsert(La,+La_le n, e);void pr int (El

15、emType *c)pr int f(%d ,*c);void mai n()SqList La,Lb;Status i;int j;i= In itList (&La);if (i=1)/* 創(chuàng)建空表 La成功*/for (j=1;j=5;j+)/*在表La中插入5個元素*/i=List In sert(&La,j,j);pr int f(La= );/* 輸出表 La 的內容 */ListTraverse(La,print );InitList(&Lb); /*也可不判斷是否創(chuàng)建成功*/for (j=1;j=5;j+)/* 在表Lb中插入5個元素*/i=ListI nsert(&Lb,j,

16、2*j);pr int f(Lb= );/* 輸出表 Lb 的內容 */ListTraverse(Lb,pr int );Un io n(&La,Lb);pr int f(new La= );/* 輸出新表 La 的內容 */ListTraverse(La,print );/* algo2-2.c實現(xiàn)算法 22的程序*/#include cl.htypedef intElemType;#include c2-1.h#include bo2-1.c void MergeList( SqList La, SqList Lb, SqList *Lc) /* 算法 2.2 */ /*已知線性表La和L

17、b中的數據元素按值非遞減排列。*/*歸并La和Lb得到新的線性表 Lc,Lc的數據元素也按值非遞減排列*/int i=1,j=1,k=O;int La_len,Lb_len;ElemType ai,bj;InitList (Lc);/* 創(chuàng)建空表 Lc */La_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)List In sert(Lc,+k,ai);+i;elseLi

18、stI nsert(Lc,+k,bj);+j;while (i=La_len)/* 表 La 非空且表 Lb 空 */Get Elem(La,i+, &ai);List In sert(Lc,+k,ai);while (j=Lb_len)/* 表 Lb 非空且表 La 空 */Get Elem(Lb,j+, &bj);ListI nsert(Lc,+k,bj);void pr int (ElemType *c)pr int f(%d ,*c);void mai n()SqList La,Lb,Lc;int j,a4=3,5,8,11,b7=2,6,8,9,11,15,20;In itList(

19、&La);/*創(chuàng)建空表La */for (j=1;j=4;j+)/*在表La中插入4個兀素*/ListI nsert(&La,j,aj-1);pr int f(La=);/*輸出表La的內容*/ListTraverse(La,print );In itList(&Lb);/*創(chuàng)建空表Lb */for (j=1;j=7;j+)/* 在表Lb中插入7個元素*/ListI nsert(&Lb,j,bj-1);pr int f(Lb= );/* 輸出表 Lb 的內容 */ListTraverse(Lb,pr int );MergeList(La,Lb,&Lc);pr int f(Lc= );/* 輸出

20、表 Lc 的內容 */ListTraverse(Lc,pr int );/* algo2-3.c實現(xiàn)算法2.7的程序*/#include cl.htypedef intElemType;#include c2-1.h#include bo2-1.cvoid MergeList( SqList La, SqList Lb, SqList *Lc) /* 算法 2.7 */ /*已知順序線性表 La和Lb的元素按值非遞減排列。*/*歸并La和Lb得到新的順序線性表Lc,Lc的元素也按值非遞減排列*/ElemType *pa,*pa_last,*pb,*pb_last,*pc;pa=La. elem

21、;pb=Lb. elem;Lc(*Lc). listsize =(*Lc). length =La. length +Lb. length ; /* 不用 InitList()創(chuàng)建空表*/pc=( *Lc). elem =( ElemType *) malloc ( *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_

22、last)/* 表 La 和表 Lb 均非空 */*歸并*/if (*pa=*pb)*pc+=*pa+;else*pc+=*pb+;while (pa=pa_last)*pc+=*pa+;/*while (pb=pb_last)*pc+=*pb+;/*/*表La非空且表Lb空*/ 插入La的剩余元素*/* 表Lb非空且表 La空*/插入Lb的剩余元素*/void pr int (ElemType *c)pr int f(%d ,*c);void mai n()SqList La,Lb,Lc;int j;InitList(&La);/* 創(chuàng)建空表 La */for (j=1;j=5;j+)/*

23、在表La中插入5個元素*/ListI nsert (&La,j,j);pr int f(La= );/* 輸出表 La 的內容 */ListTraverse(La,print );InitList(&Lb);/* 創(chuàng)建空表 Lb */for (j=1;j=5;j+)/* 在表Lb中插入5個元素*/ListI nsert(&Lb,j,2*j);pr int f(Lb= );/* 輸出表 Lb 的內容 */ListTraverse(Lb,pr int );MergeList(La,Lb,&Lc);pr int f(Lc= );/* 輸出表 Lc 的內容 */ListTraverse(Lc,pr i

24、nt );/* algo2-4.c 修改算法2.7的第一個循環(huán)語句中的條件語句為開關語句,且當 */ /* *pa=*pb 時,只將兩者中之一插入Lc。此操作的結果和算法2.1相同*/#include c1.h typedef int ElemType;#include c2-1.h#include bo2-1.cint comp( ElemType c1, ElemType c2) int i;if (c1c2)i=1;else if (c1=c2)i=0;elsei=-1;return i;void MergeList( SqList La, SqList Lb, SqList *Lc)

25、/*另一種合并線性表的方法(根據算法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 *) malloc ( *Lc). listsize * sizeof (ElemType); if (!( *Lc). elem)exit (OVERFLOW);pa_last=La.elem+La. length -1

26、;pb_last=Lb.elem+Lb. length -1;while (pa=pa_last&pb=pb_last)/* 表 La 和表 Lb 均非空 */switch(comp(*pa,*pb)/* 此句與算法 2.7 不同 */case 0: pb+;case 1:*pc+=*pa+;break;case -1:*pc+=*pb+;while (pa=pa_last) /* 表 La 非空且表 Lb 空 */*pc+=*pa+;while (pb=pb_last) /* 表 Lb 非空且表 La 空 */*pc+=*pb+;(*Lc). length =pc-( *Lc). elem;

27、 /* 加此句 */void pr int (ElemType *c) pr int f(%d ,*c);void mai n()SqList La,Lb,Lc;int j;InitList(&La); /* 創(chuàng)建空表 La */for (j=1;j=5;j+)/* 在表La中插入5個元素*/ListI nsert (&La,j,j);pr int f(La= );/* 輸出表 La 的內容 */ListTraverse(La,print );InitList(&Lb); /* 創(chuàng)建空表 Lb */for (j=1;jnext=NULL;/* 指針域為空 */return OK;Status

28、DestroyList (Li nkList *L) /*初始條件:線性表L已存在。操作結果:銷毀線性表L */Lin kList q;while (*L)q=(*L)- next;free( *L);*L=q;return OK;Status ClearList (LinkList L) /* 不改變 L */ /*初始條件:線性表L已存在。操作結果:將L重置為空表*/Lin kList p,q;p=L- next; /* p指向第一個結點*/while (p) /* 沒到表尾*/q=p-n ext;free(p);p=q;L- next=NULL;/*頭結點指針域為空*/return OK

29、;Status ListEmpty (LinkList L) /*初始條件:線性表 L已存在。操作結果:若 L為空表,則返回TRUE否則返回FALSE*/if (L-next) /* 非空 */return FALSE;elsereturn TRUE;int List Length (LinkList L) /*初始條件:線性表L已存在。操作結果:返回L中數據元素個數*/int i=0;Lin kList p=L- next;/* p 指向第一個結點 */while (p) /* 沒到表尾*/i+;p=p-n ext;return i;Status Get Elem(LinkList L, i

30、nt i, ElemType *e)/* 算法 2.8 */ /* L為帶頭結點的單鏈表的頭指針。當第i個元素存在時,其值賦給e并返回OK,否則返回 ERROR */int j=1;/* j 為計數器*/Lin kList p=L- next;/* p 指向第一個結點 */while (p&jn ext;j+;if (!p|ji)/*第i個元素不存在*/return ERROR;*e=p-data; /* 取第 i 個元素 */return OK;int Locate Elem(LinkList L, ElemType e, Status (*compare)( ElemType, ElemT

31、ype) /*初始條件:線性表L已存在,compare()是數據元素判定函數(滿足為1,否則為0) */ /*操作結果:返回L中第1個與e滿足關系compare。的數據元素的位序。*/*若這樣的數據元素不存在,則返回值為0 */int i=0;Lin kList p=L-n ext;while (p)i+;if (compare(p-data,e) /*找到這樣的數據元素*/return i;p=p-n ext;return 0;Status Prior Elem(LinkList L, ElemType cur_e, ElemType *pre_e) /*初始條件:線性表L已存在*/*操作結

32、果:若cur_e是L的數據元素,且不是第一個,則用pre_e返回它的前驅,*/*返回OK;否則操作失敗,pre_e無定義,返回INFEASIBLE */Lin kList q,p=L- next;/* p 指向第一個結點 */while (p-next)/* p所指結點有后繼 */q=p-next;/* q 為 p 的后繼 */if (q-data=cur_e)*pre_e=p-data;return OK;p=q; /* p 向后移*/return INFEASIBLE;Status Next Elem(LinkList L,ElemType cur_e, ElemType *next_e)

33、 /*初始條件:線性表 L已存在*/*操作結果:若cur_e是L的數據元素,且不是最后一個,則用next_e返回它的后繼,*/*返回OK;否則操作失敗,next_e無定義,返回INFEASIBLE */Lin kList p=L- next;/* p 指向第一個結點 */while (p-next)/* p所指結點有后繼 */if (p-data=cur_e)*n ext_e=p-n ext-data;return OK;p=p-n ext;return INFEASIBLE;Status List In sert(Li nkList L,int i, ElemType e) /* 算法 2.

34、9。不改變 L */ /*在帶頭結點的單鏈線性表L中第i個位置之前插入元素e */int j=0;Lin kList p=L,s;while (p&jn ext;j+;if (!p|ji-1)/* i 小于1或者大于表長*/return ERROR;s=(LinkList) malloc (sizeof (struct LNode); /* 生成新結點 */s-data=e; /* 插入 L 中 */s-n ext=p-n ext;p_n ext=s;return OK;Status ListDelete(LinkList L,int i, ElemType *e) /* 算法 2.10。不改

35、變 L */ /*在帶頭結點的單鏈線性表L中,刪除第i個元素,并由e返回其值*/int j=0;Lin kList p=L,q;while (p-next&jn ext;j+;if (!p-next|ji-1)/* 刪除位置不合理 */return ERROR;q=p-next;/*刪除并釋放結點*/p_n ext=q _n ext;*e=q_data;free(q);return OK;Status ListTraverse(LinkList L,void(*vi)(ElemType)/* vi的形參類型為 ElemType,與bo2-1.c中相應函數的形參類型ElemType&不同*/ /

36、*初始條件:線性表 L已存在*/*操作結果:依次對L的每個數據元素調用函數vi()。一旦vi()失敗,則操作失敗*/Lin kList p=L-n ext;while (p)vi(p-data);p=p-n ext;pr int f(n);return OK;void CreateList(LinkList*L, int n) /* 算法 2.11 */ /*逆位序(插在表頭)輸入n個元素的值,建立帶表頭結構的單鏈線性表L */int i;Lin kList p;*L=(LinkList)malloc (sizeof (struct LNode);(*L)- next=NULL; /* 先建立

37、一個帶頭結點的單鏈表*/pr int f(請輸入d個數據n,n);for (i=n;i0;_i)p=(LinkList) malloc (sizeof (struct LNode); /* 生成新結點 */scanf(%d,&p-data);/* 輸入元素值 */p-next=(*L )-next; /* 插入到表頭 */(*L)-n ext=p;void CreateList2(LinkList *L, int n) /*正位序(插在表尾)輸入n個元素的值,建立帶表頭結構的單鏈線性表*/int i;Lin kList p,q;*L=(LinkList)malloc (sizeof (stru

38、ct LNode); /* 生成頭結點 */(*L)- next=NULL;q= *L;pr int f(請輸入d個數據n,n);for (i=1;idata);q_n ext=p;q=q_n ext;p- next=NULL;void MergeList(LinkList La,LinkList*Lb,LinkList *Lc)/* 算法 2.12 */ /*已知單鏈線性表 La和Lb的元素按值非遞減排列。*/*歸并La和Lb得到新的單鏈線性表Lc,Lc的元素也按值非遞減排列*/LinkList pa=La-next,pb=(*L b)-next,pc;*Lc=pc=La; /*用La的頭結

39、點作為 Lc的頭結點*/while (pa&pb)if (pa-datadata)pc- n ext=pa;pc=pa;pa=pa-n ext;elsepc- n ext=pb;pc=pb;pb=pb-n ext;pc-next=pa?pa:pb; /* 插入剩余段 */free( *Lb); /*釋放Lb的頭結點*/Lb=NULL;void visit( ElemType c) /* ListTraverse() 調用的函數(類型要一致)*/pr int f(%d ”,c);void mai n()int n=5;Lin kList La,Lb,Lc;pr int f(按非遞減順序,);Cr

40、eateList2(&La,n);/*正位序輸入 n個元素的值*/pr int f(La=);/*輸出鏈表La的內容*/ListTraverse(La,visit);pr int f(按非遞增順序,);CreateList(&Lb,n);/* 逆位序輸入 n個元素的值*/pr int f(Lb=);/*輸出鏈表Lb的內容*/ListTraverse(Lb,visit);MergeList(La,&Lb,&Lc);/* 按非遞減順序歸并 La和Lb,得到新表Lc */pr int f(Lc=);/*輸出鏈表Lc的內容*/ListTraverse(Lc,visit);/* algo2-6.c利用單

41、鏈表結構處理教科書圖2.1(學生健康登記表)*/#include c1.h#defi ne NAMELEN 8 /* 姓名最大長度 */#defi ne CLASSLEN 4 /* 班級名最大長度 */struct stud /* 記錄的結構*/char nameNAMELEN+1;long num;char sex;int age;char ClassCLASSLEN+1;int health;typedef struct stud ElemType; /*鏈表結點元素類型為結構體*/#include c2-2.hchar sta39= 健康,” 一般,”神經衰弱;/*健康狀況(3類)*/F

42、ILE *fp;Status InitList(LinkList*L) /* 拷自 bo2-2.c */ /*操作結果:構造一個空的線性表L */*L=(LinkList)malloc (sizeof (struct LNode); /* 產生頭結點,并使 L 指向此頭結點*/if (! *L) /*存儲分配失敗*/exit (OVERFLOW);(*L)-next=NULL; /* 指針域為空 */return OK;Status ListTraverse(LinkList L,void(*vi)(ElemType) /* 拷自 bo2-2.c */ /*初始條件:線性表 L已存在*/*操作

43、結果:依次對L的每個數據元素調用函數vi()。一旦vi()失敗,則操作失敗*/Lin kList p=L-n ext;while (p)vi(p-data);p=p-n ext;pr int f(n);return OK;void In sertAsce nd(Li nkList L,ElemType e) /* 此函數是由 bo2-9.c 中的同名函數改寫*/ /*按學號非降序插入*/Lin kList q=L,p=L-n ext;while (p&e.nump-data.num)q=p;p=p-n ext;q-next=(LinkList)malloc (sizeof (struct LN

44、ode); /* 插在 q 后 */q-n ext-data=e;q_n ext- n ext=p; void Print (struct stud e) /*顯示記錄e的內容*/pr int f(%-8s %6ld,e.name,e.num);if (e.sex=m)pr int f(男);elsepr int f(女);pr int f(%5d %-4s,e.age,e.Class);pr int f(%9sn,stae.health);void Readln( struct stud *e) /*由鍵盤輸入結點信息*/pr int f(請輸入姓名(n ame);pr int f(請輸入學

45、號:);sca nf(%ld, &e- nu m);pr int f(請輸入性別(m:男f:女):);sca nf(%*c%c, &e-sex);pr int f(請輸入年齡:);sca nf(%d, &e-age);pr int f(請輸入班級(Class);pr int f(請輸入健康狀況(0:%s 1:%s 2:%s):,sta0,sta1,sta2); sca nf(%d, &e-health);void WriteToFile( struct stud e) /*將結點信息寫入fp指定的文件*/fwrite(&e,sizeof (struct stud),1,fp);Status R

46、eadFromFile( struct stud *e) /*由fp指定的文件讀取結點信息到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) /*查找表中學號為num的結點,如找到,q指向此結點,p指向q的前驅,*/*并返回TRUE如無此元素,則返回FALSE */*p=L;while (*p)*q=(*p)- next;if (*

47、q&(*q)-data.numnum)/*因為是按學號非降序排列*/break;if (*q&(*q)-data.num=num)/* 找到該學號 */return TRUE;*p=*q;return FALSE;Status FindFromName(LinkList L,char name,LinkList *p,LinkList *q) /*查找表中姓名為name的結點,如找到,q指向此結點,p指向q的前驅,*/*并返回TRUE如無此元素,則返回FALSE */*p=L;while (*p)*q=(*p)- next;if (*q&!strcmp(*q)-data.name,name)/

48、* 找到該姓名 */return TRUE;*p=*q;FALSE; returnStatus Delete ElemNum(LinkList L,long num) /*刪除表中學號為num的元素,并返回TRUE如無此元素,則返回 FALSE */Lin kList p,q;if (FindFromNum(L,num,&p,&q)/*找到此結點,且q指向其,p指向其前驅*/p_n ext=q _n ext;free(q);return TRUE;return FALSE;Status Delete ElemName(LinkList L,char name) /*刪除表中姓名為name的元素

49、,并返回 TRUE如無此元素,則返回 FALSE */Lin kList p,q;if (FindFromName(L,name,&p,&q)/* 找到此結點,且q指向其,p指向其前驅*/p_n ext=q _n ext;free(q);return TRUE;return FALSE;void Modf y( ElemType *e) /*修改結點內容*/char s80;Pr int (*e);/* 顯示原內容 */pr int f(請輸入待修改項的內容,不修改的項按回車鍵保持原值:n);pr int f(請輸入姓名(n ame,s);pr int f(請輸入學號:);gets(s);if

50、 (strlen(s)e-num=atol(s);pr int f(請輸入性別(m:男f:女):);gets(s);if (strlen(s)e_sex=s0;pr int f(請輸入年齡:);gets(s);if (strlen(s)e_age=atoi(s);pr int f(請輸入班級(Class,s);pr int f(請輸入健康狀況(0:%s 1:%s 2:%s):,sta0,sta1,sta2); gets(s);if (strlen(s)e-health=atoi(s);/* 修改完畢 */#define N 4 /* student記錄的個數 */void mai n()str

51、uct stud stude ntN=王小林,790631,m,18,計 91,0,陳紅,790632,f,20,計 91,1,劉建平,790633,m,21,計 91,0,*/張立立,790634,m,17,計91,2;/*表的初始記錄int i,j,flag=1;long num;char file name13, nameNAMELEN+1;ElemType e;Lin kList T,p,q;InitList(&T); /* 初始化鏈表 */while (flag)pr int f(1:將結構體數組student中的記錄按學號非降序插入鏈表n);pr int f(2:將文件中的記錄按學

52、號非降序插入鏈表n);pr int f(3:鍵盤輸入新記錄,并將其按學號非降序插入鏈表n);printf(4:刪除鏈表中第一個有給定學號的記錄n);printf(5:刪除鏈表中第一個有給定姓名的記錄n”);printf(6:修改鏈表中第一個有給定學號的記錄n”);printf(7:修改鏈表中第一個有給定姓名的記錄n);printf(8:查找鏈表中第一個有給定學號的記錄n);printf(9:查找鏈表中第一個有給定姓名的記錄n”);pr int f(10:顯示所有記錄11:將鏈表中的所有記錄存入文件12:結束n);pr int f(請選擇操作命令:);scan f(%d,&i);switch(i

53、)case 1:for (j=0;jN;j+)In sertAsce nd(T,stude ntj);break;case 2: pr int f(請輸入文件名:”);sea nf(%s,file name);if (fp=fopen(filename,rb)=NULL)print f(打開文件失敗!n);elsewhile (ReadFromFile(&e)In sertAsce nd(T,e);fclose(fp);break;case 3: ReadI n(& e);In sertAsce nd(T,e);break;case 4: print f(請輸入待刪除記錄的學號:);scan f(%ld, &nu m);if (!Delete ElemNum(T,num)print f(沒有學號為 %ld的記錄n,num);break;case 5: pr int f(請輸入待刪除記錄的姓名:);sca nf(%s, name);if (!Delete ElemName(T,name)print f(沒有姓名為 %s的記錄n”,name);break;ca

展開閱讀全文
溫馨提示:
1: 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
2: 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
3.本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
5. 裝配圖網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

相關資源

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

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

備案號:ICP2024067431-1 川公網安備51140202000466號


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