c++只有一个队列头指针不设队列尾指针实现队列判空判满入队出队代码
时间: 2024-09-24 14:06:51 浏览: 36
在C++中,如果只使用单个头指针来表示队列,并且不维护队列尾指针,那么我们需要手动跟踪队列的起始位置和当前元素的位置。这种实现方式通常被称为“链式队列”或“动态数组队列”,当队列大小固定时可以简化。
下面是一个简单的示例,说明如何实现一个基于链表的循环队列:
```cpp
#include <iostream>
// 链表节点结构体
struct Node {
int data;
Node* next;
};
class Queue {
private:
Node* front; // 队首指针
Node* rear; // 替代队尾的概念,指向最后一个元素之后
const int capacity; // 容量
public:
Queue(int size) : front(nullptr), rear(nullptr), capacity(size) {}
bool is_empty() const { return front == nullptr; }
bool is_full() const { return (rear + 1) % capacity == front; }
void enqueue(int value) {
if (is_full()) {
std::cout << "Queue is full!\n";
return;
}
Node* newNode = new Node{value};
if (front == nullptr) {
front = rear = newNode;
} else {
newNode->next = front;
front = newNode;
}
}
int dequeue() {
if (is_empty()) {
std::cout << "Queue is empty!\n";
return -1; // 返回特殊值,表示无法操作
}
int removedValue = front->data;
Node* temp = front;
front = front->next;
// 如果删除的是最后一个元素,更新rear指针
if (front == rear)
rear = nullptr;
delete temp;
return removedValue;
}
void display() const {
if (is_empty())
std::cout << "Queue is empty.\n";
else {
Node* current = front;
while (current != nullptr) {
std::cout << current->data << " ";
current = current->next;
}
std::cout << "\n";
}
}
};
int main() {
Queue queue(5);
queue.enqueue(10);
queue.enqueue(20);
queue.display(); // 输出: 10 20
queue.dequeue();
queue.display(); // 输出: 20
queue.enqueue(30); // 这里会提示队列已满
return 0;
}
```
阅读全文