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

更新于: 2019-10-24

3K+ 次浏览

开启你的 职业生涯

通过完成课程获得认证

开始学习
广告
© . All rights reserved.