棧和佇列的解析

2021-10-22 03:47:10 字數 3412 閱讀 5756

棧是一種用於儲存資料的簡單資料結構(與鍊錶類似)。資料入棧的次序是棧的關鍵。可以把一桶桶裝的薯片看作是乙個棧的例子,當薯片做好之後,它們會依次被新增到桶裡,每一片都會是當前的最上面一片,而每次我們取的時候也是取的最上面的那一片,規定你不能破壞桶也不能把底部捅穿,所以第乙個放入桶的薯片只能最後乙個從桶裡取出;

**定義:**棧(stack)是乙個有序線性表,只能在表的一端(稱為棧頂,top)執行插入和刪除操作。最後插入的元素將第乙個被刪除,所以棧也稱為後進先出(last in first out,lifo)或先進後出(first in last out)線性表;

兩個改變棧的操作都有專用名稱。乙個稱為入棧(push),表示在棧中插入乙個元素;另乙個稱為出棧(pop),表示從棧中刪除乙個元素。試圖對乙個空棧執行棧操作稱為下溢(underflow);試圖對乙個滿棧執行棧操作稱為溢位(overflow)。通常,溢位和下溢均認為是異常;

我們結合之前建立的array類,我們能夠很好的建立屬於我們自己的動態陣列實現的棧結構,對於使用者來說,我們只需要完成我們的相關操作,並且知道我能夠不斷地往裡新增元素而不出錯就行了,所以我們先來定義乙個通用的棧介面:

public

inte***ce

stack

然後我們往之前的動態陣列中新增兩個方法:

public e getlast()

public e getfirst()

然後實現自己的動態陣列為底層的棧結構:

public

class

arraystack

implements

stack

public

arraystack()

@override

public

intgetsize()

@override

public

boolean

isemepty()

public

intgetcapacity()

@override

public

void

push

(e e)

@override

public e pop()

@override

public e top()

@override

public string tostring()

} res.

("]");

return res.

tostring();}}

佇列是一種用於儲存資料的資料結構(與鍊錶和棧類似),資料到達的次序是佇列的關鍵;在日常生活中佇列是指從序列的開始按照順序等待服務的一隊人或物;

**定義:**佇列是一種只能在一端插入(隊尾),在另一端刪除(隊首)的有序線性表。佇列中第乙個插入的元素也是第乙個被刪除的元素,所以佇列是一種先進先出(fifo,first in first out)或後進後出(lilo,last in last out)線性表;

與棧類似,兩個改變佇列的操作各有專用名稱;在佇列中插入乙個元素,稱為入隊(enqueue),從佇列中刪除乙個元素,稱為出隊(dequeue);試圖對乙個空佇列執行出隊操作稱為下溢(underflow),試圖對乙個滿佇列執行入隊操作稱為溢位(overflow);通常認為溢位和下溢是異常。

我們仍然定義乙個queue介面來說明我們佇列中常用的一些方法:

public

inte***ce

queue

藉由我們之前自己實現的動態陣列,那麼我們的佇列就很簡單了:

public

class

arrayqueue

implements

queue

public

arrayqueue()

@override

public

intgetsize()

@override

public

boolean

isempty()

public

intgetcapacity()

@override

public

void

enqueue

(e e)

@override

public e dequeue()

@override

public e getfront()

@override

public string tostring()

res.

("] tail");

return res.

tostring();}}

迴圈佇列的實現其實就是維護了乙個front和乙個tail分別指向頭和尾,然後需要特別注意的呢是判定隊滿和隊空的條件:

public

class

loopqueue

implements

queue

public

loopqueue()

public

intgetcapacity()

@override

public

boolean

isempty()

@override

public

intgetsize()

@override

public

void

enqueue

(e e)

@override

public e dequeue()

@override

public e getfront()

private

void

resize

(int newcapacity)

@override

public string tostring()

res.

("] tail");

return res.

tostring();}}

棧和佇列 單調佇列 單調棧

講解部落格鏈結 一 單調棧 1 什麼是單調棧?單調棧是指乙個棧內部元素具有嚴格單調性 單調遞增,單調遞減 的一種資料結構。2 單調棧的兩個性質 滿足從棧頂到棧底具有嚴格的單調性 滿足後進先出的特徵,越靠近棧底的元素越早的進棧。3 元素進棧的過程 對於當前進棧元素x 如果x 棧頂元素,x 進棧。否則 ...

棧和佇列 佇列

佇列 又一種特殊的線性表 佇列 queue 是只允許在一端進行插入,而在另一端進行刪除的運算受限的線性表 允許刪除的一端稱為隊頭 front 允許插入的一端稱為隊尾 rear 當佇列中沒有元素時稱為空佇列。佇列的修改是依先進先出的原則進行的。新來的成員總是加入隊尾 即不允許 加塞 每次離開的成員總是...

棧和佇列(佇列)

列隊類 public class myqueue 帶引數構造方法,引數為陣列大小 public myqueue int maxsize 新增資料 從隊尾插入 public void insert int value arr end value 注意是 end 不是end element 刪除資料,從...