棧的實現及分析

2021-09-25 11:55:15 字數 1825 閱讀 9216

棧(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...