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