C語(yǔ)言中棧的表示和實(shí)現(xiàn)_第1頁(yè)
C語(yǔ)言中棧的表示和實(shí)現(xiàn)_第2頁(yè)
C語(yǔ)言中棧的表示和實(shí)現(xiàn)_第3頁(yè)
C語(yǔ)言中棧的表示和實(shí)現(xiàn)_第4頁(yè)
C語(yǔ)言中棧的表示和實(shí)現(xiàn)_第5頁(yè)
已閱讀5頁(yè),還剩2頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論