一、学习要点:
1.链队列的实现不用限制队列的长度;当删除元素时,只需要改变头结点指向的首元结点(phead->next=phead->next->next),插入只改变尾节点的(pnode为新插入结点,pend->next=pnode;pend=pnode,即可)
2.头结点,首元结点,尾节点有不明白的可参考我的上一篇博客。
3.总体来说,链队列的实现比数组队列的实现要方便,而且实用。
4.结构体里面也可以有构造器;
5.第一个元素一定是插在初始化的pend->next;所以在初始化的时候一定要让phead=pend,达到让phead指向首元元素的目的。
6.c++中取反用!;不是~,切记切记切记;
二、代码:
demo092103.cpp
#include<iostream>
#include<stdlib.h>
using namespace
template<class T>
struct Node{
Node(T t):value(0),next(nullptr){};
Node();
T value;
Node<T>* next;
}
template<class T>
class Linkqueque{
public:
Linkqueque();
~Linkqueque();
bool isEmpty();
int size();
void push(T t);
bool pop();
T front();
private:
Node<T>* phead;
Node<T>*pend;
int count;
};
Linkqueque<T>::Linkqueque(){
//此处一定要有phead=pend,因为插入是插在pend的next里,故第一个元素一定在pend->next;因为第一个元素一定在初始化的pend后面,所以初始化的时候一定有phead=pend;让phead指向第一个元素,即首元元素
Node<T>* phead=new Node<T>();
pend=phead;
count=0;
}
template<class T>
Linkqueque<T>::~Linkqueque(){
while(pend->next!=nullptr){
Node<T>* pnode=new Node<T>();
pnode=pend->next;
phead=pend->next;
delete pnode;
}
}
template<class T>
void Linkqueque<T>::push<T t>{
Node<T>* pnode=new Node<T>(t);
pend->next=pnode;
pend=pnode;
count++;
}
template<class T>
bool Linkqueque<T>::pop(){
if(count==0){
return false;
}else{
Node<T>* pnode;
pnode=phead->next;
phead->next=phead->next->next;
delete pnode;
count--;
return true;
}
}
template<class T>
bool Linkqueque<T>::isEmpty(){
return count==0;
}
template<class T>
int Linkqueque<T>::size(){
return count;
}
template<class T>
T Linkqueque<T>::front(){
return (phead->next->vlaue);
}
主函数代码
main.cpp
#include<iostream>
#include<stdlib.h>
#include<string>
#include"demo092103.cpp"
using namespace std;
int main(){
Linkqueque<string> lqueque;
lqueque.push("one");
lqueque.push("two");
lqueque.push("three");
lqueque.push("four");
lqueque.push("five");
cout<<"队列大小"<<lqueque.size()<<endl;
while(!lqueque.isEmpty()){
cout<<lqueque.front()<<endl;
lqueque.pop();
}
system("pause");
return 0;
}
三、运行结果:
四、如有错误,欢迎指出,一块交流学习;