鏈佇列的基本演算法

2022-03-17 21:30:05 字數 3673 閱讀 5132

一、介紹

佇列(queue),計算機中一種常用的資料結構,具有先進先出fifo的特點。

通俗一點,就跟生活中超市購物結賬排隊一樣,靠前的結賬先走,新來的排在後面等待。

對於佇列中的元素,一般都在隊頭出隊,在隊尾入隊,隊頭用q.front表示,隊尾用q.rear表示。

佇列的實現有兩種方式,通過陣列或者鍊錶實現。基於陣列實現的佇列一般稱作順序佇列,基於鍊錶實現的佇列一般稱作鏈式佇列。

鏈式佇列中,有兩個指標,分別是隊頭指標和隊尾指標。為了操作方便,可以給鏈佇列新增乙個頭結點,並令頭指標指向頭結點。

空佇列判決條件:頭指標和尾指標均指向頭結點。也即q.front == q.rear。 

本文採用鍊錶實現佇列,鏈佇列的操作即為單鏈表的插入和刪除的特殊情況,只是尚需修改尾指標或頭指標。

二、示圖

三、演算法

#define queue_overflow  -1

#define ok 1

#define error 0

#define true 1

#define false 0typedef

intqelemtype;

typedef

intstatus;

///----- 單鏈佇列 ------- 佇列的鏈式儲存結構

typedef struct

qnode qnode, *queueptr;

typedef

struct

linkqueue;

///--- 基本操作的函式原型說明 -----

status initqueue(linkqueue &q); //

構造乙個空的佇列q

status destroyqueue(linkqueue &q); //

銷毀佇列q,q不再存在

status clearqueue(linkqueue &q); //

將佇列q清空

status queueempty(linkqueue q); //

判斷佇列q是否為空,若空,返回ture, 否則,返回false

int queuelength(linkqueue q); //

返回q的元素個數,也即佇列的長度

status gethead(linkqueue q, qelemtype &e); //

若佇列q不為空,則用e返回q的隊頭元素,並返回ok;否則,返回error

status enqueue(linkqueue &q, qelemtype e); //

插入元素e為q的新的隊尾元素

status dequeue(linkqueue &q, qelemtype &e); //

若佇列不空,則刪除q的隊頭元素,用e返回其值,並返回ok,否則,返回error

void queuevisit(linkqueue &q); //

訪問佇列元素

四、**

status initqueue(linkqueue &q) 

status destroyqueue(linkqueue &q)

cout

<

佇列已銷毀

"<

return

ok;}

status clearqueue(linkqueue &q)

status queueempty(linkqueue q)

cout

<

佇列不為空

"<

return

false;

}int

queuelength(linkqueue q)

cout

<

佇列長度:

"return

len;

}status gethead(linkqueue q, qelemtype &e)

qnode *p = q.front->next;

e = p->data;

cout

<

隊頭元素:

"return

ok;}

status enqueue(linkqueue &q, qelemtype e)

status dequeue(linkqueue &q, qelemtype &e)

free

(p);

return

ok;}

void queuevisit(linkqueue &q)

//訪問佇列元素

qnode *p = q.front->next;

printf(

"佇列順序為:");

while

(p) cout

<

}

五、測試

int

main()

}//判斷佇列是否為空

queueempty(queue);

//訪問佇列元素

queuevisit(queue);

//獲取佇列長度

queuelength(queue);

//獲取隊頭元素

qelemtype e;

gethead(queue, e);

//出佇列

for (int i=1; i<5 ; i++)

queuevisit(queue);

//清空佇列

clearqueue(queue);

queueempty(queue);

//銷毀佇列

destroyqueue(queue);

return0;

}

六、列印

/users/xiayuanquan/clionprojects/queuetest/cmake-build-debug/queuetest

入隊:1

入隊:2

入隊:3

入隊:4

入隊:5

入隊:6

入隊:7

入隊:8

入隊:9

入隊:10

佇列不為空

佇列順序為:12

3456

78910

佇列長度:

10隊頭元素:

1出隊:

1出隊:

2出隊:

3出隊:

4佇列順序為:56

78910

佇列已清空

隊列為空

佇列已銷毀

程序已結束,退出**

0

佇列的基本操作(鏈佇列)

佇列和棧差不多,唯一的區別就是棧式先進後出 filo 佇列是先進先出 fifo 佇列的示意圖如下 其基本操作的 如下 include includeusing namespace std struct qnode typedef qnode queueptr struct linkqueue 初始化...

鏈佇列的基本操作

include include using namespace std typedef int datatype 定義鏈佇列結點結構 typedef struct nodelqueuenode 定義鏈佇列結構 typedef struct lqueue typedef lqueue plqueue ...

鏈佇列的基本操作 C

include using namespace std 定義結點 typedef struct qnode qnode,queueptr 定義鏈隊 struct lqueue 初始化佇列 void init lqueue q 入佇列 void enqueue lqueue q 判斷佇列是否為空 bo...