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,...