一、前言:
資料結構中佇列和棧也是常見的兩個資料結構,佇列和棧在實際使用場景上也是相輔相成的,下面簡單總結一下,如有不對之處,多多指點交流,謝謝。
二、佇列簡介
佇列顧名思義就是排隊的意思,根據我們的實際生活不難理解,排隊就是有先後順序,先到先得,其實在程式資料結構中的佇列其效果也是一樣,及先進先出。
1、操作靈活,在初始化時不需要指定其長度,其長度自動增加(預設長度為32)
注:在實際使用中,如果事先能夠預估其長度,那麼在初始化時指定長度,可以提高效率
2、泛型的引入,佇列在定義時可以指定資料型別避免裝箱拆箱操作
3、儲存資料滿足先進先出原則
c#中有關佇列的幾個常用方法:
下面通過佇列來例項模擬訊息佇列的實現流程:
usingsystem;
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#中有關棧的幾個常用方法:
下面通過乙個棧來模擬瀏覽器的回退前進操作的實現
usingsystem;
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...