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

歡迎來到裝配圖網(wǎng)! | 幫助中心 裝配圖網(wǎng)zhuangpeitu.com!
裝配圖網(wǎng)
ImageVerifierCode 換一換
首頁 裝配圖網(wǎng) > 資源分類 > DOC文檔下載  

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

  • 資源ID:89643189       資源大?。?span id="24d9guoke414" class="font-tahoma">211KB        全文頁數(shù):65頁
  • 資源格式: DOC        下載積分:10積分
快捷下載 游客一鍵下載
會員登錄下載
微信登錄下載
三方登錄下載: 微信開放平臺登錄 支付寶登錄   QQ登錄   微博登錄  
二維碼
微信掃一掃登錄
下載資源需要10積分
郵箱/手機:
溫馨提示:
用戶名和密碼都是您填寫的郵箱或者手機號,方便查詢和重復(fù)下載(系統(tǒng)自動生成)
支付方式: 支付寶    微信支付   
驗證碼:   換一換

 
賬號:
密碼:
驗證碼:   換一換
  忘記密碼?
    
友情提示
2、PDF文件下載后,可能會被瀏覽器默認打開,此種情況可以點擊瀏覽器菜單,保存網(wǎng)頁到桌面,就可以正常下載了。
3、本站不支持迅雷下載,請使用電腦自帶的IE瀏覽器,或者360瀏覽器、谷歌瀏覽器下載即可。
4、本站資源下載后的文檔和圖紙-無水印,預(yù)覽文檔經(jīng)過壓縮,下載后原文更清晰。
5、試題試卷類文檔,如果標(biāo)題沒有明確說明有答案則都視為沒有答案,請知曉。

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

/* (程序名) */#include<string.h>#include<ctype.h>#include<malloc.h> /* malloc()等 */#include<limits.h> /* INT_MAX等 */#include<stdio.h> /* EOF(=Z或F6),NULL */#include<stdlib.h> /* atoi() */#include<io.h> /* eof() */#include<math.h> /* floor(),ceil(),abs() */#include<process.h> /* exit() */* 函數(shù)結(jié)果狀態(tài)代碼 */#defineTRUE 1#defineFALSE 0#defineOK 1#defineERROR 0#defineINFEASIBLE -1/* #define OVERFLOW -2 因為在math.h中已定義OVERFLOW的值為3,故去掉此行 */ typedef intStatus; /* Status是函數(shù)的類型,其值是函數(shù)結(jié)果狀態(tài)代碼,如OK等 */ typedef intBoolean; /* Boolean是布爾類型,其值是TRUE或FALSE */* algo2-1.c 實現(xiàn)算法2.1的程序 */#include"c1.h" typedef intElemType;#include"c2-1.h"/*c2-1.h 線性表的動態(tài)分配順序存儲結(jié)構(gòu) */#defineLIST_INIT_SIZE 10 /* 線性表存儲空間的初始分配量 */#defineLISTINCREMENT 2/* 線性表存儲空間的分配增量 */typedefstruct ElemType*elem; /* 存儲空間基址 */intlength; /* 當(dāng)前長度 */intlistsize; /* 當(dāng)前分配的存儲容量(以sizeof(ElemType)為單位) */ SqList;#include"bo2-1.c"/* bo2-1.c 順序表示的線性表(存儲結(jié)構(gòu)由c2-1.h定義)的根本操作(12個) */StatusInitList(SqList*L) /* 算法2.3 */ /* 操作結(jié)果:構(gòu)造一個空的順序線性表 */ (*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; StatusDestroyList(SqList*L) /* 初始條件:順序線性表L已存在。操作結(jié)果:銷毀順序線性表L */ free(*L).elem); (*L).elem=NULL; (*L).length=0; (*L).listsize=0;return OK; StatusClearList(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ù)元素個數(shù) */return L.length; Status GetElem(SqList L,int i,ElemType *e) /* 初始條件:順序線性表L已存在,1iListLength(L) */* 操作結(jié)果:用e返回L中第i個數(shù)據(jù)元素的值 */if(i<1|i>L.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個與e滿足關(guān)系pare()的數(shù)據(jù)元素的位序。 */* 假如這樣的數(shù)據(jù)元素不存在,如此返回值為0。算法2.6 */ElemType *p;int i=1; /* i的初值為第1個元素的位序 */ p=L.elem; /* p的初值為第1個元素的存儲位置 */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ù)元素,且不是第一個,如此用pre_e返回它的前驅(qū), */* 否如此操作失敗,pre_e無定義 */int i=2;ElemType *p=L.elem+1;while(i<=L.length&&*p!=cur_e) p+; i+; if(i>L.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ù)元素,且不是最后一個,如此用next_e返回它的后繼, */* 否如此操作失敗,next_e無定義 */int i=1;ElemType *p=L.elem;while(i<L.length&&*p!=cur_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個位置之前插入新的數(shù)據(jù)元素e,L的長度加1 */ElemType *newbase,*q,*p;if(i<1|i>(*L).length+1) /* i值不合法 */return ERROR;if(*L).length>=(*L).listsize) /* 當(dāng)前存儲空間已滿,增加分配 */ newbase=(ElemType *)realloc(*L).elem,(*L).listsize+LISTINCREMENT)*sizeof(ElemType);if(!newbase)exit(OVERFLOW); /* 存儲分配失敗 */ (*L).elem=newbase; /* 新基址 */ (*L).listsize+=LISTINCREMENT; /* 增加存儲容量 */ 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已存在,1iListLength(L) */* 操作結(jié)果:刪除L的第i個數(shù)據(jù)元素,并用e返回其值,L的長度減1 */ElemType *p,*q;if(i<1|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*) /* 初始條件:順序線性表L已存在 */* 操作結(jié)果:依次對L的每個數(shù)據(jù)元素調(diào)用函數(shù)vi()。一旦vi()失敗,如此操作失敗 */* vi()的形參加'&',明確可通過調(diào)用vi()改變元素的值 */ElemType *p;int i; p=L.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); /* 求線性表的長度 */ Lb_len=ListLength(Lb);for(i=1;i<=Lb_len;i+) GetElem(Lb,i,&e); /* 取Lb中第i個數(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<=5;j+) /* 在表La中插入5個元素 */ i=ListInsert(&La,j,j); printf("La= "); /* 輸出表La的容 */ ListTraverse(La,print);InitList(&Lb); /* 也可不判斷是否創(chuàng)建成功 */for(j=1;j<=5;j+) /* 在表Lb中插入5個元素 */ i=ListInsert(&Lb,j,2*j); printf("Lb= "); /* 輸出表Lb的容 */ ListTraverse(Lb,print); Union(&La,Lb); printf("new La= "); /* 輸出新表La的容 */ ListTraverse(La,print);/* algo2-2.c 實現(xiàn)算法2.2的程序 */#include"c1.h" typedef intElemType;#include"c2-1.h"#include"bo2-1.c"void 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 */ 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) 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空 */ GetElem(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個元素 */ ListInsert(&La,j,aj-1); printf("La= "); /* 輸出表La的容 */ ListTraverse(La,print);InitList(&Lb); /* 創(chuàng)建空表Lb */for(j=1;j<=7;j+) /* 在表Lb中插入7個元素 */ ListInsert(&Lb,j,bj-1); printf("Lb= "); /* 輸出表Lb的容 */ ListTraverse(Lb,print); MergeList(La,Lb,&Lc); printf("Lc= "); /* 輸出表Lc的容 */ ListTraverse(Lc,print); /* algo2-3.c 實現(xiàn)算法2.7的程序 */#include"c1.h" typedef intElemType;#include"c2-1.h"#include"bo2-1.c"void 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; pb=Lb.elem; (*Lc).listsize=(*Lc).length=La.length+Lb.length;/*不用InitList()創(chuàng)建空表Lc */ 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_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+; /* 插入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個元素 */ ListInsert(&La,j,j); printf("La= "); /* 輸出表La的容 */ ListTraverse(La,print);InitList(&Lb); /* 創(chuàng)建空表Lb */for(j=1;j<=5;j+) /* 在表Lb中插入5個元素 */ ListInsert(&Lb,j,2*j); printf("Lb= "); /* 輸出表Lb的容 */ ListTraverse(Lb,print); MergeList(La,Lb,&Lc); printf("Lc= "); /* 輸出表Lc的容 */ ListTraverse(Lc,print); /* algo2-4.c 修改算法2.7的第一個循環(huán)語句中的條件語句為開關(guān)語句,且當(dāng) */* *pa=*pb時,只將兩者中之一插入Lc。此操作的結(jié)果和算法2.1一樣 */#include"c1.h" typedef intElemType;#include"c2-1.h"#include"bo2-1.c"int p(ElemType c1,ElemType c2) int i;if(c1<c2) 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 *)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_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+=*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個元素 */ ListInsert(&La,j,j); printf("La= "); /* 輸出表La的容 */ ListTraverse(La,print);InitList(&Lb); /* 創(chuàng)建空表Lb */for(j=1;j<=5;j+) /* 在表Lb中插入5個元素 */ ListInsert(&Lb,j,2*j); printf("Lb= "); /* 輸出表Lb的容 */ ListTraverse(Lb,print); MergeList(La,Lb,&Lc); printf("Lc= "); /* 輸出表Lc的容 */ ListTraverse(Lc,print); /* algo2-5.c 實現(xiàn)算法2.11、2.12的程序 */#include"c1.h" typedef intElemType;#include"c2-2.h"/* c2-2.h 線性表的單鏈表存儲結(jié)構(gòu) */struct LNode ElemType data;struct LNode *next; ;typedefstruct LNode *LinkList; /* 另一種定義LinkList的方法 */#include"bo2-2.c"/* bo2-2.c 單鏈表線性表(存儲結(jié)構(gòu)由c2-2.h定義)的根本操作(12個) */StatusInitList(LinkList *L) /* 操作結(jié)果:構(gòu)造一個空的線性表L */*L=(LinkList)malloc(sizeof(struct LNode); /* 產(chǎn)生頭結(jié)點,并使L指向此頭結(jié)點 */if(!*L) /* 存儲分配失敗 */exit(OVERFLOW); (*L)->next=NULL; /* 指針域為空 */return OK; StatusDestroyList(LinkList *L) /* 初始條件:線性表L已存在。操作結(jié)果:銷毀線性表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指向第一個結(jié)點 */while(p) /* 沒到表尾 */ q=p->next; free(p); p=q; L->next=NULL; /* 頭結(jié)點指針域為空 */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ù)元素個數(shù) */int i=0; LinkList p=L->next; /* p指向第一個結(jié)點 */while(p) /* 沒到表尾 */ i+; p=p->next; return i; Status GetElem(LinkList L,int i,ElemType *e) /* 算法2.8 */ /* L為帶頭結(jié)點的單鏈表的頭指針。當(dāng)?shù)趇個元素存在時,其值賦給e并返回OK,否如此返回ERROR */int j=1; /* j為計數(shù)器 */ LinkList p=L->next; /* p指向第一個結(jié)點 */while(p&&j<i) /* 順指針向后查找,直到p指向第i個元素或p為空 */ p=p->next; j+; if(!p|j>i) /* 第i個元素不存在 */return ERROR; *e=p->data; /* 取第i個元素 */return OK; int LocateElem(LinkList L,ElemType e,Status(*pare)(ElemType,ElemType) /* 初始條件: 線性表L已存在,pare()是數(shù)據(jù)元素判定函數(shù)(滿足為1,否如此為0) */* 操作結(jié)果: 返回L中第1個與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 PriorElem(LinkList L,ElemType cur_e,ElemType *pre_e) /* 初始條件: 線性表L已存在 */* 操作結(jié)果: 假如cur_e是L的數(shù)據(jù)元素,且不是第一個,如此用pre_e返回它的前驅(qū), */* 返回OK;否如此操作失敗,pre_e無定義,返回INFEASIBLE */ LinkList q,p=L->next; /* p指向第一個結(jié)點 */while(p->next) /* p所指結(jié)點有后繼 */ q=p->next; /* q為p的后繼 */if(q->data=cur_e) *pre_e=p->data;return OK; p=q; /* p向后移 */ return INFEASIBLE; Status NextElem(LinkList L,ElemType cur_e,ElemType *next_e) /* 初始條件:線性表L已存在 */* 操作結(jié)果:假如cur_e是L的數(shù)據(jù)元素,且不是最后一個,如此用next_e返回它的后繼, */* 返回OK;否如此操作失敗,next_e無定義,返回INFEASIBLE */ LinkList p=L->next; /* p指向第一個結(jié)點 */while(p->next) /* p所指結(jié)點有后繼 */ if(p->data=cur_e) *next_e=p->next->data;return OK; p=p->next; return INFEASIBLE; Status ListInsert(LinkList L,int i,ElemType e) /* 算法2.9。不改變L */ /* 在帶頭結(jié)點的單鏈線性表L中第i個位置之前插入元素e */int j=0; LinkList p=L,s;while(p&&j<i-1) /* 尋找第i-1個結(jié)點 */ p=p->next; j+; if(!p|j>i-1) /* i小于1或者大于表長 */return ERROR; s=(LinkList)malloc(sizeof(struct LNode); /* 生成新結(jié)點 */ s->data=e; /* 插入L中 */ s->next=p->next; p->next=s;return OK; Status ListDelete(LinkList L,int i,ElemType *e) /* 算法2.10。不改變L */ /* 在帶頭結(jié)點的單鏈線性表L中,刪除第i個元素,并由e返回其值 */int j=0; LinkList p=L,q;while(p->next&&j<i-1) /* 尋找第i個結(jié)點,并令p指向其前趨 */ p=p->next; j+; if(!p->next|j>i-1) /* 刪除位置不合理 */return ERROR; q=p->next; /* 刪除并釋放結(jié)點 */ p->next=q->next; *e=q->data; free(q);return OK; Status ListTraverse(LinkList L,void(*vi)(ElemType)/* vi的形參類型為ElemTypeElemType&不同 */ /* 初始條件:線性表L已存在 */* 操作結(jié)果:依次對L的每個數(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個元素的值,建立帶表頭結(jié)構(gòu)的單鏈線性表L */int i; LinkList p;*L=(LinkList)malloc(sizeof(struct LNode); (*L)->next=NULL; /* 先建立一個帶頭結(jié)點的單鏈表 */ printf("請輸入%d個數(shù)據(jù)n",n);for(i=n;i>0;-i) p=(LinkList)malloc(sizeof(struct LNode); /* 生成新結(jié)點 */ scanf("%d",&p->data); /* 輸入元素值 */ p->next=(*L)->next; /* 插入到表頭 */ (*L)->next=p; void CreateList2(LinkList *L,int n) /* 正位序(插在表尾)輸入n個元素的值,建立帶表頭結(jié)構(gòu)的單鏈線性表 */int i; LinkList p,q;*L=(LinkList)malloc(sizeof(struct LNode); /* 生成頭結(jié)點 */ (*L)->next=NULL; q=*L; printf("請輸入%d個數(shù)據(jù)n",n);for(i=1;i<=n;i+) p=(LinkList)malloc(sizeof(struct LNode); scanf("%d",&p->data); 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的元素也按值非遞減排列 */ LinkList pa=La->next,pb=(*Lb)->next,pc;*Lc=pc=La; /* 用La的頭結(jié)點作為Lc的頭結(jié)點 */while(pa&&pb)if(pa->data<=pb->data) 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é)點 */ Lb=NULL; void visit(ElemType c) /* ListTraverse()調(diào)用的函數(shù)(類型要一致) */ printf("%d ",c); void main() int n=5; LinkList La,Lb,Lc; printf("按非遞減順序, "); CreateList2(&La,n); /* 正位序輸入n個元素的值 */ printf("La="); /* 輸出鏈表La的容 */ ListTraverse(La,visit); printf("按非遞增順序, "); CreateList(&Lb,n); /* 逆位序輸入n個元素的值 */ printf("Lb="); /* 輸出鏈表Lb的容 */ ListTraverse(Lb,visit); MergeList(La,&Lb,&Lc); /* 按非遞減順序歸并La和Lb,得到新表Lc */ printf("Lc="); /* 輸出鏈表Lc的容 */ ListTraverse(Lc,visit); /* algo2-6.c 利用單鏈表結(jié)構(gòu)處理教科書圖2.1(學(xué)生健康登記表) */#include"c1.h"#define NAMELEN 8 /* 最大長度 */#define CLASSLEN 4 /* 班級名最大長度 */struct stud /* 記錄的結(jié)構(gòu) */ char nameNAMELEN+1; long num; char sex;int age; char ClassCLASSLEN+1;int health; ;typedefstruct stud ElemType; /* 鏈表結(jié)點元素類型為結(jié)構(gòu)體 */#include"c2-2.h" char sta39="健康 ","一般 ","神經(jīng)衰弱" /* 健康狀況(3類) */ FILE *fp;StatusInitList(LinkList *L) /* 拷自bo2-2.c */ /* 操作結(jié)果:構(gòu)造一個空的線性表L */*L=(LinkList)malloc(sizeof(struct LNode); /* 產(chǎn)生頭結(jié)點,并使L指向此頭結(jié)點 */if(!*L) /* 存儲分配失敗 */exit(OVERFLOW); (*L)->next=NULL; /* 指針域為空 */return OK; Status ListTraverse(LinkList L,void(*vi)(ElemType) /* 拷自bo2-2.c */ /* 初始條件:線性表L已存在 */* 操作結(jié)果:依次對L的每個數(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ù)改寫 */ /* 按學(xué)號非降序插入 */ LinkList q=L,p=L->next;while(p&&e.num>p->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); void ReadIn(struct stud *e) /* 由鍵盤輸入結(jié)點信息 */ printf("請輸入(<=%d個字符): ",NAMELEN); scanf("%s",e->name); printf("請輸入學(xué)號: "); scanf("%ld",&e->num); printf("請輸入性別(m:男 f:女): "); scanf("%*c%c",&e->sex); printf("請輸入年齡: "); scanf("%d",&e->age); printf("請輸入班級(<=%d個字符): ",CLASSLEN); scanf("%s",e->Class); printf("請輸入健康狀況(0:%s 1:%s 2:%s):",sta0,sta1,sta2); scanf("%d",&e->health); void WriteToFile(struct stud e) /* 將結(jié)點信息寫入fp指定的文件 */ fwrite(&e,sizeof(struct stud),1,fp); Status ReadFromFile(struct stud *e) /* 由fp指定的文件讀取結(jié)點信息到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é)號為num的結(jié)點,如找到,q指向此結(jié)點,p指向q的前驅(qū), */* 并返回TRUE;如無此元素,如此返回FALSE */ *p=L;while(*p) *q=(*p)->next;if(*q&&(*q)->data.num>num) /* 因為是按學(xué)號非降序排列 */ break;if(*q&&(*q)->data.num=num) /* 找到該學(xué)號 */return TRUE; *p=*q; return FALSE; Status FindFromName(LinkList L,char name,LinkList *p,LinkList *q) /* 查找表中為name的結(jié)點,如找到,q指向此結(jié)點,p指向q的前驅(qū), */* 并返回TRUE;如無此元素,如此返回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é)號為num的元素,并返回TRUE;如無此元素,如此返回FALSE */ LinkList p,q;if(FindFromNum(L,num,&p,&q) /* 找到此結(jié)點,且q指向其,p指向其前驅(qū) */ p->next=q->next; free(q);return TRUE; return FALSE; Status DeleteElemName(LinkList L,char name) /* 刪除表中為name的元素,并返回TRUE;如無此元素,如此返回FALSE */ LinkList p,q;if(FindFromName(L,name,&p,&q) /* 找到此結(jié)點,且q指向其,p指向其前驅(qū) */ p->next=q->next; free(q);return TRUE; return FALSE; void Modify(ElemType *e) /* 修改結(jié)點容 */ char s80; Print(*e); /* 顯示原容 */ printf("請輸入待修改項的容,不修改的項按回車鍵保持原值:n"); printf("請輸入(<=%d個字符): ",NAMELEN); gets(s);if(strlen(s) strcpy(e->name,s); printf("請輸入學(xué)號: "); gets(s);if(strlen(s) e->num=atol(s); printf("請輸入性別(m:男 f:女): "); gets(s);if(strlen(s) e->sex=s0; printf("請輸入年齡: "); gets(s);if(strlen(s) e->age=atoi(s); printf("請輸入班級(<=%d個字符): ",CLASSLEN); gets(s);if(strlen(s) strcpy(e->Class,s); printf("請輸入健康狀況(0:%s 1:%s 2:%s):",sta0,sta1,sta2); gets(s);if(strlen(s) e->health=atoi(s); /* 修改完畢 */ #define N 4 /* student記錄的個數(shù) */void main() struct stud studentN="王小林",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 filename13,nameNAMELEN+1;ElemType e; LinkList T,p,q;InitList(&T); /* 初始化鏈表 */while(flag) printf("1:將結(jié)構(gòu)體數(shù)組student中的記錄按學(xué)號非降序插入鏈表n"); printf("2:將文件中的記錄按學(xué)號非降序插入鏈表n"); printf("3:鍵盤輸入新記錄,并將其按學(xué)號非降序插入鏈表n"); printf("4:刪除鏈表中第一個有給定學(xué)號的記錄n"); printf("5:刪除鏈表中第一個有給定的

注意事項

本文(清華嚴蔚敏《大數(shù)據(jù)結(jié)構(gòu)》地全部代碼實現(xiàn)C語言)為本站會員(仙***)主動上傳,裝配圖網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對上載內(nèi)容本身不做任何修改或編輯。 若此文所含內(nèi)容侵犯了您的版權(quán)或隱私,請立即通知裝配圖網(wǎng)(點擊聯(lián)系客服),我們立即給予刪除!

溫馨提示:如果因為網(wǎng)速或其他原因下載失敗請重新下載,重復(fù)下載不扣分。




關(guān)于我們 - 網(wǎng)站聲明 - 網(wǎng)站地圖 - 資源地圖 - 友情鏈接 - 網(wǎng)站客服 - 聯(lián)系我們

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

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


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