21xrx.com
2024-05-20 10:49:20 Monday
登录
文章检索 我的文章 写文章
C++实现循环队列
2023-07-06 16:39:40 深夜i     --     --
C++ 循环队列 实现

循环队列是一种常见的数据结构,可以很好地解决队列的溢出问题,大多数编程语言都提供了实现循环队列的方法。其中,C++语言可以使用数组来实现循环队列。

在C++中,首先需要定义一个结构体来表示队列,包含队列的大小、队头指针、队尾指针以及存储元素的数组。在队列为空时,队头指针和队尾指针应该指向同一个位置,否则队列中的元素会被遗漏。

在实现入队和出队操作时,首先需要判断队列是否已满或为空,若满则入队失败,若空则出队失败。入队时将元素插入队尾,并将队尾指针向后移动,出队时将队头元素删除,并将队头指针向后移动。在移动指针时需要考虑边界问题,即指针是否到达数组的末尾。

下面是使用C++数组实现循环队列的示例:


#include<iostream>

using namespace std;

const int MAXSIZE = 20; //队列的最大容量

struct Queue {

  int front; //队头指针

  int rear; //队尾指针

  int data[MAXSIZE]; //存储元素的数组

};

void InitQueue(Queue& Q)

  Q.front = Q.rear = 0; //初始化队头和队尾指针

bool EnQueue(Queue& Q, int elem) {

  if ((Q.rear + 1) % MAXSIZE == Q.front) //队列已满

    return false;

  else {

    Q.data[Q.rear] = elem; //将元素插入队尾

    Q.rear = (Q.rear + 1) % MAXSIZE; //将队尾指针向后移动

    return true;

  }

}

bool DeQueue(Queue& Q, int& elem) {

  if (Q.front == Q.rear) //队列为空

    return false;

  else {

    elem = Q.data[Q.front]; //取出队头元素

    Q.front = (Q.front + 1) % MAXSIZE; //将队头指针向后移动

    return true;

  }

}

int main() {

  Queue Q;

  InitQueue(Q);

  for (int i = 0; i < 18; i++)

    EnQueue(Q, i); //入队

  int elem;

  DeQueue(Q, elem); //出队

  cout << "出队元素为:" << elem << endl;

  EnQueue(Q, 18); //入队

  return 0;

}

在以上示例中,使用数组存储队列元素,并将队列最大容量设为20。初始化队列时,队头和队尾指针都指向数组的起始位置。入队操作时,判断队列是否已满,若未满则将元素插入队尾并将队尾指针向后移动;出队操作时,判断队列是否为空,若非空则取出队头元素并将队头指针向后移动。

循环队列的实现比普通队列更加高效,能够很好地满足各种应用场景的需求。在编写代码时需要注意边界问题,以免出现数组越界或队列混乱等问题。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复