佇列(queue)原理及實現

2021-10-07 03:43:19 字數 2538 閱讀 7771

目錄

序言:佇列簡介

一、順序儲存結構及實現

二、迴圈佇列

三、鏈式儲存結構及實現

四、雙向佇列

佇列是一種特殊的線性表,它只允許在表的前端(front)進行刪除操作,只允許在表的後端(rear)進行插入操作。

進行插入操作的端稱為隊尾,進行刪除操作的端稱為隊頭。

根據其特徵,把佇列簡稱為先進先出(fifo)的線性表。

佇列的常用操作如下:

順序儲存結構的佇列簡稱為順序佇列,系統採用一組位址連續的儲存單元依次存放佇列從rear端到front端的所有資料元素,程式只需front和rear兩個整型變數來記錄佇列front端的元素索引、rear端的元素索引。

對於順序佇列而言,佇列底層將採用陣列來儲存佇列元素,每個佇列元素在陣列中的位置是固定不變的,變的只是rear和front兩個整型變數。但有元素進入佇列時,rear變數的值+1;當有元素從佇列中移除時,front變數的值+1。 

public class sequencequeue

public sequencequeue(t element)

/*** 以指定長度的陣列來建立佇列

* @param element

* @param initsize

*/public sequencequeue(t element, int initsize)

//獲取佇列的大小

public int length()

//插入佇列

public void add(t element)

elementdata[rear++] = element;

}//移除佇列

public t remove()

t oldvalue = (t) elementdata[front];

elementdata[front++] = null;

return oldvalue;

}//返回佇列頂元素,但不刪除佇列元素

public t element()

return (t) elementdata[front];

}//判斷是否為空

private boolean empty()

//清空佇列

public void clear()

}

為了重新利用順序佇列底層陣列中已刪除元素所占用的空間,消除可能出現的「假滿」現象,可以將順序佇列改進為迴圈佇列。

迴圈佇列的是首尾相連的佇列:當front、rear變數達到底層陣列的capacity-1之後,再前進一位就自動變成0。

//以乙個初始化元素建立佇列

public loopqueue(t element)

/*** 以指定長度的陣列來建立佇列

* @param element 指定佇列中的第乙個元素

* @param initcapacity 指定迴圈佇列底層陣列的長度

*/public loopqueue(t element, int initcapacity)

//獲取迴圈佇列的大小

public int length()

return rear > front ? rear - front : capacity - (front - rear);

}//是否為空

private boolean empty()

//插入佇列

public void add(t element)

elementdata[rear++] = element;

rear = rear == capacity ? 0 : rear;

}//移除佇列

public t remove()

t oldvalue = (t) elementdata[front];

elementdata[front++] = null;

front = front == capacity ? 0 : front;

return oldvalue;

}//返回佇列頂元素,但不刪除佇列頂元素

public t element()

return (t) elementdata[front];

}//清空迴圈佇列

public void clear()

}結構類似上篇棧的實現,由內部的node類定義乙個節點,節點中包含該節點的資料、以及下個節點和上個節點的指引。

雙向佇列(deque)代表一種特殊的佇列,它可以在兩端同時進行插入、刪除操作。

佇列(queue)原理

像棧一樣,佇列 queue 也是一種線性表,它的特性是先進先出,插入在一端,刪除在另一端。就像排隊一樣,剛來的人入隊 push 要排在隊尾 rear 每次出隊 pop 的都是隊首 front 的人。如圖1,描述了乙個佇列模型。佇列 queue 與棧一樣,是一種線性儲存結構,它具有如下特點 佇列中的資...

佇列 Queue 的定義及實現

佇列是一種特殊的線性表。佇列不允許在中間部位進行操作!佇列的性質 先進先出 佇列的一些常用操作 建立佇列,銷毀佇列,清空佇列,進佇列,出佇列,獲取隊頭元素,獲取佇列的長度 佇列的順序儲存實現是基於線形表的 實現的,因此需要呼叫線形表的標頭檔案,線性表的 在前面的文章中已經詳細說明,此處不再贅述。順序...

實現佇列 Queue

佇列 只允許在一端進行插入資料操作,在另一端進行刪除資料操作的特殊線性表,佇列具有先進先出fifo first in first out 入佇列 進行插入操作的一端稱為隊尾 出佇列 進行刪除操作的一端稱為隊頭 實現 是用鍊錶的結構實現更優一些,因為如果使用陣列的結構,出佇列在陣列頭上出資料,效率比較...