一、什麼是佇列
二、佇列的抽象資料型別描述
三、佇列的順序儲存實現
四、迴圈佇列
4.1 入佇列
4.2 出佇列
五、佇列的鏈式儲存實現
5.1 出佇列
六、python實現-佇列
資料結構與演算法 - 鹹魚chen - www.cnblogs.com佇列(queue):具有一定操作約束的線性表
型別名稱:佇列(queue)
資料物件集:乙個有0個或多個元素的有窮線性表。
操作集:長度為maxsize的佇列
queue createqueue(int maxsize)
:生成長度為maxsize的空佇列;
int isfullq(queue q, int maxsize)
:判斷佇列q是否已滿;
void addq(queue q, elementtype item)
:將資料元素item插入佇列q中;
int isemptyq(queue q)
:判斷佇列q是否為空;
elementtype deleteq(queue q)
:將隊頭資料元素從佇列中刪除並返回。
佇列的順序儲存結構通常由乙個一維陣列和乙個記錄佇列頭元素位置的變數front以及乙個記錄佇列尾元素的變數rear組成。
/* c語言實現 */
#define maxsize 《儲存資料元素的最大個數》
struct qnode;
typedef struct qnode *queue;
例:乙個工作佇列
普通佇列實現
普通佇列實現
迴圈佇列實現過程
迴圈佇列實現
思考:
上述這種迴圈佇列的方案:堆疊空和滿的判別條件是什麼?
為什麼會出現空、滿無法區分?根本原因是什麼?
解決方案:
使用額外標記:size或者tag域
僅使用n-1個陣列空間
front和rear指標的移動採用「加1取餘」法,體現了順序儲存的「迴圈使用」。
/* c語言實現 */
void addq(queue ptrq, elementtype item)
ptrq->rear = (ptrq->rear+1) % maxsize;
ptrq->data[ptrq->rear] = item;
}
/* c語言實現 */
elementtype deleteq(queue ptrq)
else
}
佇列的鏈式儲存結構也可以用乙個單鏈表實現。插入和刪除操作分別在鍊錶的兩頭進行;佇列指標front應該在鍊錶的頭部;rear應該在鍊錶的尾部。因為front在鍊錶的尾部,刪除操作後找不到上乙個元素。
/* c語言實現 */
不帶頭結點的鏈式佇列出隊操作的乙個示例:
/* c語言實現 */
elementtype deleteq(queue ptrq)
frontcell = ptrq->front;
if (ptrq->front == ptrq->rear) /* 若佇列只有乙個元素 */
ptrq->front = ptrq->rear = null; /* 刪除後對列置為空 */
else
ptrq->front = ptrq->front->next;
frontelem = frontcell->data;
free(frontcell); /* 釋放被刪除結點空間 */
return frontelem;
}
六、python實現-佇列
# python語言實現
class head(object):
def __init__(self):
self.left = none
self.right = none
class node(object):
def __init__(self, value):
self.value = value
self.next = none
class queue(object):
def __init__(self):
# 初始化節點
self.head = head()
def enqueue(self, value):
# 插入乙個元素
newnode = node(value)
p = self.head
if p.right:
# 如果head節點的右邊不為none
# 說明佇列中已經有元素了
# 就執行下列的操作
temp = p.right
p.right = newnode
temp.next = newnode
else:
# 這說明隊列為空,插入第乙個元素
p.right = newnode
p.left = newnode
def dequeue(self):
# 取出乙個元素
p = self.head
if p.left and (p.left == p.right):
# 說明佇列中已經有元素
# 但是這是最後乙個元素
temp = p.left
p.left = p.right = none
return temp.value
elif p.left and (p.left != p.right):
# 說明佇列中有元素,而且不止乙個
temp = p.left
p.left = temp.next
return temp.value
else:
# 說明隊列為空
# 丟擲查詢錯誤
raise lookuperror('queue is empty!')
def is_empty(self):
if self.head.left:
return false
else:
return true
def top(self):
# 查詢目前佇列中最早入隊的元素
if self.head.left:
return self.head.left.value
else:
raise lookuperror('queue is empty!')
python有序佇列 Python 佇列
所謂佇列 佇列是有序集合,新增操作發生在 尾部 移除操作則發生在 頭部 新元素從尾部進入 佇列,然後一直向前移動到頭部,直到成為下乙個被移除的元素。新新增的元素必須在佇列的尾部等待,在佇列中時間長的元素則排在前面。這種排序 原則被稱作 fifo first in first out 即先進先出,也稱...
python 清空佇列 python實現 佇列
佇列 佇列的乙個特性是 先進先出 first in first out,fifo python中,同樣可以使用列表來儲存佇列的資料。通過建立乙個佇列類,便可以方便的對佇列進行操作。主要有 入隊 in 出隊 out 清空佇列 empty 設定佇列大小 setsize 獲取隊尾位置 getend 等 p...
queue的長度 佇列 Queue
佇列 queue 是先進先出 fifo,first in first out 的線性表。在具體應用中通常用鍊錶或者陣列來實現。佇列只允許在後端 稱為rear 進行插入操作,在前端 稱為front 進行刪除操作。隊結構 迴圈佇列可以更簡單防止偽溢位 假溢位 的發生,但佇列大小是固定的。防止假溢位,如d...