棧(stack)是限定僅在表尾進行插入或刪除操作的線性表。
棧又稱為後進先出(last in first out)的線性表(簡稱lifo結構)。
對於棧來說,表尾端有其特殊含義,稱為棧頂(top),相應的,表頭端稱為棧底(bottom)。
棧的順序儲存空間為s(1:50)/ s(1:m)
答:這裡的(1:50)和(1:m)指的都是棧的空間大小,也就是指能儲存多少個資料元素。
初始狀態
答:棧最初的狀態,分為兩種棧空和棧中已有資料兩種情況(上述例題都為棧空狀態,原因見下文詳細分析)
詳細分析:
棧的儲存空間s(1,m),可以理解為乙個可以容納m個資料的空間,本身是看不出方向的,因此要根據資料進出棧是的指標變化來區分正棧和倒棧。
對於正棧,棧底為1,棧頂可以為1~m之間任何乙個數,但是top=m表示棧滿,top不可能指向大於m的任何數字,此時,棧中的元素數量等於top-1+1,對於正棧,棧空的時候top可以是0,-1,-2…中的任何乙個數,可以理解為每出棧乙個資料,棧頂指標top-1,直到top=0,棧已空,此時top雖然可以繼續-1但無資料出棧,棧仍是空的。
對於倒棧,棧底為m,棧頂可以為1~m之間任何乙個數,但是top=1表示棧滿,top不可能指向小於1的任何數字,此時,棧中的元素數量等於m-top+1,對於倒棧,棧空的時候top可以是m+1,m+2,m+3…中的任何乙個數,可以理解為每出棧乙個資料,棧頂指標top+1,直到top=m+1,棧已空,此時top雖然可以繼續+1但無資料出棧,棧仍是空的。
所以根據初始狀態棧空時的棧頂指標,可以分析判斷是為正棧還是倒棧,再按照相應的棧頂指標變化規律來計算棧中資料的數量。
初始狀態top值有以下三種情況
- top<1,不在1~m範圍,此時棧空,同時也說明top值變化的順序為由1到m,即為正棧
- top>m,不在1~m範圍,此時棧空,同時也說明top值變化的順序為由m到1,即為倒棧
- 1<=top<=m 屬於1~m範圍,此時棧不為空,無法判斷top變化順序,題目也不會這麼出
有關棧的題目
設計包含min函式的棧。定義棧的資料結構,要求新增乙個min函式,能夠得到棧的最小元素。要求函式min push以及pop的時間複雜度都是o 1 結合鍊錶一起做。容器vector代替鍊錶 eg 10,3,3,8,2,6 1.push 如果push入棧a的元素小於棧b的棧頂所對應的的元素,則將該元素p...
有關棧的小知識
include int main 引用於 c專家程式設計 在我的ubuntu14.04 64位作業系統中輸出 the stack top is near 0x7ffc5643981c 符合64位虛擬記憶體管理 2.linux棧的大小 首先用ulimit s可以檢視棧大小 輸出 8192。單位是k。也...
有關棧的面試題
輸入兩個整數序列,第乙個序列表示棧的壓入順序,請判斷第二個序列是否為該棧的彈出順序 假設壓入棧的所有數字均不相等。例如序列1,2,3,4,5是某棧的壓入順序,序列4,5,3,2,1是該壓棧序列對應的乙個彈出序列,但4,3,5,1,2就不可能是該壓棧序列的彈出序列。class solution ret...