資料結構之佇列(Queue)

2021-08-21 11:30:15 字數 1873 閱讀 5969

佇列,顧名思義,也就是一條隊伍,進入隊伍的時候,只能從隊尾排隊,離開隊伍的時候,只能從隊首離開。佇列也有陣列實現和鏈式實現。

用一般陣列實現佇列的時候,入隊,則在隊尾插入乙個元素,出隊,則將隊首的元素出隊。那麼,由於陣列的長度是固定的,入隊只能從隊尾入隊,因此經常性的出隊會使得隊首越來越靠近隊尾,隊首前面的陣列空間不能被利用,導致大量的陣列空間被浪費,顯然這不是優秀的資料結構。

因此習慣上用迴圈陣列實現陣列實現的佇列。

判斷隊列為空和佇列未滿可以有兩種策略。

第一種:在佇列的資料結構增加計數器counter屬性

第二種:將陣列中一塊空間禁用。

在第一種方法下:佇列的陣列實現基本操作如下:

#include

using

namespace

std;

#define size 10

typedef

struct queuenode

*arrayqueue;

arrayqueue createqueue()

bool isfull(arrayqueue q)

bool isempty(arrayqueue q)

void enqueue(arrayqueue q, int val)

}void dequeue(arrayqueue q)

}int front(arrayqueue q)

return val;

}

在第二種方法下,佇列的陣列實現基本操作如下:

#include

using

namespace

std;

#define size 10

typedef

struct queuenode2

*arrayqueue2;

arrayqueue2 createqueue2()

bool isfull2(arrayqueue2 q)

bool isempty2(arrayqueue2 q)

void enqueue2(arrayqueue2 q, int val)

}void dequeue2(arrayqueue2 q)

}int front2(arrayqueue2 q)

return val;

}

鏈式實現的時候,永遠不用忘記,鏈式資料結構習慣上有乙個頭結點,這個頭結點的資料域部分一般不用,也可以用於儲存重要的資訊,而頭結點後面那個元素才是第乙個元素。

#include

using namespace std;

typedef struct linkedqueuenode

;typedef struct linkedqueue

;bool isempty(linkedqueue* q)

linkedqueuenode* createnode()

else

return node;

}linkedqueue* createqueue()

else

return

queue;

}void enqueue(linkedqueue* q,int val)

else

}bool updatenode(linkedqueue* q,int preval,int aftval)

}return flag;

}void dequeue(linkedqueue* q)

free(node);

}else

}int front(linkedqueue* q)

else

}void main()

資料結構之佇列 Queue

之前總結過棧相關的知識,佇列可以模擬棧來看。棧只能在一端進行操作 棧頂 新增元素或者刪除等都只能在棧頂 而佇列有兩端可以操作,在一端新增元素,在另一端刪除元素。我們把新增元素的一端稱為隊尾 刪除元素的一端稱為隊首。比如生活中的排隊 城市中基本 都有,這就是乙個佇列。在隊伍最前面就是隊首,也是最先完成...

python資料結構之佇列(queue)

佇列是一種特殊的線性表,先進先出,只允許在前端進行刪除,在後端進行插入操作,它的操作方式與堆疊類似,區別在於佇列只允許在後端插入資料。在python中有相應的類 import queue q queue.queue for i in range 4 q.put i 將乙個值放入佇列中 while n...

C 資料結構之Queue(佇列)

queue,佇列,和我們日常生活中的佇列是同樣的規則,先進先出 從尾入,從首出。有外加的一些操作如 full 佇列是否已滿 serve and retrieve 檢視隊首元素同時去除 等等。在eclipse執行通過 h標頭檔案 queue.h created on 2015年8月22日 author...