棧的簡介及C 模板實現

2021-10-10 04:49:52 字數 3109 閱讀 1935

2. 基於陣列的棧實現

3. 基於單鏈表的棧

棧(stack)是一種線性儲存結構,它具有如下特點:

在壓棧的過程中,棧頂的位置一直在」向上「移動,而棧底是固定不變的。

在彈棧的過程中,棧頂位置一直在」向下「移動,而棧底一直保持不變。

棧的常用操作為:

棧既然是一種線性結構,就能夠以陣列或鍊錶(單向鍊錶、雙向鍊錶或迴圈鍊錶)作為底層資料結構。

本文我們以陣列、單向鍊錶為底層資料結構構建棧。

當以陣列為底層資料結構時,通常以陣列頭為棧底,陣列頭到陣列尾為棧頂的生長方向:

棧提供了如上所述操作的相應介面。

template

<

typename t>

class

arraystack

;

count 為棧的元素數量,capacity為棧的容量,count<=capacity,當棧滿的時候,count = capacity。

本實現中不支援棧的動態擴容,棧滿的時候無法再插入元素。棧的容量在定義棧的時候就需要指定,預設的棧容量為10。

棧的實現還是相對簡單的,很容易理解。這裡就不再畫蛇添足了。

/*棧的判空操作*/

template

<

typename t>

bool arraystack

::isempty()

;/*返回棧的大小*/

template

<

typename t>

int arraystack

::size()

;/*插入元素*/

template

<

typename t>

void arraystack

::push

(t t)};

/*彈棧*/

template

<

typename t>

t arraystack

::pop()

};/*獲取棧頂元素*/

template

<

typename t>

t arraystack

::top()

};

int

_tmain

(int argc, _tchar* ar**)

cout <<

"棧的大小:"

<

size()

<< endl;

cout <<

"棧是否為空:"

<

isempty()

<< endl;

cout <<

"棧頂元素:"

<

top(

)<< endl;

cout <<

"依次出棧:"

<< endl;

while

(!p.

isempty()

)getchar()

;return0;

}

測試結果:

棧的大小:

5棧是否為空:

0棧頂元素:4

依次出棧:43210

/*鍊錶節點結構*/

template

<

typename t>

struct node

;node()

:next

(nullptr);

public

: t value;

node

* next;

};

value:棧中元素的值

next:鍊錶節點指標,指向直接後繼

基於鍊錶的棧提供的介面與基於陣列的棧一致。

/*棧的抽象資料結構*/

template

<

typename t>

class

linkstack

;

/*返回棧的大小*/

template

<

typename t>

int linkstack

::size()

;/*棧的判空操作*/

template

<

typename t>

bool linkstack

::isempty()

;/*插入元素*/

template

<

typename t>

void linkstack

::push

(t t)

;/*彈棧*/

template

<

typename t>

t linkstack

::pop()

};/*獲取棧頂元素*/

template

<

typename t>

t linkstack

::top()

;

int

_tmain

(int argc, _tchar* ar**)

cout <<

"棧的大小:"

<< lstack.

size()

<< endl;

getchar()

;return0;

}

測試結果:

棧的大小:

3棧頂元素:you!

棧的大小:

0

基於陣列的棧:

基於單鏈表的棧:

鏈棧(C 模板實現)

templatestruct node templateclass stack ifndef queue h define queue h include using namespace std templatestruct lnode templateclass queue 初始化乙個佇列 tem...

C 類模板實現順序棧

棧的抽象類的定義 template class stack 順序棧類的定義 include stack.h template class seqstack public stack 順序棧類的實現 include using namespace std template seqstack seqst...

C 模板實現佇列

我準備練習一下模板的知識,然後自己實現vector類。在這之前,先用模板實現乙個佇列來熱身吧。佇列的底層是鍊錶。主要是熟悉一下模板的寫法。另外,就是模板的定義和實現都要寫在乙個檔案中 export關鍵字可以避免這樣。還沒用過 所以倒數第二行我加了個 include queue.hpp 只能是hpp,...