数据结构实现一个循环队列及基本功能
时间: 2023-06-23 09:09:39 浏览: 78
循环队列是一种特殊的队列,其队尾指针指向数组的末尾时,若队头指针不在数组的开头,则可以将队列的前端空间利用起来,形成一个循环队列。下面是一个循环队列的实现代码及基本功能:
```c++
#include<iostream>
using namespace std;
#define MAXSIZE 5 //定义循环队列数组的大小
class CircleQueue
{
private:
int data[MAXSIZE]; //循环队列数组
int front, rear; //队头和队尾指针
public:
CircleQueue() //构造函数,初始化队头和队尾指针
{
front = rear = 0;
}
bool isFull() //判断队列是否已满
{
if ((rear + 1) % MAXSIZE == front)
return true;
return false;
}
bool isEmpty() //判断队列是否为空
{
if (front == rear)
return true;
return false;
}
bool enQueue(int x) //入队操作
{
if (isFull())
{
cout << "队列已满,无法插入元素!" << endl;
return false;
}
data[rear] = x;
rear = (rear + 1) % MAXSIZE;
return true;
}
int deQueue() //出队操作
{
if (isEmpty())
{
cout << "队列为空,无法删除元素!" << endl;
return -1;
}
int x = data[front];
front = (front + 1) % MAXSIZE;
return x;
}
int getFront() //获取队头元素
{
if (isEmpty())
{
cout << "队列为空,无法获取队头元素!" << endl;
return -1;
}
return data[front];
}
int getRear() //获取队尾元素
{
if (isEmpty())
{
cout << "队列为空,无法获取队尾元素!" << endl;
return -1;
}
return data[(rear - 1 + MAXSIZE) % MAXSIZE];
}
};
int main()
{
CircleQueue q;
q.enQueue(1);
q.enQueue(2);
q.enQueue(3);
q.enQueue(4);
q.enQueue(5);
q.enQueue(6);
cout << "队头元素:" << q.getFront() << endl;
cout << "队尾元素:" << q.getRear() << endl;
q.deQueue();
q.deQueue();
q.deQueue();
cout << "队头元素:" << q.getFront() << endl;
cout << "队尾元素:" << q.getRear() << endl;
q.enQueue(7);
q.enQueue(8);
cout << "队头元素:" << q.getFront() << endl;
cout << "队尾元素:" << q.getRear() << endl;
return 0;
}
```
以上代码实现了循环队列的基本功能,包括判断队列是否为空、是否已满、入队、出队、获取队头元素和获取队尾元素。在主函数中,我们通过一些操作来测试循环队列的功能,例如插入元素、删除元素、获取队头元素和队尾元素等。