資料結構 棧和佇列

2021-09-29 14:56:51 字數 2362 閱讀 8791

一、特殊線性表——棧

1.棧的邏輯結構

①棧:限定僅在表尾進行插入和刪除操作的線性表。

允許插入和刪除的一端稱為棧頂,另一端稱為棧底。

棧的特殊操作:後進先出。

②棧只是對錶插入和刪除操作的位置進行了限制,並沒有限定插入和刪除操作進行的時間。

③棧的抽象資料型別定義

adt stack

data

棧中元素具有相同型別及後進先出特性,

相鄰元素具有前驅和後繼關係

operation

initstack

前置條件:棧不存在

輸入:無

功能:棧的初始化

輸出:無

後置條件:構造乙個空棧

destroystack

前置條件:棧已存在

輸入:無

功能:銷毀棧

輸出:無

後置條件:釋放棧所占用的儲存空間

push

前置條件:棧已存在

輸入:元素值x

功能:在棧頂插入乙個元素x

輸出:如果插入不成功,丟擲異常

後置條件:如果插入成功,棧頂增加乙個元素

pop前置條件:棧已存在

輸入:無

功能:刪除棧頂元素

輸出:如果刪除成功,返回被刪元素值,否則,丟擲異常

後置條件:如果刪除成功,棧減少乙個元素

gettop

前置條件:棧已存在

輸入:無

功能:讀取當前的棧頂元素

輸出:若棧不空,返回當前的棧頂元素值

後置條件:棧不變

empty

前置條件:棧已存在

輸入:無

功能:判斷棧是否為空

輸出:如果棧為空,返回1,否則,返回0

後置條件:棧不變

endadt

2.棧的順序儲存結構及實現

①用陣列:

確定用陣列的哪一端表示棧底

附設指標top指示棧頂元素在陣列中的位置

進棧:top加1

棧空:top=-1

出棧:top減1

棧滿:top=max_size-1

②順序棧的實現——入棧

操作介面:bool empty()

template

bool seqstsck::empty()

③取頂棧

操作介面:t gettop();

template

t seqstack::gettop()

④出棧操作介面:t pop();

template

t seqstack::pop()

⑤兩棧共享空間(雙端棧)

順序儲存:為每乙個棧開闢乙個陣列空間。

順序棧單項延伸——使用乙個陣列來儲存棧

棧1為空:top1=-1

棧2為空:top2=stack_size

插入,刪除。

3、棧的鏈結儲存結構及實現

①插入(入棧)

操作介面:void push(t x)

template

void linkstack::push(t x)

②刪除(出棧)

操作介面:t pop();

template

t linkstack::pop()

③鏈棧的析構(鏈棧的銷毀)

二、棧的應用舉例——表的式求值

1、中綴表示式求值

①表示式的組成:

運算元運算子

界限符②求值過程

設定兩個棧

自左向右掃瞄中綴表示式

③中綴表示式轉化為字尾表示式

設定乙個運算子棧(從左到右)

遇到數值直接輸出

遇到」(「入棧

遇到運算子a,如果棧頂符號的優先順序低於a的優先順序則入棧,棧頂符號出棧,直到棧頂符號的優先順序低於a的優先順序,此時a入棧

遇到」)「則棧頂符號出棧,知道」(「

重複以上工作,直到表示式結束。此時將棧裡符號全部出棧

④ 字尾表示式求值

三、特殊線性表——佇列

1、佇列的邏輯結構

佇列的操作特性:先進先出(fifo,lilo)

2、佇列的抽象資料型別定義

3、佇列的順序儲存結構及實現

①隊首元素存放在下標為0的一端

②改進出隊的時間效能

設定隊頭、隊尾兩個指標

隊頭指標指向隊頭元素的前乙個位置

隊尾指標指向隊中最後乙個元素

③隊空:front==rear

隊滿:front=rear

隊滿的條件:(rear+1)mod queuesize=front

資料結構 棧和佇列

棧 基礎 知識棧 練習題 佇列 基礎知識 棧示意圖 後進先出 順序棧結構定義 define maxsize 1024 struct stack 操作函式 push 入棧 pop 出棧 struct lstack 鏈棧示意圖 操作函式 push 入棧 pop 出棧 注意 也可以直接呼叫系統已經寫好的庫...

資料結構 棧和佇列

本章的基本內容是 兩種特殊的線性表 棧和佇列 從資料結構角度看,棧和佇列是操作受限的線性表,他們的邏輯結構相同。從抽象資料型別角度看,棧和佇列是兩種重要的抽象資料型別。p棧 限定僅在表的一端進行插入和刪除操作的線性表。p允許插入和刪除的一端稱為棧頂,另一端稱為棧底。p空棧 不含任何資料元素的棧。a ...

資料結構 棧和佇列

用兩個棧來實現乙個佇列,完成佇列的push和pop操作。佇列中的元素為int型別。class solution int pop node stack2.top stack2.pop return node private stack stack1 stack stack2 大家都知道斐波那契數列,現...