第三章 4 棧和佇列 單鏈佇列的表示及實現

2022-08-26 17:21:18 字數 1522 閱讀 5003

前言:

我們生活中排隊模型的特點是,最早進入隊伍的元素最早離開。本節提出佇列來描述類似排隊的結構模型。

目錄:1、棧

2、棧的應用舉例

3、棧與遞迴的實現

4、佇列

5、離散事件模型

正文:佇列的定義:

和棧相反,佇列(queue)是一種先進先出(first in first out, fifo)的線性表。它只允許在表的一端進行插入,而在另一端刪除元素。在佇列中,允許插入的一端就做隊尾(rear),允許刪除的一端稱為隊頭(front)。

雙端佇列:

雙端佇列是限定插入和刪除操作在表的兩端進行的線性表。(一種限制性的資料結構)

佇列的鏈式表示和實現:

用鍊錶表示的佇列簡稱為 鏈佇列 。乙個鏈佇列顯然需要兩個分別指向隊頭 和 隊尾 的指標(分別稱為頭指標 和 尾指標)。這裡和單鏈表一樣,為了方便也給佇列新增乙個頭結點。

佇列示意圖:

單鏈佇列的儲存結構:

//結點定義

typedef struct qnodeqnode;

//佇列鏈定義

typedef structlinkqueue;

**實現:

#include#include

#define true 1

#define false 0

#define ok 1

#define error 0

#define infeasible -1

#define overflow -2

//status是函式的型別,其值是函式結果狀態碼

typedef int

status;

typedef

intelemtype;

//結點定義

typedef struct

qnodeqnode;

//佇列鏈定義

typedef struct

linkqueue;

//初始化乙個空佇列

status initqueue(linkqueue &q)

//判斷是否為空佇列

status queueempty(linkqueue &q)

//判斷長度

status queuelength(linkqueue &q)

returni;}

//向佇列尾部插入元素e

status enqueue(linkqueue &q,elemtype e)

//刪除佇列頭部元素並返回

status dequeue(linkqueue &q,elemtype &e)

void printv(linkqueue &q)

}void

main()

執行結果:

第三章 棧和佇列

棧和佇列 一 棧 1 棧的定義 棧是限定僅在表尾進行插入和刪除操作的線性表,允許插入和刪除的一端稱為棧頂,另一端稱為棧底,不含任何資料元素的棧稱為空棧。2 在任何時候出棧的元素都只能是棧頂元素,即最後最後入棧者最先出棧。所以棧中元素除了具有線性關係外,還具有後進先出的特性。3 棧的抽象資料型別定義 ...

第三章 棧和佇列

棧和佇列是兩種常用的資料結構,同時又是操作受限的線性表,也是兩種重要的抽象資料型別。1 1棧是限定僅在表尾進行插入和刪除操作的線性表。棧中元素具有線性關係和後進先出的特性。2雖然對插入和刪除操作的位置限制減少了棧的靈活性,但同時也使得棧的操作更有效更容易實現。3棧的儲存結構分兩種,一種是順序儲存結構...

第三章 棧和佇列

第三章棧和佇列 一 棧1.棧 限定僅在表尾進行插入和刪除操作的線性表 允許插入和刪除的一端稱為棧頂 另一端稱為棧底 2.空棧 不含任何資料元素的棧。3.在任何時候出棧的元素都只能是棧頂元素,即最後入棧者最先出棧,具有後進先出的特性。4.棧的抽象資料型別定義 1 push 輸入 元素值 x 輸出 如果...