版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、棧的順序表示和實現(xiàn)2.2基礎(chǔ)實驗2.2.1實驗?zāi)康模?)掌握棧的順序表示和實現(xiàn)(2)掌握棧的鏈式表示和實現(xiàn)(3)掌握隊列的順序表示和實現(xiàn)(4)掌握隊列的鏈式表示和實現(xiàn)2.2.2實驗內(nèi)容實驗一:棧的順序表示和實現(xiàn)【實驗內(nèi)容與要求】編寫一個程序?qū)崿F(xiàn)順序棧的各種基本運算,并在此基礎(chǔ)上設(shè)計一個主程序,完成如下功能:(1)初始化順序棧(2)插入元素(3)刪除棧頂元素(4)取棧頂元素(5)遍歷順序棧(6)置空順序?!局R要點】棧的順序存儲結(jié)構(gòu)簡稱為順序棧,它是運算受限的順序表。對于順序棧,入棧時,首先判斷棧是否為滿,棧滿的條件為:p-top= =MAXNUM-1,棧滿時,不能入棧;否則出現(xiàn)空間溢出,引起錯
2、誤,這種現(xiàn)象稱為上溢。出棧和讀棧頂元素操作,先判棧是否為空,為空時不能操作,否則產(chǎn)生錯誤。通常棧空作為一種控制轉(zhuǎn)移的條件。注意:(1)順序棧中元素用向量存放(2)棧底位置是固定不變的,可設(shè)置在向量兩端的任意一個端點(3)棧頂位置是隨著進棧和退棧操作而變化的,用一個整型量top(通常稱top為棧頂指針)來指示當前棧頂位置【實現(xiàn)提示】/*定義順序棧的存儲結(jié)構(gòu)*/typedef struct ElemType stackMAXNUM; int top;SqStack;/*初始化順序棧函數(shù)*/void InitStack(SqStack *p)q=(SqStack*)malloc(sizeof(SqS
3、tack) /*申請空間*/)/*入棧函數(shù)*/void Push(SqStack *p,ElemType x)if(p-toptop=p-top+1; /*棧頂+1*/ p-stackp-top=x; /*數(shù)據(jù)入棧*/*出棧函數(shù)*/ElemType Pop(SqStack *p)x=p-stackp-top; /*將棧頂元素賦給x*/p-top=p-top-1; /*棧頂-1*/*獲取棧頂元素函數(shù)*/ElemType GetTop(SqStack *p) x=p-stackp-top;/*遍歷順序棧函數(shù)*/void OutStack(SqStack *p) for(i=p-top;i=0;i-
4、)printf(第%d個數(shù)據(jù)元素是:%6dn,i,p-stacki);/*置空順序棧函數(shù)*/void setEmpty(SqStack *p) p-top= -1;【參考程序】#include#include#define MAXNUM 20#define ElemType int/*定義順序棧的存儲結(jié)構(gòu)*/typedef struct ElemType stackMAXNUM; int top;SqStack;/*初始化順序棧*/void InitStack(SqStack *p) if(!p) printf(Eorror); p-top=-1;/*入棧*/void Push(SqStack
5、 *p,ElemType x) if(p-toptop=p-top+1; p-stackp-top=x; else printf(Overflow!n);/*出棧*/ElemType Pop(SqStack *p) ElemType x; if(p-top!=0) x=p-stackp-top; printf(以前的棧頂數(shù)據(jù)元素%d已經(jīng)被刪除!n,p-stackp-top); p-top=p-top-1; return(x); else printf(Underflow!n); return(0); /*獲取棧頂元素*/ElemType GetTop(SqStack *p) ElemType
6、x; if(p-top!=0) x=p-stackp-top; return(x); else printf(Underflow!n); return(0); /*遍歷順序棧*/void OutStack(SqStack *p) int i; printf(n); if(p-toptop;i=0;i-) printf(第%d個數(shù)據(jù)元素是:%6dn,i,p-stacki);/*置空順序棧*/void setEmpty(SqStack *p)p-top= -1;/*主函數(shù)*/main() SqStack *q; int y,cord;ElemType a; do printf(n); printf
7、(第一次使用必須初始化!n); printf(n); printf(n 主菜單 n); printf(n 1 初始化順序棧 n); printf(n 2 插入一個元素 n); printf(n 3 刪除棧頂元素 n); printf(n 4 取棧頂元素 n); printf(n 5 置空順序棧 n); printf(n 6 結(jié)束程序運行 n); printf(n-n); printf(請輸入您的選擇( 1, 2, 3, 4, 5,6); scanf(%d,&cord); printf(n); switch(cord) case 1: q=(SqStack*)malloc(sizeof(SqSt
8、ack); InitStack(q); OutStack(q); break; case 2: printf(請輸入要插入的數(shù)據(jù)元素:a=); scanf(%d,&a); Push(q,a); OutStack(q); break; case 3: Pop(q); OutStack(q); break; case 4: y=GetTop(q); printf(n棧頂元素為:%dn,y); OutStack(q); break; case 5: setEmpty(q); printf(n順序棧被置空!n); OutStack(q); break; case 6: exit(0); while (
9、cordtop=NULL;/*鏈棧置空函數(shù)*/void setEmpty(LinkStack * s) s-top=NULL;/*入棧函數(shù)*/void pushLstack(LinkStack * s, Elemtype x) p=(StackNode *)malloc(sizeof(StackNode); /建立一個節(jié)點。 p-data=x; p-next=s-top; /指向棧頂。 s-top=p; /插入/*出棧函數(shù)*/Elemtype popLstack(LinkStack * s)x=p-data; s-top=p-next; /當前的棧頂指向原棧的next free(p); /釋放
10、/*取棧頂元素函數(shù)*/Elemtype StackTop(LinkStack *s) return s-top-data;/*遍歷鏈棧函數(shù)*/void Disp(LinkStack * s)while (p!=NULL) printf(%dn,p-data); p=p-next; 【參考程序】#include stdio.h#include malloc.h#include stdlib.htypedef int Elemtype;typedef struct stacknode Elemtype data; stacknode * next;StackNode;typedef struct
11、stacknode * top; /棧頂指針LinkStack;/*初始化鏈棧*/void InitStack(LinkStack * s) s-top=NULL; printf(n已經(jīng)初始化鏈棧!n);/*鏈棧置空*/void setEmpty(LinkStack * s) s-top=NULL; printf(n鏈棧被置空!n);/*入棧*/void pushLstack(LinkStack * s, Elemtype x) StackNode * p; p=(StackNode *)malloc(sizeof(StackNode); /建立一個節(jié)點。 p-data=x; p-next=s
12、-top; /由于是在棧頂pushLstack,所以要指向棧頂。 s-top=p; /插入/*出棧*/Elemtype popLstack(LinkStack * s) Elemtype x; StackNode * p; p=s-top; /指向棧頂 if (s-top =0) printf(n???,不能出棧!n); exit(-1); x=p-data; s-top=p-next; /當前的棧頂指向原棧的next free(p); /釋放 return x;/*取棧頂元素*/Elemtype StackTop(LinkStack *s) if (s-top =0) printf(n鏈??課
13、); exit(-1); return s-top-data;/*遍歷鏈棧*/void Disp(LinkStack * s) printf(n鏈棧中的數(shù)據(jù)為:n); printf(=n); StackNode * p; p=s-top; while (p!=NULL) printf(%dn,p-data); p=p-next; printf(=n);void main() printf(=鏈棧操作=nn); int i,m,n,a; LinkStack * s; s=(LinkStack *)malloc(sizeof(LinkStack); int cord; do printf(n);
14、printf(第一次使用必須初始化!n); printf(n); printf(n 主菜單 n); printf(n 1 初始化鏈棧 n); printf(n 2 入棧 n); printf(n 3 出棧 n); printf(n 4 取棧頂元素 n); printf(n 5 置空鏈棧 n); printf(n 6 結(jié)束程序運行 n); printf(n-n); printf(請輸入您的選擇( 1, 2, 3, 4, 5,6); scanf(%d,&cord); printf(n); switch(cord) case 1: InitStack(s); Disp(s); break; case
15、 2: printf(輸入將要壓入鏈棧的數(shù)據(jù)的個數(shù):n=); scanf(%d,&n); printf(依次將%d個數(shù)據(jù)壓入鏈棧:n,n); for(i=1;i=n;i+) scanf(%d,&a); pushLstack(s,a); Disp(s); break; case 3: printf(n出棧操作開始!n); printf(輸入將要出棧的數(shù)據(jù)個數(shù):m=); scanf(%d,&m); for(i=1;i=m;i+) printf(n第%d次出棧的數(shù)據(jù)是:%d,i,popLstack(s); Disp(s); break; case 4: printf(nn鏈棧的棧頂元素為:%dn,S
16、tackTop(s); printf(n); break; case 5: setEmpty(s); Disp(s); break; case 6: exit(0); while (cordfront=-1; q-rear=-1;/*入隊函數(shù)*/int append(sqqueue *q, Elemtype x) q-rear+;q-queueq-rear=x;/*出隊函數(shù)*/Elemtype Delete(sqqueue *q) x=q-queue+q-front;/*判斷隊列是否為空函數(shù)*/int Empty(sqqueue *q) if (q-front=q-rear) return T
17、RUE;/*取隊頭元素函數(shù)*/int gethead(sqqueue *q)return(q-queueq-front+1);/*遍歷隊列函數(shù)*/void display(sqqueue *q) while(srear) s=s+1; printf(%dqueues); /*建立順序隊列函數(shù)*/void Setsqqueue(sqqueue *q) for (i=0;in;i+) /*利用循環(huán)快速輸入數(shù)據(jù)*/ scanf(%d,&m); append(q,m); /*利用入隊函數(shù)快速輸入數(shù)據(jù)*/【參考程序】#include #include #define MAXNUM 100#define
18、Elemtype int#define TRUE 1#define FALSE 0typedef struct Elemtype queueMAXNUM; int front; int rear;sqqueue; /*隊列初始化*/int initQueue(sqqueue *q) if(!q) return FALSE; q-front=-1; q-rear=-1; return TRUE; /*入隊*/int append(sqqueue *q, Elemtype x) if(q-rear=MAXNUM-1) return FALSE; q-rear+; q-queueq-rear=x;
19、return TRUE;/*出隊*/Elemtype Delete(sqqueue *q) Elemtype x; if (q-front=q-rear) return 0; x=q-queue+q-front; return x;/*判斷隊列是否為空*/int Empty(sqqueue *q) if (q-front=q-rear) return TRUE; return FALSE;/*取隊頭元素*/int gethead(sqqueue *q) if (q-front=q-rear) return 0; return(q-queueq-front+1);/*遍歷隊列*/void dis
20、play(sqqueue *q) int s; s=q-front; if (q-front=q-rear) printf(隊列空!n); else printf(n順序隊列依次為:); while(srear) s=s+1; printf(%dqueues); printf(n); printf(順序隊列的隊尾元素所在位置:rear=%dn,q-rear); printf(順序隊列的隊頭元素所在位置:front=%dn,q-front); /*建立順序隊列*/void Setsqqueue(sqqueue *q) int n,i,m; printf(n請輸入將要入順序隊列的長度:); scanf(%d,&n); printf(n請依次輸入入順序隊列的元素值:n); for (i=0;in;i+) scanf(%d,&m); append(q,m); main() sqqueue *head; int x,y,z,select; head=(sqqueue
溫馨提示
- 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)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 中國石油大學(xué)(北京)《網(wǎng)絡(luò)及信息安全技術(shù)》2023-2024學(xué)年第一學(xué)期期末試卷
- 長春光華學(xué)院《數(shù)據(jù)倉庫理論與實踐實驗》2023-2024學(xué)年第一學(xué)期期末試卷
- 食品加工機械衛(wèi)生級潤滑產(chǎn)品
- 餐飲業(yè)前瞻與策略模板
- 財務(wù)團隊商務(wù)禮儀模板
- 專業(yè)基礎(chǔ)知識(給排水)-(給水排水)《專業(yè)基礎(chǔ)知識》模擬試卷1
- 生物地理學(xué)探究模板
- 商務(wù)禮儀講解模板
- 青少年健身指南模板
- 誠信考試-國旗下講話發(fā)言稿
- 老年人的安全保護及預(yù)防措施課件
- ICU鎮(zhèn)痛鎮(zhèn)靜治療知情同意書
- 政治表現(xiàn)及具體事例三條經(jīng)典優(yōu)秀范文三篇
- 高考詩歌鑒賞專題復(fù)習(xí):題畫抒懷詩、干謁言志詩
- 2023年遼寧省交通高等??茖W(xué)校高職單招(英語)試題庫含答案解析
- GB/T 304.3-2002關(guān)節(jié)軸承配合
- 漆畫漆藝 第三章
- CB/T 615-1995船底吸入格柵
- 光伏逆變器一課件
- 貨物供應(yīng)、運輸、包裝說明方案
- (完整版)英語高頻詞匯800詞
評論
0/150
提交評論