def:只允許在一端進行插入和刪除操作的線性表(只能從表尾刪除,插入)
空棧:棧頂:允許插入和刪除的一端
棧頂:不允許插入和刪除的一端
後進先出 lifo
邏輯結構:與普通線性表相同
棧的基本操作
initstack(&s):初始化棧。創造乙個空棧s。分配記憶體空間
destorystack(&l):銷毀棧。銷毀並釋放棧s所占用的記憶體空間
push(&s,x):進棧。若棧s未滿。則將x加入使之成為新棧頂
pop(&s,&x):出棧。若棧s非空,則彈出棧頂元素,並用x返回 增刪
gettop(s,&x):讀棧頂元素。若棧s非空,則用x返回棧頂元素 查
棧的使用場景大多只訪問棧頂元素
stackempty(s):判斷乙個棧s是否為空。若s為空,則返回true,否則返回false。
常見問題:已知進棧順序,有哪些合法的出棧順序
如:a->b->c->d->e
n個不同元素進棧,由於出棧順序和進棧順序可以穿插進行,所以出棧元素不同的排列的個數為1/n+1cn,2n,上述公式稱為卡特蘭數。可採用數學歸納法證明。
**順序棧的實現:**用順序儲存方式實現的棧
基本操作:
創:初始化
增:進棧
刪:出棧
查:獲取棧頂元素
判空,判滿
#define maxsize 10
//定義棧中元素的最大個數
typedef
struct
sqstack;
//sequence--順序
void
teststack()
**順序儲存:**給各個資料元素分配連續的儲存空間,大小為。maxsize*sizeof[elemtype]。另外還需要4個位元組的大小,用於存放棧頂指標,只向棧頂元素。
#define maxsize 10
//定義棧中元素的最大個數
typedef
struct
sqstack;
//sequence--順序
void
teststack()
//初始化棧
void
initstack
(sqstack &s)
void
teststack()
//判空操作
bool
stackempty
(sqstack s)
進棧操作(增)
#define maxsize 10
//定義棧中元素的最大個數
typedef
struct
sqstack;
//sequence--順序
void
teststack()
//初始化棧
void
initstack
(sqstack &s)
bool
push
(sqstack &s,elemtype x)
出棧操作
#define maxsize 10
//定義棧中元素的最大個數
typedef
struct
sqstack;
//sequence--順序
void
teststack()
//初始化棧
void
initstack
(sqstack &s)
bool
pop(sqstack &s,elemtype &x)
讀取棧頂元素的操作
bool
gettop
(sqstack s,elemtype &x)
進棧:s.data[s.top++]=x;
出棧:x=s.data[–s.top];
棧滿的條件:top=maxsize;
順序棧的缺點:棧的大小不可以改變
兩個棧共享同一片空間
#define maxsize 10
typedef
struct
shstack;
//初始化棧
void
initstack
(shstack &s)
0號棧重下往上遞增,1號棧重上往下遞減,邏輯上有兩個棧,物理上公用同一片空間
補:在頭插法建立單鏈表時,是不斷的對頭節點進行後插操作—對應於棧操作中的進棧
在對單鏈表進行刪除操作時,對頭節點進行後刪操作-----對應於出棧
typedef
struct linknode
*listack;
同樣可以定義帶頭節點的鏈棧與不帶頭結點的鏈棧,這兩種方式在判空的時候會有區別
見單鏈表
DS第三章小結
一 你對本章內容的小結 本章主要講了兩種特殊的線性表,棧和佇列。棧是僅在表尾進行插入或刪除操作且後進先出 lifo 的線性表,而佇列則是在表的一端插入,另一端刪除元素且先進先出 fifo 的線性表。同時,課本的案例引入告訴我們,棧可以解決數值的轉換,括號匹配的檢驗問題 而佇列因其結構的吻合可以用了舞...
第三章 棧和佇列
棧和佇列 一 棧 1 棧的定義 棧是限定僅在表尾進行插入和刪除操作的線性表,允許插入和刪除的一端稱為棧頂,另一端稱為棧底,不含任何資料元素的棧稱為空棧。2 在任何時候出棧的元素都只能是棧頂元素,即最後最後入棧者最先出棧。所以棧中元素除了具有線性關係外,還具有後進先出的特性。3 棧的抽象資料型別定義 ...
第三章 棧和佇列
棧和佇列是兩種常用的資料結構,同時又是操作受限的線性表,也是兩種重要的抽象資料型別。1 1棧是限定僅在表尾進行插入和刪除操作的線性表。棧中元素具有線性關係和後進先出的特性。2雖然對插入和刪除操作的位置限制減少了棧的靈活性,但同時也使得棧的操作更有效更容易實現。3棧的儲存結構分兩種,一種是順序儲存結構...