總體來說,棧的知識比線性表、順序表簡單很多。但是同時也有許多需要注意的點,稍稍不注意就可能會出現錯誤,因此,雖然簡單一點,但也要細心學習。
一、基本知識
棧:限定僅在表尾進行插入和刪除操作的線性表。允許插入和刪除的一端稱為棧頂,另一端稱為棧底。
空棧:不含任何資料元素的棧。
棧的操作特性:後進先出
注意:棧只是對錶插入和刪除操作的位置進行了限制,並沒有限定插入和刪除操作進行的時間。
二、棧的順序儲存結構及實現
順序棧類的宣告
const int max_size=100;
template class seqstack
順序棧的實現——入棧
template void seqstack::push ( t x)
順序棧的實現—判斷是否是空棧
template bool seqstack::empty ()
順序棧的實現——取棧頂
template t seqstack::gettop ( )
順序棧的實現——出棧
template t seqstack:: pop ( )
***~~雙端棧
兩棧共享空間類的宣告
const int stack_size=100;
template class bothstack
;
兩棧共享空間的實現——插入
如果棧滿,則丟擲上溢異常;
判斷是插在棧1還是棧2;
2.1 若在棧1插入,則
top1加1;
在top1處填入x;
2.2 若在棧2插入,則
top2減1;
在top2處填入x;
template void bothstack::push(int i, t x)
兩棧共享空間的實現——刪除
若是在棧1刪除,則
1.1 若棧1為空棧,丟擲下溢異常;
1.2 刪除並返回棧1的棧頂元素;
若是在棧2刪除,則
2.1 若棧2為空棧,丟擲下溢異常;
2.2 刪除並返回棧2的棧頂元素;
template t bothstack::pop(int i)
if (i==2)
}
判斷某個棧空演算法
template bool bothstack::empty(int i)
if(i==2)
}
取某個棧棧頂的演算法
template t bothstack::gettop(int i)
if(i==2)
}
三、棧的鏈結儲存結構及實現
鏈棧的類宣告
template class linkstack
;
~linkstack( );
void push(t x);
t pop( );
t gettop( );
bool empty( );
private:
node*top;
}
鏈棧的實現——插入(入棧)
template void linkstack::push(t x)
鏈棧的實現——刪除(出棧)
template t linkstack::pop( )
鏈棧的實現——鏈棧的析構(鏈棧的銷毀)
template linkstack::~linkstack( )
}
資料結構 四 棧
棧是限定僅在表尾進行插入和刪除的線性表 typedef struct sqstack 棧的順序基本操作 1 進棧操作 status push sqstack s,selemtype e s top s data s rop e return ok 2 出棧操作 status pop sqstack ...
資料結構之棧(四)
本文將繼續擴充套件stack在arithmetical expression的處理方面的應用,其中包括 postfix2prefix postfix2infix 和 infix2postfix 一 postfix2prefix 它是通過多次入棧和出棧來完成的。主要步驟是 遍歷 postfix str...
java資料結構(四) 棧
樹結構是一種描述非線性關係的資料結構。對於樹的基本概念不想過多贅述,可以自行查閱相關資料,這裡主要講解一種簡單的樹結構 二叉樹。二叉樹是樹的一種特殊形式,它有n個結點,每個結點最多有兩個子結點。二叉樹的子樹仍然是二叉樹,二叉樹的兩個子樹分別是左子樹和右子樹,因此二叉樹也是有序樹。二叉樹又分為 完全二...