佇列,顧名思義,也就是一條隊伍,進入隊伍的時候,只能從隊尾排隊,離開隊伍的時候,只能從隊首離開。佇列也有陣列實現和鏈式實現。
用一般陣列實現佇列的時候,入隊,則在隊尾插入乙個元素,出隊,則將隊首的元素出隊。那麼,由於陣列的長度是固定的,入隊只能從隊尾入隊,因此經常性的出隊會使得隊首越來越靠近隊尾,隊首前面的陣列空間不能被利用,導致大量的陣列空間被浪費,顯然這不是優秀的資料結構。
因此習慣上用迴圈陣列實現陣列實現的佇列。
判斷隊列為空和佇列未滿可以有兩種策略。
第一種:在佇列的資料結構增加計數器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...