更新時間:2021-11-01 10:44:30 來源:動力節點 瀏覽1053次
隊列是編程中一種有用的數據結構。類似于電影院外的售票隊列,第一個進入隊列的人就是第一個拿到票的人。
Java隊列遵循先進先出 (FIFO)規則 - 先進入的項目是先出的項目。
在上圖中,由于 1 在 2 之前保留在隊列中,因此它也是第一個從隊列中刪除的。它遵循先進先出規則。
在編程術語中,將項目放入隊列稱為enqueue,從隊列中移除項目稱為dequeue。
我們可以使用任何編程語言(如 C、C++、Java、Python 或 C#)實現隊列,但規范幾乎相同。
隊列是一個對象(一種抽象數據結構 - ADT),它允許以下操作:
Enqueue : 向隊列末尾添加一個元素
Dequeue : 從隊列前面移除一個元素
IsEmpty : 檢查隊列是否為空
IsFull : 檢查隊列是否已滿
Peek:獲取隊列前端的值而不移除它
隊列操作的工作方式如下:
兩個指針和跟蹤隊列的第一個元素
跟蹤隊列的最后一個元素
最初,設置值和-1
檢查隊列是否已滿
對于第一個元素,設置值到 0
增加索引 1
在指向的位置添加新元素
檢查隊列是否為空
返回指向的值增加索引 1
對于最后一個元素,重置值和-1
我們通常使用數組來實現 Java 和 C/++ 中的隊列。對于 Python,我們使用列表。
// Queue implementation in Java
public class Queue {
int SIZE = 5;
int items[] = new int[SIZE];
int front, rear;
Queue() {
front = -1;
rear = -1;
}
boolean isFull() {
if (front == 0 && rear == SIZE - 1) {
return true;
}
return false;
}
boolean isEmpty() {
if (front == -1)
return true;
else
return false;
}
void enQueue(int element) {
if (isFull()) {
System.out.println("Queue is full");
} else {
if (front == -1)
front = 0;
rear++;
items[rear] = element;
System.out.println("Inserted " + element);
}
}
int deQueue() {
int element;
if (isEmpty()) {
System.out.println("Queue is empty");
return (-1);
} else {
element = items[front];
if (front >= rear) {
front = -1;
rear = -1;
} /* Q has only one element, so we reset the queue after deleting it. */
else {
front++;
}
System.out.println("Deleted -> " + element);
return (element);
}
}
void display() {
/* Function to display elements of Queue */
int i;
if (isEmpty()) {
System.out.println("Empty Queue");
} else {
System.out.println("\nFront index-> " + front);
System.out.println("Items -> ");
for (i = front; i <= rear; i++)
System.out.print(items[i] + " ");
System.out.println("\nRear index-> " + rear);
}
}
public static void main(String[] args) {
Queue q = new Queue();
// deQueue is not possible on empty queue
q.deQueue();
// enQueue 5 elements
q.enQueue(1);
q.enQueue(2);
q.enQueue(3);
q.enQueue(4);
q.enQueue(5);
// 6th element can't be added to because the queue is full
q.enQueue(6);
q.display();
// deQueue removes element entered first i.e. 1
q.deQueue();
// Now we have just 4 elements
q.display();
}
}
使用數組的隊列中入隊和出隊操作的復雜度為O(1)。如果您pop(N)在 python 代碼中使用,那么復雜性可能O(n)取決于要彈出的項目的位置。
CPU調度、磁盤調度
當兩個進程之間異步傳輸數據時,隊列用于同步。例如:IO Buffers、管道、文件IO等
處理實時系統中的中斷。
呼叫中心電話系統使用隊列將呼叫他們的人按順序排列。
0基礎 0學費 15天面授
有基礎 直達就業
業余時間 高薪轉行
工作1~3年,加薪神器
工作3~5年,晉升架構
提交申請后,顧問老師會電話與您溝通安排學習