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         測試數據

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