數(shù)據(jù)結(jié)構(gòu)實驗源代碼william改后_第1頁
數(shù)據(jù)結(jié)構(gòu)實驗源代碼william改后_第2頁
數(shù)據(jù)結(jié)構(gòu)實驗源代碼william改后_第3頁
數(shù)據(jù)結(jié)構(gòu)實驗源代碼william改后_第4頁
數(shù)據(jù)結(jié)構(gòu)實驗源代碼william改后_第5頁
已閱讀5頁,還剩71頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、數(shù)據(jù)結(jié)構(gòu)實驗源代碼線 性 表順序表的插入刪除交互式#include#include#define ListSize 100typedef int datatype;typedef structdatatype aListSize;int length;sequence_list;sequence_list mylist;datatype x;int position,y;void init (sequence_list*L)L-length=0;/=順序表的插入=void insert(sequence_list *L,datatype x,int position)int i;if(L-le

2、ngth=ListSize)printf(n 順序表是滿的,無法插入);if(positionL-length)printf(n指定的插入位置不存在);for(i=L-length;iposition;i-)L-ai=L-ai-1;L-aposition=x;L-length+;void display(sequence_list L)int i;if(L.length=0)printf(n 順表表是空的);else for(i=0;ilength=ListSize)printf( 順序表是滿的n); L-aL-length=x; L-length=L-length+1;/=順序表的刪除=vo

3、id dele(sequence_list *L,int y )int i;if(L-length=0)printf(n順序表是空的);for(i=0;ilength;i+)if(L-ai=y)for(;ilength-1;i+) L-ai=L-ai+1;L-length-;void main()int number,j;init(&mylist);display(mylist);printf(,你要插入幾個數(shù)n); scanf(%d,&j);for(int i=0;ij;i+)printf(input your numbersn);scanf(%d,&number);append(&myli

4、st,number);display(mylist);printf(n);printf(請輸入你要插入的數(shù)x和它的位置position); scanf(%d%d,&x,&position);insert(&mylist, x, position);display(mylist);printf(n插入成功n);printf(請輸入你要刪除的數(shù)yn);scanf(%d,&y);dele(&mylist,y);display(mylist);printf(n刪除成功n); 2單鏈表帶頭結(jié)點的單鏈表的創(chuàng)立、求表長、輸出、插入、刪除、查找、逆置#include#include#define DataTy

5、pe int#define FLAG -1typedef struct Node DataType data; struct Node *next;Lnode,*LinkList;LinkList Creat_LinkList() LinkList L; Lnode *s,*r; int x; printf(建立有表頭結(jié)點的單鏈表,以%d作為創(chuàng)立鏈表完成的標志n,FLAG); L=r=s=NULL; L=(Lnode *)malloc(sizeof(Lnode); if(!L) printf(表頭結(jié)點開辟失敗n); exit(-1); L-next=NULL; scanf(%d,&x); wh

6、ile(x!=FLAG) s=(Lnode *)malloc(sizeof(Lnode); if(!s) printf(結(jié)點開辟失敗n); exit(-1); s-data=x; if(NULL=L-next)/第一個結(jié)點的處理 L-next=s; else r-next=s; r=s; scanf(%d,&x); if(r!=NULL)/對于非空表,最后結(jié)點的指針域放空指針 r-next=NULL; return L;/*有頭結(jié)點的鏈表,求表長算法*/int Length_LinkList(LinkList L)Lnode *p; int j; p=L; j=0; while(p-next)

7、 p=p-next; j+; return j;int Print_LinkList(LinkList L) printf(輸出:n); Lnode *s; s=L; while(s-next!=NULL) s=s-next; printf(%3d,s-data); printf(n); return 0;/*逆置算法思路:依次取原鏈表中每個結(jié)點,將其作為第一個結(jié)點插入到新的鏈表中去。指針p用來指向原表中當(dāng)前結(jié)點,p為空時結(jié)束。*/void Reverse_LinkList(LinkList H)/單鏈表的逆置 Lnode *p,*q; p=H-next;/p指向第一個結(jié)點 H-next=NU

8、LL;/將原鏈表置為空表 while(p) q=p; p=p-next; q-next=H-next;/將當(dāng)前節(jié)點插入到頭結(jié)點后面 H-next=q; return;/*按序號查找*/Lnode *Get_LinkList(LinkList L,int i) Lnode *p; int j=0; p=L; while(p-next!=NULL&jnext; j+; if(j=i) return p; else return NULL;/*按值查找*/Lnode *Locate_LinkList(LinkList L,DataType x) Lnode *p; p=L-next; while(p

9、!=NULL&p-data!=x) p=p-next; return p;后插結(jié)點:設(shè)p指向單鏈表中某結(jié)點,s指向待插入值為x的新結(jié)點,將*s插入到*p之后,操作:s-next=p-next;p-next=s;前插接點:遇紅茶結(jié)點不同德是,這種算法要先找到前驅(qū)結(jié)點*q,然后完成在*q后插入*s,操作:q=L;while(q-next!=p)q=p-next;s-next=q-next;q-next=s;*/int Insert_LinkList(LinkList L,int i,DataType x) Lnode *p,*s; p=Get_LinkList(L,i-1); if(NULL=p)

10、 printf(前驅(qū)結(jié)點不存在,不能插入n); return 0; else s=(Lnode *)malloc(sizeof(Lnode); s-data=x; s-next=p-next; p-next=s; return 1; /*按序號刪除結(jié)點*/int Del_LinkList(LinkList L,int i) Lnode *p,*s; p=Get_LinkList(L,i-1); if(NULL=p) printf(你要刪除的結(jié)點前驅(qū)結(jié)點不存在n); return -1; else if(NULL=p-next) printf(第%d個結(jié)點不存在n,i); return 0; e

11、lse s=p-next; p-next=s-next; free(s); return 1; /*按值刪除結(jié)點,為了使算法清晰,只刪除找到的第一個結(jié)點*/int Remove_LinkList(LinkList L,DataType x) Lnode *p,*s; p=Locate_LinkList(L,x);/找到要刪除的結(jié)點 if(NULL=p) printf(你要刪除的結(jié)點不存在n); return -1; s=L; while(s-next!=p) s=s-next;/找到要刪除結(jié)點的前驅(qū) s-next=p-next; free(p); return 1;int main() Lno

12、de *L,*p; int n,m,k; L=Creat_LinkList(); Print_LinkList(L); printf(表長頭結(jié)點不計算在內(nèi):%dn,Length_LinkList(L); printf(按序號查找,請輸入你要查找的結(jié)點的序號:n); scanf(%d,&n); p=Get_LinkList(L,n); if(NULL=p) printf(未找到n); else printf(找到了,該結(jié)點存放的數(shù)據(jù):%dn,p-data); printf(按值查找,請輸入你要查找的數(shù)據(jù):n); scanf(%d,&n); p=Locate_LinkList(L,n); if(N

13、ULL=p) printf(未找到n); else printf(找到了n); printf(插入結(jié)點,請輸入你要插入的位置和數(shù)值n); scanf(%d%d,&k,&n); m=Insert_LinkList(L,k,n); if(0=m) printf(前驅(qū)結(jié)點不存在不能插入n); else if(1=m) printf(插入成功n); Print_LinkList(L); printf(表長頭結(jié)點不計算在內(nèi):%dn,Length_LinkList(L); printf(按序號刪除,請輸入你要刪除的結(jié)點的序號:n); scanf(%d,&n); m=Del_LinkList(L,n); i

14、f(-1=m) printf(你要刪除的結(jié)點無前驅(qū)結(jié)點n); else if(0=m) printf(你要刪除的結(jié)點不存在n); else if(1=m) printf(刪除成功n); Print_LinkList(L); printf(表長頭結(jié)點不計算在內(nèi):%dn,Length_LinkList(L); printf(按值刪除,請輸入你要刪除的數(shù)據(jù):n); scanf(%d,&n); m=Remove_LinkList(L,n); if(-1=m) printf(你要刪除的結(jié)點無前驅(qū)結(jié)點n); else if(0=m) printf(你要刪除的結(jié)點不存在n); else if(1=m) pr

15、intf(刪除成功n); Print_LinkList(L); printf(表長頭結(jié)點不計算在內(nèi):%dn,Length_LinkList(L); Reverse_LinkList(L); printf(逆置后:n); Print_LinkList(L); return 0;單鏈表插入、刪除、查找操作重慶大學(xué)真題 交互式#define TRUE 1#define FALSE 0#define OK 1#define ERROR 0#define INFEASIBLE -1#define OVERFLOW -2#define LIST_INIT_SIZE 10#define LIST_INCRE

16、MENT 2#define Status int#include #include #include typedef int DataType;typedef struct LNodeDataType data; struct LNode *next;LNode,*LinkList;Status InitLinkList(LinkList& L)/初始化鏈表L = (LinkList)malloc(sizeof(LNode);L-next = NULL;return OK;Status FillLinkList(LinkList& L,int len)/向鏈表中隨機填充數(shù)據(jù)srand(time

17、(NULL);LinkList p;for(int i = len;i 0; i-)p = (LinkList)malloc(sizeof(LNode);p-data = rand()%100;p-next = L-next;L-next = p;return OK;Status Ascend(LinkList& L,int len)/非遞減排序LinkList q;DataType temp;for(int j = 0; j next;for(int k = 0; k data q-next-data)temp = q-data;q-data = q-next-data;q-next-dat

18、a = temp;q = q-next;return OK;Status LinkListInsert(LinkList &L,int i,DataType x)/向鏈表中插入某個元素LinkList p,s;p = L;int j = 0;while(p & j next;j+;if(!p | j i-1)return ERROR;s = (LinkList)malloc(sizeof(LNode);s-data = x;s-next = p-next;p-next = s;return OK;Status LinkListDelete(LinkList &L,int i,DataType

19、&x)/刪除鏈表中的某個元素LinkList p,q;p = L;int j = 0;while(p-next & j next;j+;if(!(p-next) | j i-1)return ERROR;q = p-next;p-next = q-next;x = q-data;free(q);return OK;int LinkListLocate(LinkList &L,DataType x)/在單鏈表L中查找值為e的結(jié)點,找到后返回其位置,否那么返回 LinkList p;int j = 1;p = L-next;while(p & p-data != x) p = p-next;j+;

20、if(p & p-data = x)return j;elsereturn 0;void PrintLinkList(LinkList &L,int len)/打印鏈表LinkList p = L-next;for(int i = 0;i data);p = p-next;putchar(n);Status DestroyLinkList(LinkList& L,int len)/銷毀鏈表LLinkList p,q;p = L;while(p-next)q = p-next;p-next = q-next;free(q);free(L);return OK;void main()LinkLis

21、t La;DataType x;int pos,Len_La;/*第_題主程序*/puts(*以下為第題程序*);/確定La的長度printf(La的長度為: );scanf(%d,&Len_La);/初始化Laif(InitLinkList(La)printf(初始化La成功!n);system(PAUSE); putchar(n);/向La中隨機添加元素并且非遞減排序if(FillLinkList(La,Len_La) & Ascend(La,Len_La)printf(向La中隨機添加元素并且非遞減排序成功!n);else puts(向La中添加元素失敗!);system(PAUSE);

22、putchar(n);/打印添加元素后的Laprintf(添加元素后的La為:n);PrintLinkList(La,Len_La);system(PAUSE);putchar(n);/在La中第i個元素之前插入一個新結(jié)點printf(請輸入要插入新節(jié)點的位置:);scanf(%d,&pos);printf(請輸入要插入新節(jié)點的值:);scanf(%d,&x);if(LinkListInsert(La,pos,x)printf(插入新節(jié)點成功!n);Len_La+;elseputs(插入新節(jié)點失敗!);system(PAUSE);putchar(n);/打印插入新節(jié)點后的Laprintf(插入

23、新節(jié)點后的La為:n);PrintLinkList(La,Len_La);system(PAUSE);putchar(n);/刪除La中的第i個元素結(jié)點printf(請輸入要刪除節(jié)點的位置:);scanf(%d,&pos);if(LinkListDelete(La,pos,x)printf(刪除第%d個元素%d成功!n,pos,x);Len_La-;else puts(刪除失敗!);system(PAUSE);putchar(n);/打印刪除后的Laprintf(刪除節(jié)點后的La為:n);PrintLinkList(La,Len_La);system(PAUSE);putchar(n);/在L

24、a中查找某結(jié)點并返回其位置printf(請輸入要查找的節(jié)點的值:);scanf(%d,&x);pos = LinkListLocate(La,x);if(pos)printf(值為%d的節(jié)點的位置是:%dn,x,pos);elseputs(查找的節(jié)點不存在!);system(PAUSE);putchar(n);單鏈表的創(chuàng)立、插入、刪除操作菜單式 #include stdio.h#include malloc.h#include string.h#define L sizeof(lnode)typedef struct node char data8; struct node * next; l

25、node,*linklist;linklist createL( ) linklist H=NULL; lnode *p,*r=H; while (1) p=(lnode*)malloc(L); scanf(%s,p-data); if(strcmp(p-data,exit)=0) break; if(H=NULL) H=p; r=p; else r-next=p;r=p; r-next=NULL; return H; linklist insertL(linklist H ) lnode *p,*q=H-next,*r=H; p=(lnode*)malloc(L); printf(Pleas

26、e input insert string:); scanf(%s,p-data); if(H=NULL) H=p;p-next=NULL; else while(q!=NULL&(strcmp(p-data,q-data)0) r=q; q=q-next; if(q!=NULL) r-next=p; p-next=q; if(q=NULL) r-next=p;p-next=NULL; return H; linklist deleteL(linklist H ) lnode *p=H,*q=H; char str4; if(H=NULL) printf(error!); else print

27、f(Please input the delete string:); scanf(%s,str); while(strcmp(p-data,str)!=0&p-next!=NULL) q=p; p=p-next; if(strcmp(p-data,str)=0) q-next=p-next; free(p); else printf(Cant find the string!); return H; void printL(linklist H) lnode *p; p=H; while(p!=NULL) printf(%5s,p-data); p=p-next; printf(n); vo

28、id main() linklist createL( ); linklist insertL(linklist H ); linklist deleteL(linklist H ); void printL(linklist H ); int i=0; linklist H; while(i!=4) printf( |*鏈表操作*|n); printf(n); printf( |*1.創(chuàng)立鏈表 *|n); printf( |*2.插入某元素 *|n); printf( |*3.刪除某元素 *|n); printf( |*4.退出 *|n); printf(請輸入相應(yīng),再輸入鏈表結(jié)字符,輸入e

29、xit結(jié)束輸入 :); scanf(%d,&i); switch(i) case 1 : H=createL(); printL(H);break; case 2 : H=insertL(H); printL(H);break; case 3 : H=deleteL(H); printL(H);break; default: break; 單鏈表求表長、插入、刪除、查找操作菜單式 #include #include /* 定義DataType 為int類型 */ typedef int DataType; #define TRUE 1 #define FALSE 0 #define NULL

30、0 #define flag -1 /* 單鏈表的結(jié)點類型 */ typedef struct LNode DataType data; struct LNode *next; LNode,*LinkedList; /*=初始化單鏈表= */ LinkedList LinkedListInit() LinkedList L; L=(LinkedList)malloc(sizeof(LNode); L-next=NULL; return L; /* 清空單鏈表 */ void LinkedListClear(LinkedList L) L-next=NULL; printf(鏈表已經(jīng)清空n);

31、/* 檢查單鏈表是否為空 */ int LinkedListEmpty(LinkedList L) if(L-next=NULL) return TRUE; else return FALSE; /* 遍歷單鏈表 */ void LinkedListTraverse(LinkedList L) LinkedList p; p=L-next; if(p=NULL) printf(單鏈表為空表n); else printf(鏈表中的元素為:n); while(p!=NULL) printf(%d ,p-data); p=p-next; printf(n); int LinkedListLength

32、 (LinkedList L) LinkedList p; int j; p=L-next; j=0; while(p!=NULL) j+;p=p-next; return j; /=按 結(jié)點序號 查找=LinkedList LinkedListGet(LinkedList L,int i) LinkedList p;int j; p=L-next; j=1; while (p!=NULL & jnext; j+; if (j=i) return p; else return NULL; /=按 結(jié)點值 查找=int LinkedListLocate ( LinkedList L, DataT

33、ype x) LinkedList p;int j; p=L-next; j=1; while ( p!=NULL & p-data != x) p=p-next;j+; if(p) return j; else return 0; /*=插入結(jié)點=*/ void LinkedListInsert(LinkedList L, int i, DataType x) LinkedList p,s; int j; j=1;p=L; while(p&jnext;j+; if(p=NULL|ji) printf(插入位置不正確n); else s=(LNode *)malloc(sizeof(LNode

34、); s-data=x; s-next=p-next; p-next=s; printf(%d已插入到鏈表中n,x); /*=刪除結(jié)點=*/ void LinkedListDel(LinkedList L,int i) LinkedList p,q; int j; j=1;p=L; while(p-next&jnext;j+; if(p-next=NULL) printf(刪除位置不正確n); else q=p-next;p-next=q-next;free(q); printf(第%d 個元素已從鏈表中刪除n,i); LinkedList LinkedListCreat( ) LinkedL

35、ist L=LinkedListInit(),p,r; DataType x; r=L; printf(請依次輸入鏈表中的元素,輸入-1結(jié)束n); scanf(%d,&x); while (x!=flag) p=(LinkedList)malloc(sizeof(LNode); p-data=x; r-next=p; r=p; scanf(%d,&x); r-next=NULL; return L; int scan() int d; printf(請選擇要進行的操作:n); printf(1.初始化n2.清空n3.求鏈表長度n4.檢查鏈表是否為空n); printf(5.遍歷鏈表n6.從鏈表

36、中查找元素n); printf(7.從鏈表中查找與給定元素值相同的元素在順序表中的位置n); printf(8.向鏈表中插入元素n9.從鏈表中刪除元素n); printf(其他鍵退出。n); scanf(%d,&d); return(d); main() int quit=0; int i,locate; DataType e; LinkedList L,p; while(!quit) switch(scan() case 1:L=LinkedListInit();printf(n);break; case 2:LinkedListClear(L);printf(n);break; case

37、3:printf(鏈表的長度為 %dnn,LinkedListLength(L);break; case 4:if(LinkedListEmpty(L)printf(鏈表為空nn);else printf(鏈表非空n);break; case 5:LinkedListTraverse(L); break; case 6:printf(請輸入待查詢元素在鏈表中的位置:); scanf(%d,&i); p=LinkedListGet(L,i); if(p) printf(鏈表中第%d個元素的值為:%dn,i,p-data); else printf(查詢位置不正確nn); break; case

38、7:printf(請輸入待查詢元素的值:); scanf(%d,&e); locate=LinkedListLocate(L,e); if(locate) printf(%d在鏈表中的位置是:%dn,e,locate); else printf(鏈表中沒有值為%d 的元素nn,e); break; case 8:printf(請輸入插入元素的位置和值(中間以空格或回車分隔):n); scanf(%d%d,&i,&e); LinkedListInsert(L,i,e); break; case 9:if(LinkedListLength(L)=0) printf(鏈表已經(jīng)為空,不能刪除nn);

39、else printf(請輸入待刪除元素的位置:n); scanf(%d,&i); LinkedListDel(L,i); break; case 10:L=LinkedListCreat(); printf(n);break; default:quit=1; 棧 括號匹配棧 棧 括號匹配棧 字符回文判斷棧 進制轉(zhuǎn)換隊列出入棧 括號匹配typedef char DataType;#include#include#include#include#define MAXSIZE 30#define TRUE 1#define FALSE 0#define OK 1#define ERROR 0#de

40、fine OVERFLOW -1typedef int Status; /*調(diào)用自定義庫函數(shù)*/typedef struct DataType DataMAXSIZE; int top; SeqStack; /*定義順序棧結(jié)構(gòu)*/void InitStack_Sq(SeqStack *s) /*初始化棧操作*/ s-top=-1; /*InitStack_sq*/Status Empty_Sq(SeqStack *s) /*判棧是否為空*/ return (s-top=-1); /*Empty_sq*/Status Push_SeqStack(SeqStack *s, DataType x)

41、if (s-top=MAXSIZE-1) return OVERFLOW ; /* 棧滿不能入棧 */ else s-top+; s-Datas-top=x ; return OK; Status Pop_SeqStack(SeqStack *s, DataType *y) if (Empty_Sq(s) return OVERFLOW; /* 棧空不能出棧 */ else *y=s-Datas-top; s-top-; return OK; /* 棧頂元素存入*y,返回 */ DataType GetTop(SeqStack *s,DataType *y) /*取頂元素*/if (Empty

42、_Sq(s) return OVERFLOW; /* ??詹荒艹鰲?*/ else *y=s-Datas-top; return OK; /*SQstack.h*/ /*調(diào)用順序棧根本操作頭文件*/Status Bracket(SeqStack *S,char *str) int i=0,flag1=0,flag2; DataType e; while(stri!=0) switch(stri) case (: case : case :Push_SeqStack(S,stri);break; /*(,進棧*/ case ):Pop_SeqStack(S,&e); if(e!=() flag1

43、=1; break; /*出棧,判斷是否為(*/ case :Pop_SeqStack(S,&e); if(e!=) flag1=1;break; /*出棧,判斷是否為*/ case :Pop_SeqStack(S,&e); if(e!=) flag1=1;break; /*出棧,判斷是否為*/ default: break; if(flag1) break; /*出現(xiàn)不匹配,立即結(jié)束循環(huán)*/ i+; flag2=Empty_Sq(S); /*flag2判斷堆棧是否為空*/ if(!flag1 & flag2) printf(括號匹配!n); else printf(括號不匹配!n); ret

44、urn OK;void main() char temp,flag=y; while(flag=y) char str255; SeqStack S; printf(請輸入字符串:); scanf(%s,str); scanf(%c,&temp); /*接受輸入的回車鍵*/ InitStack_Sq(&S); Bracket(&S,str); printf(輸入y繼續(xù): ); scanf(%c,&flag); printf(n); printf(程序結(jié)束n);棧 回文typedef char DataType;/*lstack.h*/#include /*調(diào)用自定義庫函數(shù)*/#include#

45、include#include#define MAXSIZE 30#define TRUE 1#define FALSE 0#define OK 1#define ERROR 0#define OVERFLOW -1typedef int Status; typedef struct node DataType data; struct node *next;StackNode;typedef struct struct node *top; LinkStack;void Init_LS(LinkStack *ls) /*置空鏈棧 */ ls-top=NULL; Status Empty_LS

46、(LinkStack *ls) /*判???*/ return ls-top=NULL; void Push_LS(LinkStack *ls, DataType x) /*入棧 */ StackNode *p=(StackNode *)malloc(sizeof(StackNode); p-data=x; p-next=ls-top; /* 將元素x插入鏈棧頂 */ ls-top=p ;Status Pop_LS(LinkStack *ls, DataType *y) /* 出棧*/ StackNode *p; if (Empty_LS(ls) printf (下溢!) ; return O

47、VERFLOW; else *y=ls-top-data ; p=ls-top ; ls-top=p-next; free (p) ; return OK ; Status GetTop(LinkStack *ls, DataType *y) /*取棧頂元素 */ if( Empty_LS(ls) ) printf (下溢!) ; return OVERFLOW; else *y=ls-top-data; return OK ; /*調(diào)用鏈式棧根本操作文件*/#define ARRAYSIZE 20void main() int i,j=0; StackNode *pp; char m; ch

48、ar aARRAYSIZE,ch; LinkStack *s; LinkStack *top; Init_LS(s); printf(請輸入一個字符串:n); for(i=0;(i20)&(ai=getchar()!=n);+i); /*輸入字符串*/ for(j=0;ji/2;+j) /* 字符串的前一半入棧*/ Push_LS(s,aj); for(j=i-i/2;ji;+j) /*出棧,與后一半字符串比擬*/ Pop_LS(s,&ch); if(ch!=aj) break; if(!Empty_LS(s) printf(這個字符串不是回文!n ); else printf(這個字符串是回

49、文!n ); 棧 進制轉(zhuǎn)換typedef int DataType;#include#include#include#include#define MAXSIZE 30#define TRUE 1#define FALSE 0#define OK 1#define ERROR 0#define OVERFLOW -1typedef int Status;typedef struct DataType DataMAXSIZE; int top; SeqStack; /*定義順序棧結(jié)構(gòu)*/void InitStack_Sq(SeqStack *s) /*初始化棧操作*/ s-top=-1; /*I

50、nitStack_sq*/Status Empty_Sq(SeqStack *s) /*判棧是否為空*/ return (s-top=-1); /*Empty_sq*/Status Push_SeqStack(SeqStack *s, DataType x) if (s-top=MAXSIZE-1) return OVERFLOW ; /* 棧滿不能入棧 */ else s-top+; s-Datas-top=x ; return OK; Status Pop_SeqStack(SeqStack *s, DataType *y) if (Empty_Sq(s) return OVERFLOW;

51、 /* ??詹荒艹鰲?*/ else *y=s-Datas-top; s-top-; return OK; /* 棧頂元素存入*y,返回 */ DataType GetTop(SeqStack *s,DataType *y) /*取頂元素*/if (Empty_Sq(s) return OVERFLOW; /* ??詹荒艹鰲?*/ else *y=s-Datas-top; return OK; /*SQstack.h*/ /*調(diào)用順序棧根本操作頭文件*/void conversion(int N,int R) /*進制轉(zhuǎn)換*/SeqStack S; int x; Status i; InitS

52、tack_Sq(&S); while(N) Push_SeqStack(&S,N%R); /*進棧操作*/ if(i=OVERFLOW) printf(n棧已滿不能進行入棧操作!); return; N=N/R; printf(結(jié)果是:n); while(!Empty_Sq(&S) /*當(dāng)棧不為空時,出棧操作*/ Pop_SeqStack(&S,&x) ; if(i=OVERFLOW) printf(n棧為空不能進行出棧操作!); return ; else printf(%x,x); /*if*/void main() int Num,r; printf(請輸入要進行轉(zhuǎn)換的數(shù)據(jù)和數(shù)制:(例如

53、: 45,8 )n);/*輸入要轉(zhuǎn)換的數(shù)據(jù)和轉(zhuǎn)換的進制*/ scanf(%d,%d,&Num,&r); if (Num=0)&(r0) conversion(Num,r); else printf(輸入錯誤!n);隊列出入#include#include#include#include#define MAXSIZE 30#define TRUE 1#define FALSE 0#define OK 1#define ERROR 0#define OVERFLOW -1typedef int Status; /*調(diào)用自定義庫文件*/*隊列的根本運算*/typedef char DataType;

54、typedef struct DataType DataMAXSIZE ; /*數(shù)據(jù)的存儲區(qū)*/ int front,rear; /*隊頭、隊尾指針*/ CirSeQueue; /*循環(huán)隊*/ CirSeQueue sq; void Init_SeQueue(CirSeQueue *sq) sq-front=sq-rear=0 ;Status Empty_SeQueue(CirSeQueue *sq) if (sq-front=sq-rear) return TRUE; else return FALSE; Status In_SeQueue (CirSeQueue *sq , DataTyp

55、e x) if(sq-rear+1) % MAXSIZE=sq-front) printf(隊滿!n); return OVERFLOW; /* 隊滿不能入隊 */ else sq-Datasq-rear=x ; sq-rear=(sq-rear+1) % MAXSIZE ; return OK; /* 入隊完成 */ Status Out_SeQueue (CirSeQueue *sq , DataType *y) if (Empty_SeQueue(sq) ) printf(隊空!n); return OVERFLOW; /* 隊空不能出隊 */ else *y=sq-Datasq-fro

56、nt; /* 讀出隊頭元素 */ sq-front=(sq-front+1) % MAXSIZE;return OK; /* 出隊完成 */ void Print_SeQueue(CirSeQueue *sq) /*輸出隊列里的元素*/ int i; printf(隊列成員: n); for(i=sq-front;irear-1;i+) printf(%c ,sq-Datai); printf(n); /*Print_SeQueue*/void InQue_Op() /*入隊操作*/ char ch_x; int i; getchar(); printf(輸入一個入隊的字符(如果字符是 0,輸

57、入結(jié)束):n); scanf(%c,&ch_x); while(ch_x!=0) if ( In_SeQueue(&sq ,ch_x)= OVERFLOW) printf(入隊失敗!n); return; else printf(入隊成功!n 輸入一個入隊的字符n); getchar(); scanf(%c,&ch_x); /*while*/ /*InQue_Op*/void OutQue_Op() /*出隊操作*/ char e,ch_y; getchar();printf(如果想進行出隊操作,請按空格鍵然后回車!n); scanf(%c,&ch_y); while(ch_y= ) if(O

58、ut_SeQueue(&sq,&e)=OK) printf(出隊操作成功!n); printf(出隊的字符是%cn,e); getchar(); scanf(%c,&ch_y); /*if*/ else return; /*while*/ /*OutQue_Op*/void main() int i,flag=1; Init_SeQueue(&sq); while(flag) printf(請選擇操作: 1-入隊; 2-出隊; 0-退出程序: n); scanf(%d,&flag); switch(flag) case 0: Print_SeQueue(&sq); printf(n程序結(jié)束n)

59、; return; case 1: InQue_Op(); break; case 2: OutQue_Op(); break; default:printf(選擇的操作無效n); break; /*switch*/ Print_SeQueue(&sq); /*外層循環(huán)結(jié)束*/導(dǎo)讀:用廣義表建立及遍歷導(dǎo)讀:用廣義表建立及遍歷按層次依次輸入結(jié)點建立二叉樹用指針數(shù)組作隊列二叉樹的遍歷簡版演示二叉樹的先序建立與遍歷二叉樹的生成 查找與刪除二叉樹的先序建立及按層次遍歷中序線索二叉樹未要求哈夫曼樹未要求用廣義表建立及遍歷#include #include #define MaxSize 100typed

60、ef char DataType;typedef struct nodeDataType data;/*數(shù)據(jù)元素*/struct node *lchild;/*指向左孩子*/struct node *rchild;/*指向右孩子*/ BinTNode;void CreateBinTNode(BinTNode *&b,char *str);/創(chuàng)立BinTNode *FindNode(BinTNode *b,DataType x);/查找節(jié)點int BinTNodeHeight(BinTNode *b);/求高度void DispBinTNode(BinTNode *b);/輸出int Nodes

溫馨提示

  • 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

提交評論