什麼是棧
- 棧是限定在表尾進行插入或者刪除操作的線性表。
- 棧分爲棧頂,棧底。對棧來說,表尾端稱爲棧頂。表頭端稱爲棧底。不含元素的空表稱爲空棧。
- 棧是後進先出的線性表。
- 棧的抽象數據類型的定義:
- InitStack(&s)
操作結果:構造一個空棧S.
DestroyStack(&s)
初始條件:棧S已存在
操作結果:棧S被銷燬。
ClearStack(&s)
初始條件:棧S已存在
操作結果:將S清爲空棧。
StackEmpty(s)
初始條件:棧S已存在
操作結果:若棧s爲空棧,則返回TRUE,否則FALSE。
StackLength(s)
初始條件:棧S已存在
操作結果;返回S中元素的個數,即棧的長度。
GetTop(S,&e)
初始條件:棧S已存在且非空
操作結果:用e返回S的棧頂元素
Push(S,&e)
初始條件:棧S已存在
操作結果;插入元素e爲新的棧頂元素。
Pop(S,&e)
初始條件:棧S已存在且非空
操作結果:刪除S的棧頂元素,並用e返回其值。
StackTraverse(s,visit)
初始條件:棧S已存在
操作結果:從棧底到棧頂依次對S的每一個數據元素調用函數visit().一旦visit()失敗,則操作失敗。
-
棧的表現和實現:
-
棧也有兩種存儲表示方法:
-
順序棧:即棧的順序存儲結構是利用一組地址連續的存儲單元依次存放自棧底到棧頂的數據元素。
-
順序棧的說明
typedef struct{
SElemType *base;
SelemType *top;
int stacksize;
}SqStack;
stacksize指示棧的當前可使用的最大容量,棧的初始化操作爲: 按設定的初始分配量進行第一次存儲分配,base可稱爲棧底指針。在順序棧中,他始終指向棧底的位置,若base的值爲NULL,則表明棧結構不存在。稱top爲棧頂指針,起初值指向棧底,即top=base可作爲棧空的標記,每次當插入新的棧頂元素時,指針top增1;刪除棧頂元素時指針top減1。非空棧中的棧頂指針始終在棧頂元素的下一個位置上。