棧和隊列簡介

棧和隊列簡介

棧和隊列是兩種常用的數據結構,它們的數據是按線性結構存儲的,因此,棧和隊列也屬於線性表。

棧和隊列的數據可以存儲在一個順序表裏,也可以存儲在一個鏈表裏,只要滿足線性存儲結構就行。只對數據的線性結構有要求,對存儲數據的具體結構並不做要求。

棧和隊列最關鍵的特徵是存取數據有嚴格的順序。棧遵循“後進先出”(LIFO, Last In First Out)的原則,隊列遵循“先進先出”(FIFO, First In First Out)的原則。

接下來就簡單介紹一下棧和隊列。

一、棧簡介 

棧(stack),又稱爲堆棧,是一種數據結構,一種存儲數據的容器。

作爲一種線性的數據結構,棧的一端是封閉的,稱爲棧底,另一端是開口的,稱爲棧頂。

將數據存到棧中,稱爲入棧(或進棧、壓棧),將數據從棧中取出,稱爲出棧(或彈棧)。

從棧中存取數據,都只能從開口的一端操作,先入棧的數據會被後入棧的數據“壓”住,只有將後入棧的數據取出後,才取得到先入棧的數據,所以,棧的數據是“後進先出”的。

棧的常見應用如:大部分軟件都有的“回退”功能Ctrl+Z,瀏覽器的“後退”功能等。

棧的數據存儲結構可以使用順序表,也可以使用鏈表。使用順序表存儲數據的棧稱爲順序棧,使用鏈表存儲數據的棧稱爲鏈棧。

根據順序表和鏈表的區別,順序表物理有序,鏈表邏輯有序,順序棧和鏈棧的區別爲,數據在實際物理空間上存放的相對位置不同,順序棧的數據按物理有序存儲,鏈棧的數據按邏輯有序存儲。

二、隊列簡介

隊列(queue),是另一種有存取順序要求的數據結構。

隊列的兩端都是打開的,兩端都是“單行”的,一端只進不出,稱爲隊尾,另一端只出不進,稱爲隊頭。

將數據從隊尾存到隊列中,稱爲入隊,將數據從隊列中取出,稱爲出隊。

隊列的一端只能存入數據,另一端只能取出數據,從隊列中取數據時,先入隊的數據“擋”住了後入隊的數據,只有將先入隊的數據取出來,才取得到後入隊的數據,所以,隊列的數據是“先進先出”的。

隊列的常見應用如:春運搶票功能,網購預約功能等。

與棧相同,隊列的數據存儲結構也可以使用順序表或者鏈表。使用順序表存儲數據的隊列稱爲順序隊列,使用鏈表存儲數據的隊列稱爲鏈隊列。

順序隊列和鏈隊列的區別爲,數據在實際物理空間上存放的相對位置不同,順序隊列的數據按物理有序存儲,鏈隊列的數據按邏輯有序存儲。

三、雙端隊列簡介

雙端隊列(deque,全名double-ended queue),是一種特殊的線性數據結構。

與隊列不同,雙端隊列的兩端都可以入隊和出隊。也就是說,雙端隊列沒有嚴格意義上的“隊頭”和“隊尾”,只是爲了描述方便,分別稱爲“前端”和“後端”,兩端能進行的操作一樣,都可以插入和刪除數據。

雙端隊列同時具有棧和隊列的性質。單獨從其中一端存取數據時,數據是“後進先出”的,具有棧的性質。從其中一端存數據再從另一端取出,數據是“先進先出”的,具有隊列的性質。

雙端隊列就是一種可以(也只能)從兩端插入和刪除數據的線性數據結構,使用起來比棧和隊列更加靈活。

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章