/*
*隊列鏈表模板類
*/
#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++隊列鏈表模板類
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.