队列是一种线性数据结构,其中的操作顺序为FIFO(先进先出)。
数组是一种数据结构,其中包含存储在连续内存位置中的相同数据类型的元素。
在队列中,插入和删除操作在队列的相对两端进行。与堆栈相比,实现要复杂一些。
在队列的数组实现中,我们创建大小为n的数组队列,其中两个变量分别为top和end。
现在,最初,数组为空,即top和end都在数组的0个索引处。随着元素添加到队列(插入),最终变量的值也增加。end的值最多可以增加到n,即数组的最大长度。
当要从队列中删除元素(删除)时,顶部变量的值将增加。top的值可以上升到end的值。
入队-这是将元素添加到队列的操作。在将元素添加到队列之前,我们将检查队列是否已满。检查条件是否结束,如果小于n,则可以将元素存储在queue [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