1、首先构造一个带头节点的空单链队列;2、在构造的空单链队列上进行入队运算,并将入队后队列中内容输出;3、在已经入队的队列上进行出队运算,并将出队后的结果用变量e返回,并输出出栈,按照这个要求写一个单链队列的实现的C++代码 已发送电子邮件. 1、首先构造一个带头节点的空单链队列;2、在构造的空单链队列上进行入队运算,并将入队后队列中内容输出;3、在已经入队的队列上进行出队运算,并将出队后的结果用变量e返回,并输出出栈,按照这个要求写一个单链队列的实现的C++代码
时间: 2024-02-21 22:58:33 浏览: 76
以下是单链队列的实现代码:
```c++
#include<iostream>
using namespace std;
template<typename T>
class Queue{
private:
struct Node{
T data;
Node* next;
Node():next(nullptr){}
Node(T x, Node* p = nullptr):data(x), next(p){}
};
Node* frontNode; //队头指针
Node* rearNode; //队尾指针
public:
Queue(){
frontNode = rearNode = new Node; //构造一个带头结点的空队列
}
~Queue(){
while(frontNode){
Node* p = frontNode;
frontNode = p->next;
delete p;
}
}
bool empty(){
return frontNode == rearNode;
}
void push(T x){
rearNode->next = new Node(x);
rearNode = rearNode->next;
}
bool pop(T& e){
if(empty()) return false;
Node* p = frontNode->next;
e = p->data;
frontNode->next = p->next;
if(rearNode == p) rearNode = frontNode;
delete p;
return true;
}
void display(){
Node* p = frontNode->next;
while(p){
cout << p->data << " ";
p = p->next;
}
cout << endl;
}
};
int main(){
Queue<int> q;
for(int i = 1; i <= 5; i++){
q.push(i);
}
q.display();
int e;
while(q.pop(e)){
cout << "pop " << e << endl;
}
return 0;
}
```
在这个实现中,我们使用了模板类来实现通用的队列数据结构。其中,我们使用了结构体来定义队列节点,节点包括数据和指向下一个节点的指针。我们使用了两个指针来维护队列的头和尾,并且在队列构造函数中,我们构造了一个带头结点的空队列。
在入队操作中,我们使用了尾插法。在出队操作中,我们首先判断队列是否为空,如果为空则返回 false;否则,我们将头结点的 next 指针指向队头的下一个节点,然后删除头结点的下一个节点,并将头结点的 next 指向下一个节点的 next。
最后,我们编写了一个简单的测试程序,用于测试队列的各种操作是否正确。
阅读全文