隊列:只允許在一端進行插入操作,而在另一端進行刪除操作的線性表。
循環(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á)式為止。