棧的概念與基本操作

2021-08-02 13:52:59 字數 1845 閱讀 8251

一、棧的基本概念

1.棧的定義

只允許在一端進行插入或刪除操作的線性表。也稱為後進先出的線性表。

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

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

空棧:不含任何元素的空表。

二、棧的順序儲存結構

1.順序棧的實現

#define maxsize 50

typedef struct

sqstack;

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

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

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

棧空條件:s.top=-1;棧滿條件:s.top=maxsize-1;棧長:s.top+1

需要注意的是,當為空棧時top指標的狀態。

2.順序棧的基本運算

(1)初始化

void initstack(&s)

(2)判棧空

bool stackempty(s)

(3)進棧

bool push(sqstack &s,elemtype x)

(4)出棧

bool pop(sqstack &s,elemtype &x)

(5)讀棧頂元素

bool gettop(sqstack s,elemtype &x)

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

兩個棧的棧頂指標都指向棧頂元素,top0=-1時0號棧為空,top1=maxsize時1號棧為空;僅當兩個棧頂指標相鄰(top1-top0=1)時,判斷為棧滿。

當0號棧進棧時top0先加1再賦值,1號棧進棧時投票先減1再賦值。

三、棧的鏈式儲存結構

鏈棧的優點是便於多個棧共享儲存空間和提高其效率,且不存在棧滿上溢的情況。規定鏈棧沒有頭結點,lhead指向棧頂元素。

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

typedef

struct

linknode;

typedef

struct

*listack;

1.棧的基本操作(1)初始化

void initstack(listack &s)

(2)判棧空

bool emstack(listack s)

(3)插入元素

bool push(listack &s,elemtype x)

(4)刪除元素

bool pop(listack &s,elemtype &x)

棧與佇列基本操作

想了下,上學期學的資料結構線性結構還有些混亂的地方,想做一點注意事項的總結。1.鍊錶 2.棧順序棧 定義乙個陣列 可以是陣列形式的data 或指標形式的 data,若是指標形式就 需要在結構體中加乙個變數maxsize存放陣列的最大容量 和棧頂指標 在順序棧中就是 陣列下標 棧頂指標存放棧頂元素,初...

棧與佇列基本操作

include include typedef struct lnodelnode,linklist 頭插法 linklist create list head int n return head 尾插法 linklist create list tail int n else tail next ...

棧和佇列的基本概念和操作

棧和佇列 1.棧的定義 棧是限定只能在一端進行插入和刪除的線性表。允許進行插入和刪除操作的一端稱為棧頂,另一端為棧底。當棧中沒有元素時,稱為空棧。棧的特點是 後進先出 last in first out,lifo 即後入棧的元素先出棧。2.佇列定義 佇列是限定在一端進行插入,在另一端進行刪除的線性表...