版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、第三章實(shí)驗(yàn)報告實(shí)驗(yàn)名稱:數(shù)據(jù)結(jié)構(gòu)第三章實(shí)驗(yàn)實(shí)驗(yàn)類型:驗(yàn)證性學(xué)號姓名:紅領(lǐng)巾1. 問題描述(1)順序棧l 順序棧的C語言描述l 基本運(yùn)算的算法置空棧、判??铡⑦M(jìn)棧、出棧、讀棧頂、輸出棧、判棧滿(2)鏈棧l 鏈棧的C語言描述l 基本運(yùn)算的算法置空棧、判???、進(jìn)棧、出棧、讀棧頂(3)循環(huán)隊(duì)列l(wèi) 循環(huán)隊(duì)列的C語言描述l 基本運(yùn)算的算法置空隊(duì)、判隊(duì)空、進(jìn)隊(duì)、出隊(duì)、讀隊(duì)頭元素、輸出循環(huán)隊(duì)列(4)鏈隊(duì)列l(wèi) 鏈隊(duì)列的C語言描述l 基本運(yùn)算的算法置空隊(duì)、判隊(duì)空、進(jìn)隊(duì)、出隊(duì)、讀隊(duì)頭元素2. 數(shù)據(jù)結(jié)構(gòu)設(shè)計(1)順序棧要實(shí)現(xiàn)順序棧操作,我們需要一個棧頂指針一個棧底指針,以及說明當(dāng)前已經(jīng)分配的存儲空間(即當(dāng)前可使用的最
2、大容量),因此結(jié)構(gòu)中需要定義這三個部分typedef struct char *base; char *top; int stacksize;Sq;(2)鏈棧對于鏈棧,每一個人節(jié)點(diǎn)需要有data域和next域,分別儲存數(shù)據(jù)以及指向下一個節(jié)點(diǎn),下一個節(jié)點(diǎn)也應(yīng)該是擁有這兩個域,所以用到嵌套定義來定義節(jié)點(diǎn)的數(shù)據(jù)結(jié)構(gòu)typedef struct nodechar data;struct node *next;node;(3)循環(huán)隊(duì)列對于循環(huán)隊(duì)列,需要有頭尾指針指向隊(duì)列頭元素和尾元素的下一個位置,所以我們定義front,rear指針,為了說明動態(tài)分配的存儲空間,我們定義了base,這就是循環(huán)隊(duì)列的存儲結(jié)
3、構(gòu)typedef struct int *base; int front; int rear;SqQueue;(4)鏈隊(duì)列根據(jù)要求可知,我們運(yùn)用單鏈隊(duì)列即可實(shí)現(xiàn)所需要的功能,對于單鏈隊(duì)列,我們需要兩個指針作為隊(duì)頭隊(duì)尾指針從而實(shí)現(xiàn)隊(duì)列的操作,所以定義front,rear。對于每一個節(jié)點(diǎn)都有data和next域來存儲數(shù)據(jù)和指向下一個節(jié)點(diǎn),所以進(jìn)行這種節(jié)點(diǎn)定義。typedef struct QNode int data;QNode *next;QNode,*QPtr;typedef struct QlinkQPtr front; QPtr rear;Qlink;3. 算法設(shè)計(1) 順序棧系統(tǒng)規(guī)定的
4、功能設(shè)計的算法有:置空棧、判???、進(jìn)棧、出棧、讀棧頂、輸出棧、判棧滿1) 初始化和建立順序棧S1:定義數(shù)據(jù)結(jié)構(gòu)類型typedef struct char *base; char *top; int stacksize;Sq/定義結(jié)構(gòu)體,其中包含棧頂、棧尾指針和存儲空間S2:初始化這個順序棧int InitSq(Sq&S) S.base=(char *)malloc(STACK_INIT_SIZE*sizeof(Sq); if(!S.base)exit(OVERFLOW); S.top=S.base; S.stacksize=STACK_INIT_SIZE; return OK; /申請
5、存儲空間,并且將棧頂棧尾元素指在一個位置,構(gòu)造空棧S3:從鍵盤輸入一串字符,根據(jù)這些字符構(gòu)造順序棧Sq create(Sq &S)InitSq(S);printf("請輸入你的棧");char str100;gets(str);/得到字符int n=strlen(str);for(int i=0;i<n;i+)Push(S,stri);/調(diào)用Push函數(shù)將每個字符入棧return S; 2)置空棧編寫子函數(shù)Clear,使其可以實(shí)現(xiàn)置空棧功能int Clear(Sq&S)while(S.top!=S.base)char e;Pop(S,e);return
6、 OK; 在主函數(shù)里調(diào)用Clear子函數(shù),就能達(dá)到置空棧的功能3) 判??誗1:編寫判斷??盏淖雍瘮?shù)Empty,使其實(shí)現(xiàn)判??展δ躨nt Empty(Sq S)if(S.top=S.base)return OK;else return ERROR;S2:在主函數(shù)調(diào)用時根據(jù)子函數(shù)返回值判斷輸出內(nèi)容if(Empty(S) printf("Emptyn");else printf("NotEmpty");4) 進(jìn)棧S1:從客戶端得到所要入棧的元素printf("進(jìn)棧元素是:");scanf("%c",&x);S2
7、:編寫子函數(shù)Push,使其可以實(shí)現(xiàn)將元素入棧功能int Push(Sq&S,char e)if(S.top-S.base>=S.stacksize) S.base=(char*)realloc(S.base,(S.stacksize+STACKINCREMENT)*sizeof(char);if(!S.base) exit (OVERFLOW);S.top=S.base+S.stacksize;/調(diào)整指針S.stacksize+=STACKINCREMENT;/增大空間*S.top+=e;return OK;5) 出棧S1:編寫子函數(shù)GetTop,使其可以得到棧頂元素,從而確定要
8、刪去的元素是什么,并且返回這個元素int GetTop(Sq S,char &e)if(S.top=S.base) return ERROR;e=*(S.top-1);return e;S2:編寫子函數(shù)Pop,刪除棧頂元素int Pop(Sq&S,char e)if(S.top=S.base)return ERROR;e=*-S.top;return e;S3:編寫子函數(shù)Print,讓這個函數(shù)可以輸出棧里每一個元素來輸出出棧后的棧里元素int Print(Sq S) char *p,*q; p=S.top; q=S.base; if(p=q) return ERROR; whi
9、le(p!=q) printf("%cn",*(p-1); p-; return OK;6) 讀棧頂調(diào)用函數(shù)GetTop,讀到棧頂元素,并且輸出這個元素GetTop(S,a);printf("%cn",a)7)輸出棧調(diào)用函數(shù)Print,輸出棧里每一個元素8)判棧滿S1:編寫函數(shù)T,使其可以實(shí)現(xiàn)判棧滿功能int T(Sq S) if(S.top-S.base>=S.stacksize) return OK; else return ERROR;S2:根據(jù)返回值,確定輸出內(nèi)容if(T(S)printf("Yn");else prin
10、tf("Nn");9) 選擇功能S1:彈出提示,得到鍵盤處根據(jù)提示所輸入的字符printf("選擇你想要的功能n");printf("1置空棧n2判斷??課3進(jìn)棧n4出棧n5讀棧頂n6輸出棧n7判棧滿n");printf("選擇你想要的功能n");scanf("%d",&m);S2:用switch分析得到的m,根據(jù)不同的m進(jìn)入不同的case,調(diào)用不同的函數(shù)switch(m)case 1:Clear(S);printf("Emptyn");break;case 2:if
11、(Empty(S) printf("Emptyn"); else printf("NotEmpty"); break;case 3:printf("進(jìn)棧元素是:");scanf("%c",&x);Push(S,x);Print(S);break;case 4:GetTop(S,a);Pop(S,a);Print(S);break;case 5:GetTop(S,a);printf("%cn",a);break;case 6:Print(S);break;case 7:if(T(S)pri
12、ntf("Yn"); else printf("Nn");break;(2) 鏈棧系統(tǒng)規(guī)定的功能設(shè)計的算法有:置空棧、判棧空、進(jìn)棧、出棧、讀棧頂1)定義節(jié)點(diǎn),初始化鏈棧,創(chuàng)建鏈棧S1:定義節(jié)點(diǎn)typedef struct nodechar data;struct node *next;node;/節(jié)點(diǎn)的定義S2:初始化鏈棧int Init(node* &h)h->next=NULL;return OK;/建立一個空棧S3:編寫子函數(shù)Set,使其根據(jù)鍵盤端的輸入,創(chuàng)建鏈棧int Set(node* &h)int i; printf(&
13、quot;請輸入你的棧");char str100;gets(str);/得到字符串int n=strlen(str); for(i=0;i<n;i+)Push(h,stri);/將每一個字符入棧return OK;2) 置空棧編寫子函數(shù)Clear,使其可以實(shí)現(xiàn)置空棧功能int Clear(node* &h)h->next=NULL;return OK;在主函數(shù)里調(diào)用Clear子函數(shù),就能達(dá)到置空棧的功能3) 判棧空S1:編寫判斷??盏淖雍瘮?shù)Empty,使其實(shí)現(xiàn)判??展δ躨nt Empty(node* &h)if(h->next=NULL) retu
14、rn OK;else return FALSE;S2:在主函數(shù)調(diào)用時根據(jù)子函數(shù)返回值判斷輸出內(nèi)容if(Empty(h) printf("Emptyn");else printf("NotEmpty");break;if(Empty(S) printf("Emptyn");else printf("NotEmpty");4) 進(jìn)棧S1:從客戶端得到所要入棧的元素printf("進(jìn)棧元素是:");scanf("%c",&x);S2:編寫子函數(shù)Push,使其可以實(shí)現(xiàn)將元素入
15、棧功能int Push(node* &h,char x)node *s;s=(node*)malloc(sizeof(node);s->data=x;s->next=h;h=s;return OK;5) 出棧S1:編寫子函數(shù)Pop,刪除棧頂元素int Pop(node* &h)char x;x=h->data;node *p;p=(node*)malloc(sizeof(node);p=h;h=h->next;free(p);return OK;S2:編寫子函數(shù)Gethead,使其可以得到棧頂元素,從而得到新的棧頂元素來確認(rèn)成功int Gethead(n
16、ode* &h,char a)if(h->next=NULL)return FALSE ;a=h->data;printf("head:%cn",a); return OK;6) 讀棧頂調(diào)用Gethead函數(shù)即可完成功能7) 選擇需要的功能用switch分析得到的m,根據(jù)不同的m進(jìn)入不同的case,調(diào)用不同的函數(shù)printf("選擇你想要的功能n");scanf("%d",&m);getchar();switch(m)case 1:Clear(h);printf("Emptyn");br
17、eak;case 2:if(Empty(h) printf("Emptyn");else printf("NotEmpty");break;case 3:printf("進(jìn)棧元素是:");scanf("%c",&x);Push(h,x);break;case 4:Pop(h);Gethead(h,a);break;case 5:Gethead(h,a);break;(3) 循環(huán)隊(duì)列系統(tǒng)規(guī)定的功能設(shè)計的算法有:置空隊(duì)、判隊(duì)空、進(jìn)隊(duì)、出隊(duì)、讀隊(duì)頭元素、輸出1) 初始化和建立隊(duì)列S1:定義結(jié)構(gòu)體typedef s
18、truct int *base; int front; int rear;SqQueue;S2:初始化隊(duì)列int Init(SqQueue &Q) Q.base=(int *)malloc(MAXQSIZE*sizeof(int); if(!Q.base)return (OVERFLOW); Q.front=Q.rear=0; return OK;S3:建立循環(huán)隊(duì)列int Set(SqQueue &Q)int i;Init(Q);char str100;printf("請輸入隊(duì)列:n");gets(str);int n=strlen(str);for(i=0
19、;i<n;i+)En(Q,stri);return OK;2)置空隊(duì)編寫子函數(shù)Clear,使其可以實(shí)現(xiàn)置空隊(duì)功能int Clear(SqQueue &Q) if(Q.rear=Q.front)return OK; Q.rear=Q.front; return OK;在主函數(shù)里調(diào)用Clear子函數(shù),就能達(dá)到置空隊(duì)的功能3) 判隊(duì)空S1:編寫判斷??盏淖雍瘮?shù)Empty,使其實(shí)現(xiàn)判隊(duì)空功能int Empty(SqQueue &Q) if(Q.rear=Q.front)return OK; else return FALSE;S2:在主函數(shù)調(diào)用時根據(jù)隊(duì)中指針位置判斷輸出內(nèi)容if(
20、Q.front=Q.rear)printf("empty");else printf("notempty");4) 進(jìn)隊(duì)S1:從客戶端得到所要入隊(duì)的元素printf("進(jìn)隊(duì)元素是:");scanf("%c",&x);S2:編寫子函數(shù)En,使其可以實(shí)現(xiàn)將元素入棧功能int En(SqQueue &Q,char e) if(Q.rear+1)%MAXQSIZE=Q.front)return ERROR; Q.baseQ.rear=e; Q.rear=(Q.rear+1)%MAXQSIZE; return
21、 OK;5) 出隊(duì)S1:編寫子函數(shù)De,刪除隊(duì)頭元素int Pop(node* &h)char x;x=h->data;node *p;p=(node*)malloc(sizeof(node);p=h;h=h->next;free(p);return OK;S2:編寫子函數(shù)Gethead,使其可以得到隊(duì)頭元素,從而得到新的隊(duì)頭元素來確認(rèn)成功int Gethead(node* &h,char a)if(h->next=NULL)return FALSE ;a=h->data;printf("head:%cn",a); return OK
22、;6) 讀隊(duì)頭元素調(diào)用Gethead函數(shù)即可實(shí)現(xiàn)7) 輸出隊(duì)中元素編寫子函數(shù)Print,使其可以輸出隊(duì)中每一個元素int Print(SqQueue Q) if(Q.rear=Q.front)return ERROR; int a,b; a=Q.front; b=Q.rear; while(a!=b) (printf("%cn",Q.basea); a=(a+1)%MAXQSIZE; return OK;8)選擇需要的功能用switch分析得到的m,根據(jù)不同的m進(jìn)入不同的case,調(diào)用不同的函數(shù)printf("選擇你需要的功能n"); printf(&q
23、uot;1置空隊(duì)n2判隊(duì)空n3進(jìn)隊(duì)n4出隊(duì)n5讀隊(duì)頭元素n6輸出循環(huán)隊(duì)列n");while(1)printf("選擇你想要的功能n");scanf("%d",&m);switch(m)case 1:Clear(Q);printf("empty");break;case 2:if(Q.front=Q.rear)printf("empty");else printf("notempty");break;case 3:printf("你要入隊(duì)的元素n");getc
24、har();scanf("%c",&x);En(Q,x);break;case 4:if(!Empty(Q)De(Q,e);Gethead(Q,a);printf("新隊(duì)列頭元素:");printf("%c",a);else printf("隊(duì)列已空");break;case 5:Gethead(Q,a);printf("新隊(duì)列頭元素:");printf("%c",a);break;case 6:Print(Q);(4) 鏈隊(duì)列系統(tǒng)規(guī)定的功能設(shè)計的算法有:置空隊(duì)、判隊(duì)
25、空、進(jìn)隊(duì)、出隊(duì)、讀隊(duì)頭元素1) 初始化和建立隊(duì)列S1:定義結(jié)構(gòu)體typedef struct QNodeint data;QNode *next;QNode,*QPtr;typedef struct Qlink QPtr front; QPtr rear;Qlink;/定義單鏈隊(duì)列的鏈?zhǔn)酱鎯Y(jié)構(gòu)S2:初始化int Initqueue(Qlink &Q) Q.front=Q.rear=(QPtr)malloc(sizeof(QNode); if(!Q.front)exit(OVERFLOW); Q.front->next=NULL; return OK;/構(gòu)造空隊(duì)列 S3:建立隊(duì)列
26、 Qlink Setqueue(Qlink &Q) int i; Initqueue(Q); QPtr p; printf("請輸入你的隊(duì)列");char str100;gets(str);int n=strlen(str); for(i=0;i<n;i+) p=(QPtr)malloc(sizeof(QNode); p->data=stri; p->next=NULL; Q.rear->next=p; Q.rear=p; return Q;2) 置空隊(duì)編寫子函數(shù)Clear,使其可以實(shí)現(xiàn)置空隊(duì)功能int Clear(Qlink &Q)
27、Q.front=Q.rear; return OK;3) 判隊(duì)空S1:編寫判斷??盏淖雍瘮?shù)Empty,使其實(shí)現(xiàn)判隊(duì)空功能int Empty(Qlink &Q) if(Q.front=Q.rear) return TRUE; else return FALSE;S2:在主函數(shù)調(diào)用時根據(jù)隊(duì)中指針位置判斷輸出內(nèi)容if(Q.front=Q.rear)printf("empty");else printf("notempty");4) 進(jìn)隊(duì)S1:從客戶端得到所要入隊(duì)的元素printf("入隊(duì)元素是:");scanf("%c&q
28、uot;,&x);S2:編寫子函數(shù)En,使其可以實(shí)現(xiàn)將元素入棧功能int En(Qlink &Q,char e) QPtr p; p=(QPtr)malloc(sizeof(QNode); if(!p)exit(OVERFLOW); p->data=e; p->next=NULL; Q.rear->next=p; Q.rear=p;free(p); return OK;5) 出隊(duì)S1:編寫子函數(shù)De,刪除隊(duì)頭元素int De(Qlink &Q,char &e)if(Q.front=Q.rear)return FALSE; QPtr p; p=Q
29、.front->next; Q.front->next=p->next;e=p->data; free(p); return OK;S2:編寫子函數(shù)Gethead,使其可以得到隊(duì)頭元素,從而得到新的隊(duì)頭元素來確認(rèn)成功int Gethead(Qlink Q,char &n) if(Q.front=Q.rear)return FALSE; n=Q.front->next->data; return OK;6)讀隊(duì)頭元素調(diào)用函數(shù)Gethead就可以達(dá)到功能7) 功能選擇用switch分析得到的m,根據(jù)不同的m進(jìn)入不同的case,調(diào)用不同的函數(shù)printf(
30、"選擇你需要的功能n"); printf("1置空隊(duì)n2判隊(duì)空n3進(jìn)隊(duì)n4出隊(duì)n5讀隊(duì)頭元素n");while(1)printf("選擇你想要的功能n");scanf("%d",&m);switch(m)case 1:Clear(Q);printf("empty");break;case 2:if(Q.front=Q.rear)printf("empty");else printf("notempty");break;case 3:printf(&
31、quot;你要入隊(duì)的元素n");getchar();scanf("%c",&x);En(Q,x);break;case 4:if(!Empty(Q)De(Q,e);Gethead(Q,a);printf("新隊(duì)列頭元素:");printf("%c",a);else printf("隊(duì)列已空");break;case 5:Gethead(Q,a);printf("新隊(duì)列頭元素:");printf("%c",a);break;4.界面設(shè)計對這四個實(shí)驗(yàn),每一個都提
32、示要求先輸入字符串,之后彈出功能菜單,提示輸入相應(yīng)數(shù)字進(jìn)行選擇,進(jìn)行完每一個功能后程序并不退出,直接進(jìn)行下一次功能選擇,順序棧界面見圖1,鏈棧界面見圖2,循環(huán)隊(duì)列見圖3,鏈隊(duì)列見圖4(圖1)(圖2)(圖3)(圖4)5. 運(yùn)行、測試與分析1)運(yùn)行程序,按照提示輸入字符串,彈出功能菜單,順序棧如圖5.1 ,鏈棧如圖5.2,循環(huán)隊(duì)列如圖5.3,鏈隊(duì)列如圖5.4 (圖5.1) (圖5.2) (圖5.3) (圖5.4)2) 選擇功能順序棧:本次測試功能選擇順序?yàn)椋狠斎胱址袟??,進(jìn)棧,出棧,讀棧頂,輸出棧,判棧滿,置空棧,判??眨唧w結(jié)果見下圖如圖6.1鏈棧:本次測試功能選擇順序?yàn)椋狠斎胱址?,判?/p>
33、棧空,進(jìn)棧,讀棧頂,出棧,讀棧頂,置空棧,判斷???,具體結(jié)果見下圖如圖6.2循環(huán)隊(duì)列:本次測試功能選擇順序?yàn)椋狠斎胱址?,判斷?duì)空,進(jìn)隊(duì),讀隊(duì)頭,輸出循環(huán)隊(duì)列,出隊(duì),讀隊(duì)頭,置空隊(duì),判斷隊(duì)空,具體結(jié)果見下圖如圖6.3 鏈隊(duì)列:本次測試的功能選擇則順序?yàn)椋狠斎胱址嘘?duì)空,進(jìn)隊(duì),讀隊(duì)頭,出隊(duì),讀隊(duì)頭,置空隊(duì),判隊(duì)空,具體結(jié)果見下圖如圖6.4 (圖6.1) (圖6.2) (圖6.3) (圖6.4)6. 實(shí)驗(yàn)收獲及思考(1)每次只能進(jìn)行一次功能選擇解決方法:在主函數(shù)前加入while(1),就可以讓程序一直運(yùn)行(2)不能把相應(yīng)的鏈或隊(duì)列進(jìn)行按照任意的次序進(jìn)行功能選擇解決辦法:運(yùn)用switch語句,可
34、以隨意選擇功能(3) 每次出棧(隊(duì))后不能判斷出棧是否成功解決辦法:在出棧后輸出新的棧頭元素或者輸出?;蜿?duì)中全部元素收獲思考:(1) 了解了隊(duì)列和棧的數(shù)據(jù)結(jié)構(gòu),通過比較分析,知道了棧和隊(duì)列的相似點(diǎn)和不同點(diǎn),加深了對基礎(chǔ)知識的印象。(2) 學(xué)習(xí)到了在棧和隊(duì)列中如何實(shí)現(xiàn)入隊(duì)(棧),出隊(duì)(棧),以及讀取隊(duì)頭(棧頂元素),置空隊(duì)(棧),判隊(duì)(棧)空和輸出隊(duì)(棧)中全部元素的功能。(3) 復(fù)習(xí)了C語言,C+的相關(guān)知識,進(jìn)一步熟悉了編程,養(yǎng)成了編程的好習(xí)慣。7. 附錄(1) 順序棧#include <string.h>#include <stdlib.h>#include <
35、stdio.h>#define STACK_INIT_SIZE 100#define STACKINCREMENT 10#define OK 1#define ERROR 0#define OVERFLOW -1#define N 100typedef struct char *base; char *top; int stacksize;Sq;int InitSq(Sq&S) S.base=(char *)malloc(STACK_INIT_SIZE*sizeof(Sq); if(!S.base)exit(OVERFLOW); S.top=S.base; S.stacksize
36、=STACK_INIT_SIZE; return OK; int Push(Sq&S,char e)if(S.top-S.base>=S.stacksize)S.base=(char*)realloc(S.base,(S.stacksize+STACKINCREMENT)*sizeof(char);if(!S.base) exit (OVERFLOW);S.top=S.base+S.stacksize;S.stacksize+=STACKINCREMENT;*S.top+=e;return OK;Sq create(Sq &S)InitSq(S);printf("
37、;請輸入你的棧");char str100;gets(str);int n=strlen(str);for(int i=0;i<n;i+)Push(S,stri);return S;int GetTop(Sq S,char &e)if(S.top=S.base) return ERROR;e=*(S.top-1);return e;int Pop(Sq&S,char e)if(S.top=S.base)return ERROR;e=*-S.top;return e;int Clear(Sq&S)while(S.top!=S.base)char e;Pop
38、(S,e);return OK;int Empty(Sq S)if(S.top=S.base)return OK;else return ERROR;int Print(Sq S) char *p,*q; p=S.top; q=S.base; if(p=q) return ERROR; while(p!=q) printf("%cn",*(p-1); p-; return OK;int T(Sq S) if(S.top-S.base>=S.stacksize) return OK; else return ERROR;int main() Sq S;create(S)
39、;int m;char a,x;printf("選擇你想要的功能n");printf("1置空棧n2判斷棧空n3進(jìn)棧n4出棧n5讀棧頂n6輸出棧n7判棧滿n");while(1)printf("選擇你想要的功能n");scanf("%d",&m);getchar();switch(m)case 1:Clear(S);printf("Emptyn");break;case 2:if(Empty(S) printf("Emptyn"); else printf("
40、;NotEmpty"); break;case 3:printf("進(jìn)棧元素是:");scanf("%c",&x);Push(S,x);Print(S);break;case 4:GetTop(S,a);Pop(S,a);Print(S);break;case 5:GetTop(S,a);printf("%cn",a);break;case 6:Print(S);break;case 7:if(T(S)printf("Yn"); else printf("Nn");break;
41、return OK;(2) 鏈棧#include<iostream>#include<string.h>#include<stdlib.h>#include<malloc.h>#define OK 1#define ERROR 0 #define TRUE 1#define FALSE 0typedef struct nodechar data;struct node *next;node;int Init(node* &h)h->next=NULL;return OK;int Empty(node* &h)if(h->
42、;next=NULL) return OK;else return FALSE;int Push(node* &h,char x)node *s;s=(node*)malloc(sizeof(node);s->data=x;s->next=h;h=s;return OK;int Pop(node* &h)char x;x=h->data;node *p;p=(node*)malloc(sizeof(node);p=h;h=h->next;free(p);return OK;int Gethead(node* &h,char a)if(h->
43、next=NULL)return FALSE ;a=h->data;printf("head:%cn",a); return OK;int Set(node* &h)int i; /Init(h); printf("請輸入你的棧");char str100;gets(str);int n=strlen(str); for(i=0;i<n;i+)Push(h,stri);return OK;int Clear(node* &h)h->next=NULL;return OK;int main() node *h;h=(nod
44、e*)malloc(sizeof(node);Init(h);Set(h);int m;char a,x;printf("選擇你想要的功能n");printf("1置空棧n2判斷??課3進(jìn)棧n4出棧n5讀棧頂n");while(1)printf("選擇你想要的功能n");scanf("%d",&m);getchar();switch(m)case 1:Clear(h);printf("Emptyn");break;case 2:if(Empty(h) printf("Empty
45、n");else printf("NotEmpty");break;case 3:printf("進(jìn)棧元素是:");scanf("%c",&x);Push(h,x);break;case 4:Pop(h);Gethead(h,a);break;case 5:Gethead(h,a);break;return OK;(3) 循環(huán)隊(duì)列#include<stdio.h>#include<stdlib.h>#include<malloc.h>#include<string.h>#define TRUE 1#define FALSE 0#define OK 1#define ERROR 0#define INFEASIBLE -1#define OVERFLOW -2#define MAXQSIZE 100typedef struct int *base; int front; int rear;SqQueue;int Init(SqQueue &Q) Q.base=(int *)malloc(MAXQSIZE*sizeof(int); if(!Q.base)return (OVERFLOW
溫馨提示
- 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024版家具行業(yè)質(zhì)量保證與召回合同
- 家庭教育金儲備與投資策略
- 2024甲方乙方關(guān)于網(wǎng)絡(luò)信息安全服務(wù)的合同
- 2025年上教版九年級科學(xué)上冊月考試卷
- 二零二五年度智能社區(qū)門禁及訪客管理系統(tǒng)合同2篇
- 二零二五年度房屋抵押權(quán)設(shè)立合同模板3篇
- 二零二五年度建筑用鋼筋采購與質(zhì)量控制合同3篇
- 二零二五年度復(fù)雜多條款供應(yīng)鏈管理合同2篇
- 二零二五年度智能交通設(shè)備租賃與數(shù)據(jù)采集服務(wù)協(xié)議3篇
- 乙酸和乙醇(第2課時)(練習(xí))學(xué)生版
- 中試部培訓(xùn)資料
- 2024政務(wù)服務(wù)綜合窗口人員能力與服務(wù)規(guī)范考試試題
- JT∕T 1477-2023 系列2集裝箱 角件
- 《陸上風(fēng)電場工程設(shè)計概算編制規(guī)定及費(fèi)用標(biāo)準(zhǔn)》(NB-T 31011-2019)
- 22部能夠療傷的身心靈療愈電影
- 領(lǐng)導(dǎo)干部有效授權(quán)的技巧與藝術(shù)課件
- DB37-T 1915-2020 安全生產(chǎn)培訓(xùn)質(zhì)量控制規(guī)范-(高清版)
- 幼兒園“值日生”工作開展論文
- 光伏電站繼電保護(hù)運(yùn)行規(guī)程
- 承兌匯票臺帳模版
- 地下管道頂管施工方案(非常全)
評論
0/150
提交評論