資料結構 隊

2022-08-24 17:39:12 字數 3696 閱讀 8504

1 隊的定義

1.1 隊

只允許在一端進行插入,在另一端進行刪除的操作的線性表,又稱為先進先出(first in first out)線性表,簡稱fifo

1.2 隊的相關概念

隊頭:允許進行刪除操作的一端

隊尾:允許進行插入操作的一端

空隊:不含任何資料元素的隊

1.3 隊的操作

入隊:在隊尾新增乙個元素

出隊:在對頭刪除乙個元素

2 隊的抽象資料型別

adt隊:

data: 

a1,a2,a3,...,ai-1,ai,ai+1,...,an

operation

initqueue(q)

//初始化操作建立乙個空隊

destroyqueue(q) //

銷毀乙個已存在的隊

clearqueue(q) //

清空乙個隊

queueempty(q) //

若隊為空,返回true

//若隊不為空,返回false

getqueue(q,e) //

若隊存在且為空,返回隊首元素

enqueue(q,e) //

若佇列存在,在隊尾插入乙個元素

dequeue(q,e) //

若隊存在且為空,返回並刪除隊首元素

queuelength(q) //

返回佇列中元素個數

endadt

3 隊的順序儲存結構3.1 隊的順序儲存結構的缺點出隊效率低下

出隊時浪費儲存空間,入隊時儲存空間不足

3.2 迴圈佇列

將佇列首尾相接的儲存結構

3.3 隊的儲存結構

#define queuesize 100typedef 

intdatatype

typedef

struct

//結構體別名可有可無

seqqueue;

3.4 隊的初始化操作

#define queuesize 100typedef 

intdatatype

typedef

struct

seqqueue;

void initqueue(seqqueue *q)

void

main()

3.5 刪除隊中所有元素

void clearqueue(seqqueue *q)

3.6 判斷隊是否為空

#define queuesize 100typedef 

intdatatype

typedef

struct

seqqueue;

void initqueue(seqqueue *q)

bool queueempty(seqqueue *q)

void

main()

3.7 判斷隊是否為滿

bool queuefull(seqqueue *q)

3.8 獲取隊頭元素

bool getqueue(seqqueue *q,datatype *e)

3.9 從佇列中取出乙個元素

status dequeue(seqqueue *q,datatype *e)

3.10 佇列中新增乙個元素

status enqueue(seqqueue *q,datatype e)

3.11 求佇列的長度

int queuelength(seqqueue *q)

4 隊的鏈式儲存結構4.1 隊的鏈式儲存結構

typedef int

datatype;

typedef

struct

qnode

qnode;

typedef

struct

linkqueue;

4.2 隊的鏈式儲存結構的初始化操作

void initqueue(linkqueue *q)

void

main()

4.3 佇列中新增乙個元素

void enqueue(linkqueue *q)

q->count++;

}

4.4 將佇列中所有元素刪除

4.5 判斷隊是否為空

bool queueempty(linkqueue *q)

4.6 求隊的長度

bool queuelength(linkqueue *q)

linkqueue lq={};

相當於:lq.front=0;lq.rear=0;lq.count=0;

4.7 獲取隊頭元素

status gethead(linkqueue *q,datatype *e)

4.8 佇列中取出乙個元素

status dequeue(linkqueue *q,datatype *e)

資料結構(2) 隊

隊 queue 前一篇講了棧 stack 隊和棧其實只有乙個差別,棧是先進後出,隊是先進先出,如圖 從圖中可以看出,隊有兩個常用的方法,enqueue和dequeue,顧名思義,就是進隊和出隊了。隊和棧一樣,既可以用陣列實現,也可以用鍊錶實現,我還是偏向於用陣列,我的實現示意圖如下 隊有啥用呢?乙個...

資料結構 隊queue

實現 所以實現佇列只需要提供隊前刪除的方法和對尾插入的方法 可以通過陣列實現,也可以通過鍊錶實現,jdk中arraydeque是通過陣列實現的佇列 雙向佇列 linkedlist,則是通過雙向鍊錶實現的佇列 可以作為棧來看 具體實現略 jdk中的隊體系 常見 繼承於collection介面的queu...

資料結構隊的使用

本程式實現佇列的基本功能 建立隊 進隊 出隊 判滿 判空 銷毀 main.c include include squeue.h int main void return ok queue.c include include include squeue.h 建立squeue createqueue ...