根据数据结构和类模板知识,定义一个通用队列(先进先出)类并加以实现,编写主函数进行测试
时间: 2024-03-24 22:41:25 浏览: 38
好的,根据您的要求,我来为您定义一个通用队列类并实现它。
```cpp
#include <iostream>
#include <stdexcept>
using namespace std;
template <typename T>
class Queue {
private:
struct Node {
T data;
Node* next;
Node(T d): data(d), next(nullptr) {}
};
Node* front;
Node* rear;
int size;
public:
Queue(): front(nullptr), rear(nullptr), size(0) {}
~Queue() {
while (front != nullptr) {
Node* temp = front;
front = front->next;
delete temp;
}
rear = nullptr;
size = 0;
}
void enqueue(T data) {
Node* temp = new Node(data);
if (rear == nullptr) {
front = temp;
rear = temp;
} else {
rear->next = temp;
rear = rear->next;
}
++size;
}
T dequeue() {
if (front == nullptr) {
throw out_of_range("Queue is empty");
} else {
Node* temp = front;
T data = temp->data;
front = front->next;
delete temp;
--size;
if (front == nullptr) {
rear = nullptr;
}
return data;
}
}
bool empty() const {
return (front == nullptr);
}
int getSize() const {
return size;
}
};
```
上面的代码中,我们定义了一个模板类 Queue,该类有两个指针 front 和 rear,分别指向队头和队尾。同时,我们还定义了一个结构体 Node,用于存储队列节点的数据和下一个节点的指针。
类中的 enqueue 函数用于向队列中插入元素,dequeue 函数用于从队列中取出元素。如果队列为空,dequeue 函数将抛出一个 out_of_range 异常。同时,我们还提供了 empty 函数和 getSize 函数,分别用于判断队列是否为空和获取队列的大小。
下面是一个简单的测试程序:
```cpp
int main() {
Queue<int> q;
q.enqueue(1);
q.enqueue(2);
q.enqueue(3);
cout << "队列大小:" << q.getSize() << endl;
cout << q.dequeue() << endl;
cout << q.dequeue() << endl;
cout << q.dequeue() << endl;
cout << "队列是否为空:" << q.empty() << endl;
return 0;
}
```
输出结果为:
```
队列大小:3
1
2
3
队列是否为空:1
```
希望这个通用队列类能够满足您的需求。