資料結構 堆疊和佇列

2021-06-27 08:05:13 字數 1829 閱讀 9684

在資料結構中,有些簡單的線性結構是非常常用的,比如說堆疊可以用於實現函式的呼叫,佇列可以處理一些需要排隊的問題,下面就簡單介紹一下這兩種資料結構。

一:堆疊

堆疊是一種特殊的資料結構,特點是filo(first in, last out),而且處理的元素也只可以在棧頂這一端。下面給出堆疊常用介面,例如進棧出棧,檢視棧頂元素等。

#ifndef stack_h

#define stack_h

#include#includeusing namespace std;

templateclass stack

~stack()

//進棧操作

bool push(const elem & e)

else

} //出棧操作

bool pop(elem & popvalue)

else

} //列印棧元素

void show() const

cout << endl;

} //返回棧頂元素的值

elem gettopvalue()

else

} //判斷棧是否為空

bool isempty() const

//判斷棧是否已滿

bool isfull() const

};#endif

棧還有基於鍊錶的實現,此處不再具體給出,具體的實現方法和基於陣列的棧實現方法大同小異。

二:佇列

還有一種特殊的資料結構叫做佇列,現實生活中也經常有這種情況,佇列的特點fifo(first in, first out),而且只可以在隊尾插入元素,元素只可以在隊首出來。佇列有些比較常用的操作,比如進隊出隊,佇列的首尾元素叫法也不一樣(隊首是front,隊尾是rear)。基於陣列的佇列主要採取迴圈佇列的實現方法,下面簡單介紹迴圈佇列的實現過程。

迴圈佇列如下

下面是迴圈佇列基於陣列的實現

#include#includeusing namespace std;

templateclass queue

~queue()

//在隊尾插入元素

bool enqueue(const elem & e)

else

} //在隊首執行出對操作,並把出隊元素值儲存在dequeuevalue

bool dequeue(elem & dequeuevalue)

else

} //判斷佇列是否為空

bool isempty() const

//判斷佇列是否已滿

bool isfull() const

//列印佇列

void show() const

cout << endl;

}};

三:總結線性表、棧與佇列的異同點:相同點:邏輯結構相同,都是線性的;都可以用順序儲存或鍊錶儲存;棧和佇列是兩種特殊的線性表,即受限的線性表(只是對插入、刪除運算加以限制)。

不同點:

① 運算規則不同,線性表為隨機訪問,而棧是只允許在一端進行插入和刪除運算,因而是後進先出表lifo;佇列是只允許在一端進行插入、另一端進行刪除運算,因而是先進先出表fifo。

② 用途不同,線性表比較通用;堆疊用於函式呼叫、遞迴和簡化設計等;佇列用於離散事件模擬、多道作業處理和簡化設計等。

資料結構 堆疊和佇列

堆疊和佇列都是特殊的線性表,線性表 堆疊和佇列三者的資料元素以及資料元素之間的邏輯關係完全相同。差別 線性表的插入和刪除操作不受任何限制,而堆疊只能在棧頂插入和刪除,佇列只能在隊尾插入,在對頭刪除。順序表的鏈式表示 堆疊有兩端,插入元素和刪除元素的一端為棧頂,另一端為棧底。對於鏈式堆疊來說,顯然,吧...

資料結構 堆疊和佇列

主要是用於實現堆疊資料結構的儲存方式。先進後出 push pop 使用linkedlist模擬堆疊的資料結構儲存方式 class stacklist 進棧 public void add object o 彈棧 把元素刪除並返回。public object pop 獲取元素個數 public int...

資料結構基礎 堆疊佇列

棧主要講解 佇列主要講解 說明 所有原始碼均可以在idea上除錯。堆的實現 大小頂堆 原始碼和測試案例 查詢第k大的元素 堆排 原始碼和測試案例 優先佇列 棧的基本功能包括 入棧 push 出棧 pop 獲取棧頂元素 peek 獲取棧中實際容量 getrealsize 獲取棧中最大容量 getmax...