/*
*队列链表模板类
*/
#include<stdio.h>
#include<iostream>
using namespace std;
template <class T>
class Node{
private:
Node<T> *next; //指向后继的节点的指针
public:
T data; //数据域
Node(const T &item=0,Node<T> *ptrnext=NULL); //构造函数
void InsertAfter(Node<T> *p);//在本节点之后插入一个同类型的节点
Node<T> *DeleteAfter(void); //删除节点的后继节点,并返回其地址
Node<T> *NextNode(void) const; //获取后续节点的地址
};
template<class T>
Node<T>::Node(const T &item,Node<T> *ptrnext):data(item){next=ptrnext;}
template<class T>
void Node<T>::InsertAfter(Node<T> *p){p->next=next;next=p;}
template<class T>
Node<T> *Node<T>::DeleteAfter(void){
Node<T> *ptem;
ptem=next;
if(next==NULL){
return NULL;
}
next=next->next;
return ptem;
}
template<class T>
Node<T> *Node<T>::NextNode(void) const{
return next;
}
template<class T>
class list:public Node<T>{ //链表类模板
Node<T> *head; //头指针
Node<T> *currt; //尾指针
Node<T> *ptemp; //临时指针用于链表的操作
public:
list(){ //构造函数
Node<T> *p=new Node<T>;
head=currt=ptemp=p;
}
void listInsertAfter(Node<T> *p){ //插入节点
currt->InsertAfter(p);
currt=p;
}
void listShowNode(){ //输出链表
ptemp=head->NextNode();
while(ptemp!=NULL){
cout<<ptemp->data<<" ";
ptemp=ptemp->NextNode();
}
cout<<endl;
}
void removeNode(T data1){ //删除节点
ptemp=head;
while(ptemp->NextNode()->data!=data1&&ptemp->NextNode()!=currt){
ptemp=ptemp->NextNode();
}
if(ptemp->NextNode()==currt){
cout<<"未找到你要删除的节点"<<endl;
}else{
ptemp->DeleteAfter();
}
}
void listSort() //从大到小冒泡排序
{
Node<T> *ptemp1=head->NextNode();
while(ptemp1->NextNode()!=currt){
ptemp=head->NextNode();
while(ptemp->NextNode()!=currt){
if(ptemp->data<ptemp->NextNode()->data)
{
T t=ptemp->data;
ptemp->data=ptemp->NextNode()->data;
ptemp->NextNode()->data=t;
}
ptemp=ptemp->NextNode();
}
ptemp1=ptemp1->NextNode();
}
}
T listSearch(T data2)
{
ptemp=head->NextNode();
while(ptemp->NextNode()->data!=data2&&ptemp->NextNode()!=currt){
ptemp=ptemp->NextNode();
}
if(ptemp->NextNode()==currt){
cout<<"未找到你要查找的数据"<<endl;
return 0;
}else{
return ptemp->NextNode()->data;
}
}
};
int main()
{
list<int> list;
int i;
cin>>i;
while(i){
list.listInsertAfter(new Node<int>(i));
cin>>i;
}
list.listShowNode();
list.removeNode(10);
list.listShowNode();
list.listSort();
list.listShowNode();
cout<<list.listSearch(11)<<endl;
list.listInsertAfter(new Node<int>(10));
list.listShowNode();
return 0;
}
// 1 3 4 6 8 12 2 7 10 5 11 9 0 测试数据
c++队列链表模板类
最新推荐文章于 2023-03-19 14:53:47 发布