棧與隊列

隊列:只允許在一端進行插入操作,而在另一端進行刪除操作的線性表。

循環(huán)對列:頭尾相接的順序存儲結(jié)構(gòu)。若隊列不空,尾指針指向隊列尾部元素的下一個位置。
【當(dāng)標(biāo)志變量flag==rear,且flag=0時為隊列空,當(dāng)front==rear,且flag=1時為隊列滿】
計算隊列長度公式:(rear-front+QueueSize)%QueueSize

:是限定僅在表尾進行插入和刪除操作的線表。

兩棧共享:只針對兩個具有相同類型的棧的一個設(shè)計,一個棧增長,一個??s短,(相當(dāng)于一個棧的棧底為數(shù)組的始端,下標(biāo)為0處,另一個棧的棧底為末端,兩個棧如果增加元素,就是兩端點向中間延伸)否則會因棧滿而溢出。這樣讓兩個棧共享數(shù)據(jù),可以最大化地利用數(shù)據(jù)空間。

棧的鏈?zhǔn)酱鎯Y(jié)構(gòu):對于鏈棧,基本不存在棧滿的情況,除非內(nèi)存已經(jīng)沒有可以使用的空間。此時計算機面臨死機崩潰問題。

鏈棧的空其實就是top=NULL

  • 順序存儲:線性表的順序存儲是指用一組地址連續(xù)的存儲單元一次存儲線性表的數(shù)據(jù)元素。在C語言中,可以使用動態(tài)數(shù)組來實現(xiàn)線性表的順序存儲。
  • 棧的鏈?zhǔn)酱鎯Y(jié)構(gòu):采用單鏈表實現(xiàn),鏈棧的優(yōu)點是不存在棧滿上溢的情況,規(guī)定棧的所有操作都是在單鏈表的表頭進行的

**順序棧與鏈棧的區(qū)別:
**

  • 順序棧需要事先確定一個固定的長度,可能會存在空間的浪費,但是存取時定位很方便。
  • 鏈棧則要求每一個元素都有指針域,同時也增加了一些內(nèi)存開銷,但棧的長度無限制。

遞歸函數(shù):一個直接調(diào)用自己或通過一系列的調(diào)用語句間接的調(diào)用自己的函數(shù)。

對于每一層遞歸,函數(shù)的局部變量,參數(shù)值以及返回地址都被壓入棧中,在退回階段,位于棧頂?shù)木植孔兞?,參?shù)值和返回地址被彈出,用于返回調(diào)用層次中執(zhí)行代碼的其余部分,也就是恢復(fù)了調(diào)用的狀態(tài)。

迭代使用循環(huán)結(jié)構(gòu),遞歸使用選擇結(jié)構(gòu)

**棧的四則運算表達(dá)式求值
**

標(biāo)準(zhǔn)四則運算表達(dá)式叫做中綴表達(dá)式,所有的運算符號都在兩數(shù)字的中間。

中綴表達(dá)式----->后綴表達(dá)式:

規(guī)則:從左到右遍歷中綴表達(dá)式的每個數(shù)字和符號,若是數(shù)字就輸出,即成后綴表達(dá)式的一部分;若是符號,則判斷其與棧頂符號的優(yōu)先級,是右括號或優(yōu)先級別低于棧頂符號(乘除優(yōu)先加減)則棧頂元素依次出棧并輸出,并將當(dāng)前符號進棧,一直到最終輸出后綴表達(dá)式為止。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容