棧是一種先入先出的資料結構,插入和刪除操作都只對最頂端的元素進行。
棧最重要的是如下幾個操作:
其中,對乙個空棧進行pop或pop操作,會引發資料結構棧的錯誤,這是不允許的。而對乙個滿了的棧進行push操作,是資料結構棧在實現上的錯誤,用陣列實現可能出現的錯誤。
棧的鍊錶實現,首先明白鍊錶的頭結點應該指向**?是指向棧的最底端還是最頂端。使用乙個虛擬的頭結點指向最頂端最為方便。如下圖所示:
乙個空棧,相當於乙個僅含虛擬頭節點的鍊錶。
入棧,相當於在鍊錶的第乙個節點前面插入乙個新節點
typedef struct node
*ptrtonode
;struct node
node()
:next
(nullptr)};
//鍊錶實現,free與new
are expensive
class
stack
void push
(int x
) int isempty()
int top()
else
} void pop()
else}}
;
push操作要檢查陣列是否溢位,pop操作要檢查棧是否為空。
比較容易得到相應的操作**:
入棧: s->array[++s->topofstack] = x;
出棧:return s->array[s->topofstack–];
返回棧頂元素:return s->array[s->topofstack];
實現**時注意考慮可能出現的錯誤!
struct stackrecord
;class
stack_array
void makeempty()
int isempty()
void disposestack()
} void push
(int x
) int top()
int pop()
};
編譯器對**進行語法檢查的時候,會檢查出 [ ],(),{},這些有沒有匹配。比如 [ ( ) ] 這樣是合法的,而 [ ( ] )這樣是不合法的。我們可以通過棧來實現這乙個簡單的功能。建立乙個空棧,不斷讀入元素,讀入的字元如果為(, 或 ] 就進行如下判斷
此時棧為空,返回錯誤
棧不空的話,檢查棧頂的元素與當前元素是否匹配,若不匹配,返回錯誤
若匹配,則將棧頂匹配的那個元素出棧
對所有字元都進行如上操作後,若棧不空,則返回錯誤
algorithm
else
else
pop(s)
;}}}
if(s is not empty)
error
;}
資料結構 棧 棧
可以把棧想像成乙個桶 進棧 就是把和桶口一樣大的燒餅往桶裡面扔 出棧 就是把燒餅拿出來 特點 先進後出。先扔進去的燒餅最後才能拿出來,最後扔進去的燒餅,第乙個拿出來 剛開始top 1 top 1 然後把進棧的元素賦值給data top 入棧操作 void push stack s,int x els...
資料結構 棧
例子 棧是一種被限制在只能在表的一端進行插入和刪除運算的線性表。區域性變數是用棧來儲存的 可以進行插入和刪除的一端稱為 棧頂 top 另一端稱為 棧底 bottom 當表中沒有元素時 表長為0的棧 稱為 空棧。棧的修改是按 後進先出的原則進行,因此棧被稱為後進先出 last in first out...
資料結構 棧
1.棧stack 是限定僅在表尾進行刪除和插入操作的線性表。允許插入刪除的一端叫做棧頂top,另外一端叫做棧底bottom。棧又稱為後進先出 lifo 的線性表。即表尾是指棧頂。2.順序棧 定義 top指向可存入元素的位置。typedef struct stacktypestacktype 插入 進...