C++ 中佇列的陣列實現
佇列是一種線性資料結構,其操作順序為 FIFO(先進先出)。
陣列是一種資料結構,它包含相同資料型別的元素,儲存在連續的記憶體位置中。
在佇列中,插入和刪除操作在佇列的兩端進行。與棧相比,它的實現稍微複雜一些。
在佇列的陣列實現中,我們建立一個大小為 n 的陣列佇列,並使用兩個變數 top 和 end。
現在,最初陣列為空,即 top 和 end 都位於陣列的索引 0 處。隨著元素新增到佇列 **(插入)**,end 變數的值會增加。end 的值可以增加到 n,即陣列的最大長度。
當需要從佇列中刪除元素 **(刪除)** 時,top 變數的值會增加。top 的值可以增加到 end 的值。
佇列操作的實現
**入隊** - 它是將元素新增到佇列的操作。在將元素新增到佇列之前,我們將檢查佇列是否已滿。檢查條件結束,如果小於 n,則我們可以將元素儲存在 queue[end] 中。並使 end 增加 1。
溢位條件是指陣列已滿,即 end == n。
**出隊** - 它是刪除佇列元素的操作。在刪除佇列元素之前,我們將檢查佇列是否為空。檢查佇列是否為空的條件是檢查 top 和 end 的值。如果 top == end,則陣列為空。
如果有元素,我們將出隊陣列。透過將陣列左側的所有元素向左移動一個位置。
**隊首** - 提取佇列的第一個元素,即 array[top]。此操作僅可在陣列不為空時執行。
**顯示** - 此操作顯示佇列中的所有元素。即遍歷佇列。
演算法
ENQUEUE : Step 1 : if (end == n), print : “OVERFLOW”. Exit Step 2 : queue[end] = data and end++ DEQUEUE : Step 1 : If (top == 0), print : “empty Queue”. Exit Step 2 : shift all elements one position left. End-- ;
示例
#include <bits/stdc++.h>
using namespace std;
struct Queue {
int top, end, n;
int* queue;
Queue(int c){
top = end = 0;
n = c;
queue = new int;
}
~Queue() { delete[] queue;
}
void Enqueue(int data){
if (n == end) {
printf("\nQueue is full\n");
return;
}
else {
queue[end] = data;
end++;
}
return;
}
void Dequeue(){
if (top == end) {
printf("\nQueue is empty\n");
return;
}
else {
for (int i = 0; i < end - 1; i++) {
queue[i] = queue[i + 1];
}
end--;
}
return;
}
void Display(){
int i;
if (top == end) {
printf("\nQueue is Empty\n");
return;
}
for (i = top; i < end; i++) {
printf(" %d <-- ", queue[i]);
}
return;
}
void Front(){
if (top == end) {
printf("\nQueue is Empty\n");
return;
}
printf("\nFront Element is: %d", queue[top]);
return;
}
};
int main(void){
Queue q(4);
q.Display();
q.Enqueue(12);
q.Enqueue(89);
q.Enqueue(65);
q.Enqueue(34);
q.Display();
q.Enqueue(92);
q.Display();
q.Dequeue();
q.Dequeue();
q.Display();
q.Front();
return 0;
}輸出
Queue is Empty 12 <-- 89 <-- 65 <-- 34 <-- Queue is full 12 <-- 89 <-- 65 <-- 34 <-- 65 <-- 34 <-- Front Element is: 65
廣告
資料結構
網路
RDBMS
作業系統
Java
iOS
HTML
CSS
Android
Python
C 程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP