c++队列链表模板类

/*
*队列链表模板类
*/
#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         测试数据

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章