




版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
本文格式為Word版,下載可任意編輯——C語(yǔ)言中棧的表示和實(shí)現(xiàn)C語(yǔ)言中棧的表示和實(shí)現(xiàn)
棧是限定僅在表尾舉行插入和刪除操作的線性表。本文是我探尋整理的關(guān)于C語(yǔ)言中棧的表示和實(shí)現(xiàn)細(xì)致介紹的相關(guān)資料,感興趣的摯友一起學(xué)習(xí)吧!!想了解更多相關(guān)信息請(qǐng)持續(xù)關(guān)注我們我!
棧作為一種數(shù)據(jù)布局,是一種只能在一端舉行插入和刪除操作的特殊線性表。它按照先進(jìn)后出的原那么存儲(chǔ)數(shù)據(jù),先進(jìn)入的數(shù)據(jù)被壓入棧底,結(jié)果的數(shù)據(jù)在棧頂,需要讀數(shù)據(jù)的時(shí)候從棧頂開(kāi)頭彈出數(shù)據(jù)(結(jié)果一個(gè)數(shù)據(jù)被第一個(gè)讀出來(lái))。棧具有記憶作用,對(duì)棧的插入與刪除操作中,不需要變更棧底指針。
棧是允許在同一端舉行插入和刪除操作的特殊線性表。允許舉行插入和刪除操作的一端稱(chēng)為棧頂top,另一端為棧底bottom;棧底固定,而棧頂浮動(dòng);棧中元素個(gè)數(shù)為零時(shí)稱(chēng)為空棧。插入一般稱(chēng)為進(jìn)棧(PUSH),刪除那么稱(chēng)為退棧(POP)。棧也稱(chēng)為后進(jìn)先出表。
以上定義是在經(jīng)典計(jì)算機(jī)科學(xué)中的解釋。
在計(jì)算機(jī)系統(tǒng)中,棧那么是一個(gè)具有以上屬性的動(dòng)態(tài)內(nèi)存區(qū)域。程序可以將數(shù)據(jù)壓入棧中,也可以將數(shù)據(jù)從棧頂彈出。在i386機(jī)器中,棧頂由稱(chēng)為esp的寄放器舉行定位。壓棧的操作使得棧頂?shù)牡刂窚p小,彈出的操作使得棧頂?shù)牡刂吩龃蟆?/p>
棧在程序的運(yùn)行中有著舉足輕重的作用。最重要的是棧保存了一個(gè)函數(shù)調(diào)用時(shí)所需要的維護(hù)信息,這往往稱(chēng)之為堆棧幀或者活動(dòng)記錄。堆棧幀一般包含如下幾方面的信息:
1.函數(shù)的返回地址和參數(shù)
2.臨時(shí)變量:包括函數(shù)的非靜態(tài)局部變量以及編譯器自動(dòng)生成的其他臨時(shí)變量
實(shí)現(xiàn)
#defineSTACK_INIT_SIZE10/*存儲(chǔ)空間初始調(diào)配量*/
#defineSTACKINCREMENT2/*存儲(chǔ)空間調(diào)配增量*/
typedefstructSqStack
SElemType*base;/*在棧構(gòu)造之前和銷(xiāo)毀之后,base的.值為NULL*/
SElemType*top;/*棧頂指針*/
intstacksize;/*當(dāng)前已調(diào)配的存儲(chǔ)空間,以元素為單位*/
SqStack;/*依次棧*/
StatusInitStackSqStack*S
/*構(gòu)造一個(gè)空棧S*/
*S.base=SElemType*mallocSTACK_INIT_SIZE*sizeofSElemType;
if!*S.base
exitOVERFLOW;/*存儲(chǔ)調(diào)配失敗*/
*S.top=*S.base;
*S.stacksize=STACK_INIT_SIZE;
returnOK;
StatusDestroyStackSqStack*S
/*銷(xiāo)毀棧S,S不再存在*/
free*S.base;
*S.base=NULL;
*S.top=NULL;
*S.stacksize=0;
returnOK;
StatusClearStackSqStack*S
/*把S置為空棧*/
*S.top=*S.base;
returnOK;
StatusStackEmptySqStackS
/*若棧S為空棧,那么返回TRUE,否那么返回FALSE*/
ifS.top==S.base
returnTRUE;
else
returnFALSE;
intStackLengthSqStackS
/*返回S的元素個(gè)數(shù),即棧的長(zhǎng)度*/
returnS.top-S.base;
StatusGetTopSqStackS,SElemType*e
/*若棧不空,那么用e返回S的棧頂元素,并返回OK;否那么返回ERROR*/
ifS.topS.base
*e=*S.top-1;
returnOK;
else
returnERROR;
StatusPushSqStack*S,SElemTypee
/*插入元素e為新的棧頂元素*/
if*S.top-*S.base=*S.stacksize/*棧滿(mǎn),追加存儲(chǔ)空間*/
*S.base=SElemType*realloc*S.base,*S.stacksize+STACKINCREMENT*sizeofSElemType;
if!*S.base
exitOVERFLOW;/*存儲(chǔ)調(diào)配失敗*/
*S.top=*S.base+*S.stacksize;
*S.stacksize+=STACKINCREMENT;
**S.top++=e;
returnOK;
StatusPopSqStack*S,SElemType*e
/*若棧不空,那么刪除S的棧頂元素,用e返回其值,并返回OK;否那么返回ERROR*/
if*S.top==*S.base
returnERROR;
*e=*--*S.top;
returnOK;
StatusStackTraverseSqStackS,Status*visitSElemType
/*從棧底到棧頂依次對(duì)棧中每個(gè)元素調(diào)用函數(shù)visit。*/
/*一旦visit失敗,那么操作失敗*/
whileS.topS.base
visit*S.base++;
printf\n;
returnOK;
#includec1.h
typedefintSElemType;/*定義棧元素類(lèi)型,此句要在c3-1.h的前面*/
#includec3-1.h
#includebo3-1.c
StatusvisitSElemTypec
printf%d,c;
returnOK;
voidmain
intj;
SqStacks;
SElemTypee;
ifInitStacks==OK
forj=1;j=12;j++
Pushs,j;
printf棧中元素依次為:;
StackTraverses,visit;
Pops,e;
printf彈出的棧頂元素e=%d\n,e;
printf棧空否:%d1:空0:否\n,StackEmptys;
GetTops,e;
printf棧頂元素e=%d棧的長(zhǎng)度為%d\n,e,StackLengths;
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度知識(shí)產(chǎn)權(quán)許可合同內(nèi)容修訂指南
- 二零二五年度拓展訓(xùn)練場(chǎng)地與高校合作教育項(xiàng)目協(xié)議
- 二零二五年度物流運(yùn)輸企業(yè)員工入職保密協(xié)議及供應(yīng)鏈保護(hù)
- 2025年度高端定制酒定制生產(chǎn)合同
- 二零二五年度足療中心員工勞動(dòng)合同范本
- 2025年度終止勞動(dòng)合同協(xié)議書(shū):SS企業(yè)員工TT合同終止及離職手續(xù)辦理協(xié)議
- 二零二五年度醫(yī)療援助項(xiàng)目醫(yī)生聘用協(xié)議
- 二零二五年度口腔診所負(fù)責(zé)人侵權(quán)責(zé)任免除與賠償處理合同
- 二零二五年度上市公司股份回購(gòu)?fù)斯蓞f(xié)議
- 2025年度高科技園區(qū)土地租賃服務(wù)協(xié)議
- 初中物理人教版八年級(jí)下冊(cè) 第1節(jié)牛頓第一定律 課件
- 網(wǎng)站培訓(xùn)內(nèi)容trswcm65表單選件用戶(hù)手冊(cè)
- 監(jiān)理大綱(范本)
- 空調(diào)系統(tǒng)維保記錄表格模板
- 打印版-圓與二次函數(shù)綜合題精練(帶答案)
- 工程結(jié)算書(shū)標(biāo)準(zhǔn)
- 氧氣管道吹掃方案(共7頁(yè))
- JJG-943-2011-總懸浮顆粒物采樣器
- 2018年湖北省襄陽(yáng)市中考物理試卷
- 波程差與光程差
- 常用測(cè)井曲線符號(hào)及單位(最規(guī)范版)
評(píng)論
0/150
提交評(píng)論