棧(stack)又名堆疊,它是一種運算受限的線性表。限定僅在表尾進行插入和刪除操作的線性表。這一端被稱為棧頂,相對地,把另一端稱為棧底。向乙個棧插入新元素又稱作進棧、入棧或壓棧,它是把新元素放到棧頂元素的上面,使之成為新的棧頂元素;從乙個棧刪除元素又稱作出棧或退棧,它是把棧頂元素刪除掉,使其相鄰的元素成為新的棧頂元素。棧作為一種資料結構,是一種只能在一端進行插入和刪除操作的特殊線性表。它按照先進後出的原則儲存資料,先進入的資料被壓入棧底,最後的資料在棧頂,需要讀資料的時候從棧頂開始彈出資料(最後乙個資料被第乙個讀出來)。棧具有記憶作用,對棧的插入與刪除操作中,不需要改變棧底指標。
棧是允許在同一端進行插入和刪除操作的特殊線性表。允許進行插入和刪除操作的一端稱為棧頂(top),另一端為棧底(bottom);棧底固定,而棧頂浮動;棧中元素個數為零時稱為空棧。插入一般稱為進棧(push),刪除則稱為退棧(pop)。棧也稱為先進後出表。
棧可以用來在函式呼叫的時候儲存斷點,做遞迴時要用到棧!
以上定義是在經典電腦科學中的解釋。
在計算機系統中,棧則是乙個具有以上屬性的動態記憶體區域。程式可以將資料壓入棧中,也可以將資料從棧頂彈出。在i386機器中,棧頂由稱為esp的暫存器進行定位。壓棧的操作使得棧頂的位址減小,彈出的操作使得棧頂的位址增大。
棧在程式的執行中有著舉足輕重的作用。最重要的是棧儲存了乙個函式呼叫時所需要的維護資訊,這常常稱之為堆疊幀或者活動記錄。堆疊幀一般包含如下幾方面的資訊:
下面這種方式用的是線性方式,也就是用陣列實現的,也可以用鍊錶:
public
class
istack
public
istack
(int initialcapacity)
// 壓入資料
public
void
push
(object value)
/** * 是否需要擴容,如果需要,擴大原來的二分之一
* * @param mincapacity
* @return
*/public
void
isgrow
(int mincapacity)
}// 彈出棧頂資料
public object pop()
// 訪問棧頂資料
public object peek()
// 判斷棧是否為空
public
boolean
isempty()
}
下面是將乙個字串反轉的例項:
istack
charstack =
newistack
(); string str =
"my name is huangqiqi!"
;char
chararray = str.
tochararray()
;for
(char c : chararray)
charstack.
push
(c);
while
(!charstack.
isempty()
) system.out.
print
(charstack.
pop())
;//!iqiqgnauh si eman ym
棧的實現及應用
1.棧定義 棧又稱堆疊,是一種運算受限的線性表,限制是僅僅允許在表的另外一端進行插入和刪除運算。2.特點 後進先出 cpu快取利用率相對較高 不允許隨意訪問 3.實現方式 棧有兩種實現方式,一種是順序儲存,和陣列類似。一種是鏈式儲存,和單鏈表類似。這是在2013編譯器下 棧裡面有以下幾種函式 voi...
棧的相關知識及棧的實現
棧是一種常用的資料結構,通常稱為filo。棧通常分為3種 1 資料結構意義的 棧 filo 3 棧楨 棧 執行程式時為了儲存資料二開闢的空間,隨著函式的呼叫而不斷壓棧,隨著函式的呼叫結束 而銷毀 棧的資料結構圖示 棧通常用順序表來實現。template 定義乙個類模板,對於棧來進行操作class s...
C 棧的用法及棧的實現
首先看一下原c 棧的方法的基本用法 push 向棧內壓入乙個成員 pop 從棧頂彈出乙個成員 empty 如果棧為空返回true,否則返回false top 返回棧頂,但不刪除成員 size 返回棧內元素的大小 示例 include include using namespace std int m...