尝试用c++代码实现普通队列,并完成如下操作 (1)输入1-10的数字组成普通线性队列; (2)判断此时队列的队首元素; (3)打印出队列操作后的队首元素; (4)由于普通线性队列的限制,此时尝试使用循环队列来解决上述问题。
时间: 2024-11-22 21:44:36 浏览: 14
在 C++ 中,我们可以使用 `std::queue` 类模板来实现普通队列,如果需要自定义队列,可以创建一个简单的队列结构体。这里我将展示如何使用标准库中的 `std::queue` 和 `std::stack` 来分别实现普通队列和循环队列。
首先,我们定义一个普通队列的示例:
```cpp
#include <iostream>
#include <queue>
// 普通队列示例
class LinearQueue {
private:
std::queue<int> queue;
public:
void enqueue(int value) { queue.push(value); }
int dequeue() {
if (queue.empty()) throw std::runtime_error("Queue is empty.");
return queue.front(); // 获取队首元素并移除
}
bool isEmpty() const { return queue.empty(); }
};
int main() {
LinearQueue linearQueue;
for (int i = 1; i <= 10; ++i) {
linearQueue.enqueue(i);
std::cout << "Enqueued: " << i << std::endl;
}
try {
int frontElement = linearQueue.dequeue();
std::cout << "Dequeued from linear queue: " << frontElement << std::endl;
} catch (const std::exception& e) {
std::cerr << "Error: " << e.what() << std::endl;
}
return 0;
}
```
然后,我们来看循环队列的实现(假设它是一个固定的大小比如 10,超过这个大小就从头开始):
```cpp
#include <iostream>
#include <queue>
// 循环队列示例
class CircularQueue {
private:
int capacity;
std::queue<int> queue;
int head, tail;
void resize() {
if (tail == head + capacity) {
head = 0;
} else if (head > tail) {
head = 0;
tail = tail % capacity;
}
}
public:
CircularQueue(int size) : capacity(size), head(0), tail(0) {}
void enqueue(int value) {
resize();
queue.push(value);
tail = (tail + 1) % capacity;
}
int dequeue() {
if (isEmpty()) throw std::runtime_error("Queue is empty.");
int item = queue.front();
queue.pop();
if (queue.empty()) {
head++;
}
return item;
}
bool isEmpty() const { return queue.empty(); && head == tail; }
};
int main() {
CircularQueue circularQueue(10);
for (int i = 1; i <= 10; ++i) {
circularQueue.enqueue(i);
}
try {
int frontElement = circularQueue.dequeue();
std::cout << "Dequeued from circular queue: " << frontElement << std::endl;
} catch (const std::exception& e) {
std::cerr << "Error: " << e.what() << std::endl;
}
return 0;
}
```
阅读全文