棧和佇列都來自線性表資料結構,都是「操作受限」的線性表
棧
1.定義:是限制在表的一端進行插入和刪除操作的線性表。後進先出lifo線性表
2.注意點:
棧頂(top):允許進行插入、刪除操作的一端,又稱為表尾。用棧頂指標(top)來指示棧頂元素。
棧底(base):是固定端,又稱為表頭
棧——順序儲存
定義:棧的順序儲存結構,用一維陣列來儲存棧。根據陣列是否可以根據需要增大,又可分為靜態順序棧和動態順序棧。
棧——動態順序儲存
1.注意點:
◆ 用top=bottom作為棧空的標記
◆ 結點進棧時,首先將資料元素儲存到棧頂(top所指的當前位置
),然後執行
top加
1,使top指向棧頂的下乙個儲存位置
◆ 結點出棧時,首先執行top減
1,使top指向棧頂元素的儲存位置,然後將棧頂元素取出
◆ 若棧的陣列有maxsize個元素,則
top=maxsize
時棧滿
2. 結構體定義:
typedef struct3. 追加儲存空間操作:sqstack
sqstack;
//棧——靜態順序儲存1.注意點:在壓棧操作中
if(s.top-s.bottom>=s. stacksize-1)//
空間追贈完畢後,對於壓棧操作,直接賦值元素到 s.top 即可
*s.top=e;
s.top++;
◆ 用top=0表示棧空,每次top指向棧頂在陣列中的儲存位置
◆ 結點進棧時,首先執行top加1,使
top指向新的棧頂位置,然後將資料元素儲存到棧頂
(top
所指的當前位置)。
◆ 結點出棧時,首先把top指向的棧頂元素取出,然後執行top減1,使
top指向新的棧頂位置。
◆ 若棧的陣列有maxsize個元素,則
top=maxsize-1
時棧滿
2.結構體定義:
typedef struct3. 上下溢:當棧滿時做進棧,定產生溢位,簡稱「上溢」 —— 上溢是一種出錯狀態當棧空時做退棧,將產生溢位,簡稱「下溢」 —— 下溢可能是正常現象sqstacksqstack;
棧——鏈序儲存
1.定義:鏈式儲存結構稱為鏈棧,是運算受限的單鏈表。其插入和刪除操作只能在表頭位置上進行。因此,鏈棧沒有必要像單鏈表那樣附加頭結點,棧頂指標top就是鍊錶的頭指標
2. 注意點:
◆ top == null
◆ top
所指,即棧頂元素
3. 棧的應用:
◆ 進值轉換
◆ 括號匹配
◆ 遞迴呼叫:
(1)有效的遞迴呼叫函式應包括兩部分:遞推規則
終止條件
(2)遞迴:乙個函式直接或間接地呼叫自己本身
佇列
1.定義:佇列是運算受限的線性表。是一種先進先出fifo的線性表。只允許在表的一端進行插入,而在另一端進行刪除。
① 隊首(front)
:允許進行刪除的一端稱為隊首。
② 隊尾(rear)
:允許進行插入的一端稱為隊尾
佇列——順序儲存結構
1. 定義:利用一組連續的儲存單元(一維陣列
) 依次存放從隊首到隊尾的各個元素,稱為順序佇列
2. 結構體定義:
typedef struct3. 注意點:queuesqqueue;
◆ 初始化:front=rear=0
。◆入隊:將新元素插入rear所指的位置,然後
rear加1
。◆出隊:刪去front所指的元素,然後加
1並返回被刪元素。◆隊空:front=rear。◆隊滿:rear=max_queue_size-1或front=rear
4. 假溢位:
在入隊和出隊操作中,頭、尾指標只增加不減小,致使被刪除元素的空間永遠無法重新利用
迴圈佇列
1.避免「假溢位」思想:
當隊首、隊尾指標指向上界(max_queue_size-1)時,其加
1操作的結果是指向向量的下界
02. 用模運算簡化操作:
i=(i+1)%max_queue_size
◆ i代表隊首
(front)
或隊尾
(rear)
3. 注意點:
◆ rear
所指的單元始終為空
◆ 迴圈佇列空:front=rear
◆ 迴圈佇列滿:(rear+1)%max_queue_size =front
◆入隊:先賦值,再隊尾指標移動rear=(rear+1)% max_queue_size
◆出隊:先取值,再隊首指標移動 front=(front+1)% max_queue_size
佇列——鏈序儲存結構
1.定義:鏈佇列,是限制僅在表頭進行刪除操作和表尾進行插入操作的單鏈表
2.結構體定義:
(1)資料元素結點:
typedef struct(2)指標結點:qnodeqnode;
棧和佇列總結
使用標準庫的棧 include 標頭檔案 stacks 定義乙個 int 型的棧 s.empty 如果棧為空返回true,否則返回false s.size 返回棧中元素的個數 s.pop 刪除棧頂元素但不返回其值 s.top 返回棧頂的元素,但不刪除該元素 s.push 在棧頂壓入新元素 使用標準庫...
棧和佇列總結
棧佇列 特點後進先出 先進先出 定義stackstack new stack queuequeue new linkedlist 入s.push q.offer 出s.pop 同時返回棧頂元素 q.poll 同時返回隊頭元素 頂s.peek q.peek 佇列頭部元素 注意 在佇列中 add 和re...
棧和佇列總結
棧繼承自vector,stack只有乙個空參構造方法,因此想往其中新增元素只能使用方法push 常用方法如下 public e push e item 入棧 public e pop 出棧 public e peek 檢視棧頂元素 public boolean empty 是否為空 注意在使用棧時,...