尝试用C++代码实现普通队列,并完成如下操作 (1)输入1-10的数字组成普通线性队列; (2)判断此时队列的队首元素; (3)打印出队列操作后的队首元素; (4)由于普通线性队列的限制,此时尝试使用循环队列来解决上述问题。
时间: 2024-11-23 20:50:31 浏览: 6
瑞萨RA2L1实现环形队列的UART收发数据(e2 studio开发环境_FSP库驱动).zip
在C++中,我们可以使用`std::queue`模板类来实现普通队列,但为了满足你提到的要求,我们将自定义一个简单的队列结构,包括数组作为存储容器和头尾指针。这里是一个基础的实现:
```cpp
#include <iostream>
using namespace std;
#define QUEUE_SIZE 10
// 自定义队列结构
class Queue {
private:
int data[QUEUE_SIZE];
int front; // 队首元素索引
int rear; // 队尾元素索引
public:
Queue() { front = rear = -1; } // 初始化为空队列
bool isEmpty() const { return front == rear; }
void enqueue(int value) {
if (rear + 1 == QUEUE_SIZE) {
// 如果队满,转换为循环队列
rear = (rear + 1) % QUEUE_SIZE;
}
data[++rear] = value;
}
int dequeue() {
if (isEmpty()) {
throw "Queue is empty";
}
int value = data[front];
front = (front + 1) % QUEUE_SIZE;
return value;
}
// 判断队首元素并打印
void displayFront() {
if (!isEmpty()) {
cout << "Queue front element: " << data[front] << endl;
} else {
cout << "Queue is empty." << endl;
}
}
};
int main() {
Queue queue;
for (int i = 1; i <= 10; ++i) {
queue.enqueue(i);
queue.displayFront(); // 操作后立即显示队首元素
}
try {
queue.dequeue();
queue.displayFront();
} catch (const char* msg) {
cerr << msg << endl;
}
return 0;
}
```
这个程序首先创建了一个大小为10的队列,然后从1到10逐个入队。每次入队后都会立即查看队首元素并打印。在尝试从空队列中删除元素时,会抛出异常。
注意这是对循环队列的一个简化实现,实际应用中可能需要更复杂的边界检查和错误处理。
阅读全文