请为我写一个用数组实现的队列来修改我的代码
时间: 2024-10-24 21:08:20 浏览: 10
VBS 脚本中的字典、动态数组、队列和堆栈实现代码
为了用数组实现一个队列,我们可以使用循环数组(Circular Array)的概念,这样在数组的一端添加元素,在另一端删除元素,能保持较高的效率。下面是使用数组替代链表实现的一个简单队列结构:
```cpp
#include <iostream>
using namespace std;
#define QUEUE_SIZE 10 // 定义队列的固定大小
#define OVERFLOW (-1) // 标记队列已满
class QueueArray
{
private:
int capacity;
int front;
int rear;
int data[QUEUE_SIZE]; // 数组存储队列元素
public:
QueueArray(int size = QUEUE_SIZE)
{
capacity = size;
front = rear = -1;
}
bool isEmpty() const
{
return front == rear;
}
bool isFull() const
{
return rear == (front + 1) % capacity; // 如果 rear 加一等于 front 对于 capacity 取模,说明已满
}
void enqueue(int value) // 入队
{
if (isFull())
throw overflow_error("Queue is full");
if (rear == front)
front = 0;
else
rear = (rear + 1) % capacity;
data[rear] = value;
}
int dequeue() // 出队
{
if (isEmpty())
throw underflow_error("Queue is empty");
int removedValue = data[front];
if (front == rear)
front = rear = -1;
else
front = (front + 1) % capacity;
return removedValue;
}
int Front() const // 获取队头值
{
if (isEmpty())
throw underflow_error("Queue is empty");
return data[front];
}
int Rear() const // 获取队尾值
{
if (isEmpty())
throw underflow_error("Queue is empty");
return data[rear];
}
int Size() const // 返回队列长度
{
return rear >= front ? rear - front + 1 : capacity - front - rear;
}
};
int main()
{
QueueArray q;
// 使用q.enqueue(), q.dequeue(), q.Front(), q.Rear(), q.Size()等方法操作队列
// 示例:
for (int i = 0; i < 10; ++i)
q.enqueue(i);
while (!q.isEmpty())
{
cout << "Dequeued: " << q.dequeue() << endl;
}
return 0;
}
```
在这个实现中,我们使用`enqueue`函数入队,`dequeue`函数出队,并且提供了`Front()`和`Rear()`来获取队头和队尾元素。注意,当队列满或空时,我们需要抛出异常来表示错误状态。
阅读全文