版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、.數(shù)據(jù)結(jié)構(gòu)實驗報告班 級: 計 學(xué) 號:姓 名:設(shè)計日期: 西安計算機(jī)學(xué)院實驗題目 1)棧的順序存儲結(jié)構(gòu) 2)棧的鏈?zhǔn)酱鎯Y(jié)構(gòu) 3)隊列的鏈?zhǔn)酱鎯Y(jié)構(gòu) 4)隊列的循環(huán)存儲結(jié)構(gòu)2. 需求分析 本演示程序用C語言編寫,完成棧和列的初始化,入棧、出棧、輸出操作。1) 對于順序棧,入棧時要先判斷棧是否滿了,棧滿不能入棧,否則出現(xiàn)空間溢出;在進(jìn)棧出棧和讀取棧頂時先判棧是否為空,為空時不能操作。2) 在一個鏈隊表中需設(shè)定兩個指針分別指向隊列的頭和尾。3) 隊列的存儲結(jié)構(gòu):注意要判斷隊滿和隊空。4) 程序所能達(dá)到的功能:完成棧的初始化,入棧,出棧和輸出操作;完成隊列的初始化,入隊列,出隊列和輸出操作。3.
2、概要設(shè)計 本程序包含1、棧的順序存儲結(jié)構(gòu)包含的函數(shù):1) 主函數(shù)main()2) 入棧函數(shù)Push()3) 出棧函數(shù)Pop()2、棧的鏈?zhǔn)酱鎯Y(jié)構(gòu)包含的函數(shù):1) 主函數(shù)main()2) 入棧函數(shù)PushStack()3) 退棧函數(shù)PopStack()4) 取棧頂元素函數(shù)Getstack top()3、隊列的鏈?zhǔn)酱鎯Y(jié)構(gòu)所包含的函數(shù):1) 主函數(shù)main()2) 入隊函數(shù)EnQueue()3) 出隊函數(shù)DeQueue()4 隊列的循環(huán)所包含的函數(shù):1) 主函數(shù)main()2) 初始化循環(huán)函數(shù)CircSeqQueue()3) 入隊函數(shù)EnQueue()4) 出隊函數(shù)DeQueue()5) 取隊首
3、元素函數(shù)GetFront()4. 詳細(xì)設(shè)計 1)棧的順序存儲結(jié)構(gòu)*include<stdio.h>*include<stdlib.h>*include<conio.h>*define MAXSIZE 20typedef int datatype;typedef struct datatype elemMAXSIZE; int top;SeqStack;int init(SeqStack *s) s->top=-1; return 1;void print(SeqStack *s)char ch; int i;if(s->top=-1)printf
4、("n 棧已空.");elsei=s->top;while(i!=-1)printf("n data=%d",s->elemi); i-;printf("n 按回車?yán)^續(xù)");ch=getch();void push(SeqStack *s,datatype x)if(s->top=MAXSIZE-1) printf("n 棧已滿!");else s->elem+s->top=x;datatype pop(SeqStack*s)datatype x;if(s->top=-1)pri
5、ntf("n 棧已空! "); x=-1;elsex=s->elems->top-;return(x);void main()SeqStack s; int k; datatype x;if(init(&s)do printf("nnn"); printf("n*"); printf("nn 1. x進(jìn)棧"); printf("nn 2.出棧返回其值"); printf("nn 3 結(jié)束"); printf("n*"); printf(
6、"n 請選擇(123)"); scanf("%d",&k); switch(k) case 1:printf("n 請輸入進(jìn)棧整數(shù) X=");scanf("%d",&x); push(&s,x);print(&s); break; case 2: x=pop(&s); printf("n 出棧元素:%d",x); print(&s); break; case 3:exit(0); printf("n-");while(k>
7、=1 &&k<3);printf("n 按回車返回");getch();else printf("n 初始化失敗!n");2) .棧的鏈?zhǔn)酱鎯Y(jié)構(gòu)*include<stdio.h>*include<stdlib.h>typedef struct SNodeint data;struct SNode*next;SNode,*LinkStack;LinkStack top;LinkStack PushStack(LinkStack top,int x)/入棧LinkStack s;s=(LinkStack)mal
8、loc(sizeof(SNode);s->data=x;s->next=top;top=s;return top;LinkStack PopStack(LinkStack top) /退棧LinkStack p;if(top!=NULL)p=top;top=top->next;free(p);printf("退棧已完成n");return top;elseprintf("棧是空的,無法退棧!n");return 0;int GetStackTop(LinkStack top) /取棧頂元素return top->data;bool
9、 IsEmpty()return top=NULL"true:false;void Print()SNode*p;p=top;if(IsEmpty()printf("The stack is empty!n");return;while(p)printf("%d",p->data);p=p->next;printf("n");void main()int x,a,b;char m;do printf("n"); printf(" 鏈棧的基本操作 n"); printf(&q
10、uot; n"); printf(" 1.置空棧 n"); printf(" 2.進(jìn)棧 n"); printf(" 3.退棧 n"); printf(" 4.取棧頂元素 n"); printf(" 5.退出程序 n"); printf("n 請選擇一個數(shù)字(1 2 3 4 5):"); scanf("%c",&m);switch(m)case '1': top=NULL; printf("n棧已置空!"
11、); break;case '2': printf("請輸入要進(jìn)棧的元素個數(shù)是:"); scanf("%d",&a); printf("n請輸入要進(jìn)棧的%d個元素:",a); for(b=0;b<a;b+) scanf("%d",&x); top=PushStack(top,x); printf("進(jìn)棧已完成!n"); printf("n輸出棧為:"); Print(); break;case '3': printf(&q
12、uot;n操作之前的輸出棧為:"); Print(); top=PopStack(top); printf("n操作過后的輸出棧為:"); Print(); break;case '4': printf("n輸出棧為:"); Print(); if(top!=NULL) printf("n棧頂元素是:%dn",GetStackTop(top); else printf("n棧是空的,沒有元素!"); break;case '5':break;default:printf(&
13、quot;n輸入的字符不對,請重新輸入!");break;getchar();while(m!='5');運(yùn)算結(jié)果:3) 隊列的鏈?zhǔn)酱鎯Y(jié)構(gòu)*include<stdio.h>*include<stdlib.h>*include<conio.h>*include<stdio.h>*include<stdlib.h>*include<math.h>typedef int dataType;typedef struct node dataType data; struct node *next;QNod
14、e;typedef structQNode *front,*rear;LQueue;/*初始化*/int init(LQueue *q)if(q->front=(QNode *)malloc(sizeof(QNode)=NULL)return 0;q->rear=q->front;q->front->next=NULL;return 1;/*出隊*/void print(LQueue Q) QNode *p; char ch; p=Q.front->next; while(p!=NULL)printf("n%d",p->data);
15、 p=p->next; printf("n 按回車鍵繼續(xù)。"); ch=getch();/*入隊*/int EnQueue(LQueue *q,dataType x) QNode *p; if(p=(QNode*)malloc(sizeof(QNode)=NULL) return 0; p->data=x; p->next=NULL; q->rear->next=p; q->rear=p; return 1;/*出隊*/dataType DeQueue(LQueue *q)QNode *p;dataType x;if(q->fron
16、t=q->rear)printf("n 隊列空"); x=-1;elsep=q->front->next;q->front->next=p->next;x=p->data;free(p);if(q->front->next=NULL) q->rear=q->front;return(x);void main()int k;dataType e,x;char ch;LQueue Q;init(&Q);doprintf("nnn");printf("n*");pri
17、ntf("nn1.元素入隊列");printf("nn2.出隊列返回");printf("nn3.結(jié)束");printf("n*");printf("n請選擇(1,2,3)");scanf("%d",&k);switch(k)case 1:printf("n 進(jìn)隊 e=");scanf("%d",&e);EnQueue(&Q,e);print(Q);break;case 2:x=DeQueue(&Q);p
18、rintf("n 出隊元素:%d",x);print(Q); break;case 3:exit(0);printf("n-");while(k>=1&&k<3);printf("n按回車鍵,返回。");ch=getch();4) 隊列的循環(huán)存儲*include<stdio.h> *include<process.h> *include<iostream.h> *include<stdlib.h> *define MaxSize 100 typedef int
19、 ElemType; typedef struct ElemType dataMaxSize; int front; int rear; CircSeqQueue; /順序循環(huán)隊列的初始化 void QueueInitial(CircSeqQueue *pQ) /創(chuàng)建一個又指針pQ所指向的空順序循環(huán)隊列 pQ->front=pQ->rear=0; /順序循環(huán)隊列判空 int IsEmpty(CircSeqQueue *pQ) /順序循環(huán)隊列為空時返回1,否則返回0 return pQ->front=pQ->rear; /順序循環(huán)隊列判滿 int IsFull(CircS
20、eqQueue *pQ) /循環(huán)隊列為滿時返回1,否則返回0 return (pQ->rear+1)%MaxSize=pQ->front; /元素進(jìn)隊 void EnQueue(CircSeqQueue *pQ, ElemType e) /若隊列不滿,則元素e進(jìn)隊 if(IsFull(pQ)/隊列已滿,退出 printf("隊列溢出!n"); exit(1); pQ->rear=(pQ->rear+1)%MaxSize;/隊尾指針后移 pQ->datapQ->rear=e; /元素出隊 ElemType DeQueue(CircSeqQu
21、eue *pQ) /若循環(huán)隊列不為空,則刪除隊頭元素,并返回它的值 if(IsEmpty(pQ)/隊列為空,退出 printf("空隊列!n"); exit(1); pQ->front=(pQ->front+1)%MaxSize;/隊頭指針后移 return pQ->datapQ->front; /取隊頭元素 ElemType GetFront(CircSeqQueue *pQ) /若隊列不為空,則返回隊頭元素的值 if(IsEmpty(pQ) printf("空隊列!n"); exit(1); return pQ->dat
22、a(pQ->front+1)%MaxSize; /循環(huán)隊列置空 void MakeEmpty(CircSeqQueue *pQ) /將由指針pQ所指向的隊列變?yōu)榭钻?pQ->front=pQ->rear=0; void main() int k,m=1,n,i; CircSeqQueue *pQ; ElemType e; pQ=new CircSeqQueue; QueueInitial(pQ); while(k) printf("n*n");printf(" 1.元素進(jìn)隊 n");printf(" 2.元素出隊返回 n");printf(&quo
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 施工安全協(xié)議書模板
- 2025年度棗樹種植與現(xiàn)代農(nóng)業(yè)園區(qū)建設(shè)合同4篇
- 行業(yè)間對于展會安全管理知識的普及推廣
- 網(wǎng)絡(luò)安全背景下學(xué)生行為規(guī)范的強(qiáng)化措施
- 科技助力孩子藝術(shù)成長現(xiàn)代教學(xué)方法與實踐
- 二零二五年度車輛擔(dān)保質(zhì)押投資合作合同4篇
- 2025版施工安全協(xié)議書:裝配式建筑安全協(xié)議范本3篇
- 維護(hù)策略在實驗室設(shè)備長期運(yùn)行中的重要性
- 二零二五年度車牌租賃與車輛租賃信用評估合同4篇
- 巖棉防火技術(shù)在現(xiàn)代建筑中的應(yīng)用研究
- 人教版數(shù)學(xué)四年級下冊核心素養(yǎng)目標(biāo)全冊教學(xué)設(shè)計
- JJG 692-2010無創(chuàng)自動測量血壓計
- 三年級下冊口算天天100題(A4打印版)
- 徐州市2023-2024學(xué)年八年級上學(xué)期期末地理試卷(含答案解析)
- CSSD職業(yè)暴露與防護(hù)
- 飲料對人體的危害1
- 數(shù)字經(jīng)濟(jì)學(xué)導(dǎo)論-全套課件
- 移動商務(wù)內(nèi)容運(yùn)營(吳洪貴)項目三 移動商務(wù)運(yùn)營內(nèi)容的策劃和生產(chǎn)
- 中考記敘文閱讀
- 產(chǎn)科溝通模板
- 2023-2024學(xué)年四川省成都市小學(xué)數(shù)學(xué)一年級下冊期末提升試題
評論
0/150
提交評論