資料結構之佇列and棧總結分析

2021-09-29 17:30:09 字數 3048 閱讀 4113

一、前言:

資料結構中佇列和棧也是常見的兩個資料結構,佇列和棧在實際使用場景上也是相輔相成的,下面簡單總結一下,如有不對之處,多多指點交流,謝謝。

二、佇列簡介

佇列顧名思義就是排隊的意思,根據我們的實際生活不難理解,排隊就是有先後順序,先到先得,其實在程式資料結構中的佇列其效果也是一樣,及先進先出。

1、操作靈活,在初始化時不需要指定其長度,其長度自動增加(預設長度為32)

注:在實際使用中,如果事先能夠預估其長度,那麼在初始化時指定長度,可以提高效率

2、泛型的引入,佇列在定義時可以指定資料型別避免裝箱拆箱操作

3、儲存資料滿足先進先出原則

c#中有關佇列的幾個常用方法:

下面通過佇列來例項模擬訊息佇列的實現流程:

using

system;

using

system.collections;

using

system.collections.generic;

namespace

datastructurequeuetest

else

if (type == "2"

)

else}}

else}}

}//////

佇列練習

/// public

class

queuetest

//////

消費訊息---出佇列--只獲取資料,不刪除資料

/// ///

public

object

informationconsumerget()

return

null

; }

//////

消費訊息---出佇列---獲取資料的同時刪除資料

/// ///

public

string

informationconsumerdel()

return

null

; }

}}

三、棧簡介

1、操作靈活,在初始化時不需要指定其長度,其長度自動增加(預設長度為10)

注:在實際使用中,如果事先能夠預估其長度,那麼在初始化時指定長度,可以提高效率

2、泛型的引入,棧在定義時可以指定資料型別避免裝箱拆箱操作

3、儲存資料滿足先進後出原則

c#中有關棧的幾個常用方法:

下面通過乙個棧來模擬瀏覽器的回退前進操作的實現

using

system;

using

system.collections.generic;

namespace

datastructurestacktest

//// 記錄上一次操作

string beforopert = ""

;

while (true

)

string wbesit =stacktestback.getstack();

console.writeline(

"回退到頁面:

" +wbesit);

beforopert =type;

}else

if (type == "2"

)

string wbesit =stacktestgo.getstack();

console.writeline(

"回退到頁面:

" +wbesit);

beforopert =type;

}else}}

}//////

佇列練習

/// public

class

stacktest

//////

有引數建構函式,棧初始化為指定長度

///如果在定義佇列時,如果知道需要儲存的資料長度,那麼最好預估乙個長度,並初始化指定的長度

/// public stacktest(int

stacklen)

//////

入棧

/// ///

public

void pushstack(string

inforvalue)

//////

出棧(但不刪除)

/// ///

public

string

getstack()

return

null

; }

//////

出棧(並刪除)

/// ///

public

string

getanddelstack()

return

null

; }

}}

四、使用場景總結

根據佇列和棧的特點,下面簡單總結一下佇列和棧的一些實際使用場景

佇列:1、非同步記錄日誌,此處會涉及到單例模式的使用

2、訊息佇列

3、業務排隊,比如12306車票購買排隊等候

4、其他符合先進先出原則的業務操作

棧:1、可回退的操作記錄,比如:瀏覽器的回退操作

2、計算表示式匹配,比如:計算器表示式計算

3、其他符合先進後出原則的業務操作

附件:

關於這一些練習的**,上傳到github,有興趣的可以看一下:

資料結構之棧 佇列

棧是一種操作受限的線性表,只允許在一端刪除和新增資料。特定的資料結構是對特定使用場景的抽象,陣列和鍊錶暴露的介面太多,操作靈活自由,但是使用起來不可控,容易出錯。棧可以陣列和鍊錶實現。陣列實現叫做順序棧,鍊錶實現叫做鏈式 棧。儲存資料只需要大小為n的陣列就夠了,出棧和入棧過程中,只需要一兩個臨時變數...

資料結構之棧 佇列

佇列只允許在同一端進行插入和刪除資料,也是一種線性表結構,後進者先出,先進者後出,是典型的 棧 結構。相比於陣列和鍊錶,棧只會帶來更多的限制,從功能來說,陣列或者鍊錶完全可以替代棧,為什麼還需要棧呢?棧把功能縮小使之更加單一,是為了避免暴露太多的操作介面,使用起來更加安全可控,不容易出錯。棧既可以用...

資料結構 棧和佇列總結

1.棧空條件 s.top 1 棧滿 s.top maxsize 1 棧長 s.top 1 以上當然是順序棧的情況。或許之前儲存的元素仍然在棧中,但top指標已經指向了新的棧頂,也就起到了刪除的作用。進棧操作 指標先加1,再入棧。s.data s.top x 出棧操作 先出棧,指標再減1。x s.da...