实现链式存储的泛型队列
时间: 2024-03-18 21:16:03 浏览: 90
以下是实现链式存储的泛型队列的示例代码(使用C++语言):
```
template <typename T>
class QueueNode {
public:
T data;
QueueNode<T>* next;
QueueNode(T data) {
this->data = data;
next = nullptr;
}
};
template <typename T>
class Queue {
private:
QueueNode<T>* front;
QueueNode<T>* rear;
int size;
public:
Queue() {
front = nullptr;
rear = nullptr;
size = 0;
}
~Queue() {
while (front != nullptr) {
QueueNode<T>* temp = front;
front = front->next;
delete temp;
}
}
void enqueue(T data) {
QueueNode<T>* newNode = new QueueNode<T>(data);
if (rear == nullptr) {
front = newNode;
} else {
rear->next = newNode;
}
rear = newNode;
size++;
}
T dequeue() {
if (front == nullptr) {
throw std::out_of_range("Queue is empty");
}
QueueNode<T>* temp = front;
front = front->next;
T data = temp->data;
delete temp;
size--;
if (front == nullptr) {
rear = nullptr;
}
return data;
}
T peek() {
if (front == nullptr) {
throw std::out_of_range("Queue is empty");
}
return front->data;
}
bool isEmpty() {
return (front == nullptr);
}
int getSize() {
return size;
}
};
```
该队列使用泛型类型 T 来表示队列中的元素,可以存储任意类型的数据。队列内部使用链式存储结构来实现,每个节点包含一个元素和指向下一个节点的指针。队列的基本操作包括入队、出队、查看队首元素、判断队列是否为空、获取队列的大小。在入队时,如果队列为空,则新节点成为队列的首节点;否则,将新节点添加到队列尾部。在出队时,如果队列不为空,则返回队列的首节点元素,并删除该节点;否则,抛出队列为空的异常。在查看队首元素时,如果队列不为空,则返回队列的首节点元素;否则,抛出队列为空的异常。在判断队列是否为空时,如果队列为空,则返回 true;否则,返回 false。在获取队列的大小时,返回队列中元素的个数。
阅读全文