資料結構 棧

2021-09-01 18:29:37 字數 1641 閱讀 9434

棧是一種先入先出的資料結構,插入和刪除操作都只對最頂端的元素進行。

棧最重要的是如下幾個操作:

其中,對乙個空棧進行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 插入 進...