一、棧的基本概念
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.佇列定義 佇列是限定在一端進行插入,在另一端進行刪除的線性表...