C ++中队列的数组实现
队列是一种线性数据结构,其中的操作顺序为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