資料結構 棧(Stack)

2021-10-16 21:23:42 字數 2542 閱讀 1685

只允許在一端進行插入或刪除操作的線性表。首先,棧是一種線性表,但限定這種線性表只能在某一段進行插入和刪除操作。

棧頂(top):線性表允許進行插入和刪除的一端。

棧底(bottom):固定的,不允許進行插入和刪除的另一端。

空棧:不含任何元素。

如上圖:a1為棧底元素,an為棧頂元素。由於棧只能在棧頂進行插入和刪除操作,故進棧次序依次為a1,a2,… ,an 而出棧次序為an,…,a2,a1。棧的明顯的操作特徵為後進先出(last in first out,lifo),故又稱 後進先出的線性表。

1)initstack(s):初始化空棧s

2)stackempty(s):判斷乙個棧是否為空

3)push(&s,x):進棧,若棧未滿,則將x加入使之成為新棧頂

4)pop(&s,&x):出棧,若棧非空,則將棧頂元素,並用x返回

5)gettop(s,&x):讀棧頂元素,若棧頂元素非空,則用x返回棧頂元素

6)destroystack(&s):銷毀棧,並釋放棧s占用的儲存空間

棧的順序儲存型別可以用以下表示:

#define maxsize 100			

//棧中元素的最大個數

typedef

struct

sqstack;

棧頂指標:s.top,初始時設定s.top = -1;棧頂元素:s.data[s.top];

進棧操作:棧不滿時,棧指標加1,再送值到棧頂元素

出棧操作:棧非空時,先去棧頂元素值,再將棧頂指標減1

棧空條件:s.top == -1

棧滿條件:s.top == maxsize - 1

棧長:s.top + 1

初始化

void

initstack

(sqstack& s)

判棧空
bool

stackempty

(sqstack& s)

return

false

;}

進棧
bool

push

(sqstack& s, elemtype x)

s.top ++

;//棧頂指標加1

s.data[s.top]

= x;

//入棧

return

true

;}

出棧
bool

pop(sqstack& s, elemtype& x)

x = s.data[s.top]

; s.top --

;return

true

;}

讀棧頂元素
bool

gettop

(sqstack& s,elemtype& x)

x = s.data[s.top]

;return

true

;}

注意:若棧頂指標初始化為s.top = 0,即棧頂指標指向棧頂元素的下乙個位置,則入棧操作變為s.data[s.top++],出棧操作為x = s.data[–s.top]。因為棧頂指標若初始化為 0 時,則棧頂指標始終指向順序棧將要入棧的位置,也就是棧頂指標的下標就是入棧元素的下標。

利用棧底位置相對不變的特性,可以讓兩個順序棧共享乙個一維資料空間,將兩個棧的棧底分別設定在共享空間的兩端,兩個棧頂向共享空間的中間延伸。

兩個棧的棧頂指標都指向棧頂元素,top1 = -1 時,stack1 為空,top2 = maxsize - 1 時,stack2 為空;僅當兩個棧頂指標相鄰(top1 - top2 == 1)時,判斷棧滿。當stack1進棧時top1先加1再賦值,stack2進棧時top2先減1再賦值;出棧正好相反。

共享棧是為了更有效地利用儲存空間,兩個棧的空間正好互相調節,只有在整個儲存空間被佔滿時才發生上溢。訪問資料的時間複雜度均為o(1),所以對訪問效率沒有什麼影響。

採用鏈式儲存的棧稱為鏈棧,鏈棧的優點是便於多個棧共享儲存空間和提高其效率,且不存在棧滿上溢的情況。通常採用單鏈表實現,並規定所有操作都是在單鏈表的表頭進行的。這裡規定鏈棧沒有頭結點,top指向棧頂元素,

鏈棧的儲存型別可描述為:

typedef

struct linknodelinknode,

*linkstack;

如果喜歡的話,不妨關注一波,謝謝啦。

資料結構 棧stack

棧的概念與資料結構 棧 有時稱為 後進先出棧 是乙個元素的有序集合,其中新增移除新元素總發生在同一端。這一端通常稱為 頂部 與頂部對應的端稱為 底部 棧的底部很重要,因為在棧中靠近底部的元素是儲存時間最長的。最近新增的元素是最先會被移除的。這種排序原則有時被稱為 lifo,後進先出。它基於在集合內的...

資料結構 棧(Stack)

棧 英語 stack 又稱為堆疊或堆疊,棧作為一種資料結構,它按照先進後出的原則儲存資料,先進入的資料被壓入棧底,最後的資料在棧頂,需要讀資料的時候從棧頂開始彈出資料 最後乙個資料被第乙個讀出來 由於堆疊資料結構只允許在一端進行操作,因而按照後進先出 lifo last in first out 的...

《資料結構》 棧Stack

一.棧stack 先進後出 filo 1.棧的主要功能是進行資料的儲存和計算 棧是一種容器 是具有特殊限制的鍊錶或陣列 2.棧的儲存方式 順序儲存 陣列 空間固定 所以需要預先知道所需要開闢的空間有多大 陣列難以進行擴容 所以導致可用空間是有限的 鏈式儲存 鍊錶 棧可以理解為鍊錶的頭插頭刪 這種儲存...