程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> 單鏈表(C++)

單鏈表(C++)

編輯:C++入門知識

數據結構單鏈表的C++實現:


//公元2013年3月17日  
//Single List--By Paul  
 
 
#ifndef _SingleList_  
#define _SingleList_  
 
 
#include<iostream>  
using namespace std; 
template<typename Type> class SingleList; 
 
//結點類。。。  
template<typename Type> class ListNode{ 
private: 
    Type data; 
    ListNode *pnext; 
private: 
    friend typename SingleList<Type>; 
    ListNode():pnext(null){} 
    ListNode(const Type item,ListNode<Type>*next=null):data(item),pnext(next){} 
    ~ListNode() 
    { 
        pnext=null; 
    } 
public: 
    Type GetData(); 
    friend ostream& operator<< <Type>(ostream&,ListNode<Type>&); 
}; 
 
template<typename Type> Type ListNode<Type>::GetData() 

    return this->data; 

 
template<typename Type> Tostream& operator<<(ostream& os,ListNode<Type>& out) 

    os<<out.data; 
    return os; 

 
//單鏈表類  
 
template<typename Type> class SingleList 

private: 
    ListNode<Type> *head; 
public: 
    SingleList():head(new ListNode<Type>()){}; 
    ~SingleList() 
    { 
        MakeEmpty(); 
        delete head; 
    } 
    //其他的功能函數  
    void MakeEmpty(); 
    int Length(); 
    ListNode<Type> *Find(Type value,int n); 
    ListNode<Type> *Find(int n); 
    bool Insert(Type item,int n=0); 
    Type Remove(int n=0); 
    bool RemoveAll(Type item); 
    Type Get(int n); 
    void Print(); 
}; 
 
//功能函數的實現  
 
template<typename Type> void SingleList<Type>::MakeEmpty() 

    ListNode<Type> *pdel; 
    while(head->pnext!=null) 
    { 
        pdel=head->pnext; 
        head->pnext=pdel->pext; 
        delete pdel; 
    } 

 
template<typename Type> int SingleList<Type>::Length() 

    ListNode<Type> *pmove=head->pnext; 
    int count=0; 
    while(pmove!=null) 
    { 
        pmove=pmove->pnext; 
        count++; 
    } 
    return count; 

 
template<typename Type> ListNode<Type>* SingleList<Type>::Find(int n) 

    if(n<0) 
    { 
        cout<<"The N is out of boundry"<<endl; 
        return null; 
    } 
    ListNode<Type> *pmove=head->pnext; 
    for(int i=0;i<n&&pmove;i++) 
    { 
        pmove=pmove->pnext; 
    } 
    if(pmove==null) 
    { 
        cout<<"The N is out of boundary"<<endl; 
        return null; 
    } 

 
template<typename Type> ListNode<Type>* SingleList<Type>::Find(Type value,int n){ 
    if(n<1){ 
        cout<<"The n is illegal"<<endl; 
        return NULL; 
    } 
    ListNode<Type> *pmove=head; 
    int count=0; 
    while(count!=n&&pmove){ 
        pmove=pmove->pnext; 
        if(pmove->data==value){ 
            count++; 
        } 
  
    } 
    if(pmove==NULL){ 
        cout<<"can't find the element"<<endl; 
        return NULL; 
    } 
    return pmove; 

template<typename Type> bool SingleList<Type>::Insert(Type item, int n){ 
    if(n<0){ 
        cout<<"The n is illegal"<<endl; 
        return 0; 
    } 
    ListNode<Type> *pmove=head; 
    ListNode<Type> *pnode=new ListNode<Type>(item); 
    if(pnode==NULL){ 
        cout<<"Application error!"<<endl; 
        return 0; 
    } 
    for(int i=0;i<n&&pmove;i++){ 
        pmove=pmove->pnext; 
    } 
    if(pmove==null){ 
        cout<<"the n is illegal"<<endl; 
        return 0; 
    } 
    pnode->pnext=pmove->pnext; 
    pmove->pnext=pnode; 
    return 1; 

 
#endif  

//公元2013年3月17日
//Single List--By Paul


#ifndef _SingleList_
#define _SingleList_


#include<iostream>
using namespace std;
template<typename Type> class SingleList;

//結點類。。。
template<typename Type> class ListNode{
private:
 Type data;
 ListNode *pnext;
private:
 friend typename SingleList<Type>;
 ListNode():pnext(null){}
 ListNode(const Type item,ListNode<Type>*next=null):data(item),pnext(next){}
 ~ListNode()
 {
  pnext=null;
 }
public:
 Type GetData();
 friend ostream& operator<< <Type>(ostream&,ListNode<Type>&);
};

template<typename Type> Type ListNode<Type>::GetData()
{
 return this->data;
}

template<typename Type> Tostream& operator<<(ostream& os,ListNode<Type>& out)
{
 os<<out.data;
 return os;
}

//單鏈表類

template<typename Type> class SingleList
{
private:
 ListNode<Type> *head;
public:
 SingleList():head(new ListNode<Type>()){};
 ~SingleList()
 {
  MakeEmpty();
  delete head;
 }
 //其他的功能函數
 void MakeEmpty();
 int Length();
 ListNode<Type> *Find(Type value,int n);
 ListNode<Type> *Find(int n);
 bool Insert(Type item,int n=0);
 Type Remove(int n=0);
 bool RemoveAll(Type item);
 Type Get(int n);
 void Print();
};

//功能函數的實現

template<typename Type> void SingleList<Type>::MakeEmpty()
{
 ListNode<Type> *pdel;
 while(head->pnext!=null)
 {
  pdel=head->pnext;
  head->pnext=pdel->pext;
  delete pdel;
 }
}

template<typename Type> int SingleList<Type>::Length()
{
 ListNode<Type> *pmove=head->pnext;
 int count=0;
 while(pmove!=null)
 {
  pmove=pmove->pnext;
  count++;
 }
 return count;
}

template<typename Type> ListNode<Type>* SingleList<Type>::Find(int n)
{
 if(n<0)
 {
  cout<<"The N is out of boundry"<<endl;
  return null;
 }
 ListNode<Type> *pmove=head->pnext;
 for(int i=0;i<n&&pmove;i++)
 {
  pmove=pmove->pnext;
 }
 if(pmove==null)
 {
  cout<<"The N is out of boundary"<<endl;
  return null;
 }
}

template<typename Type> ListNode<Type>* SingleList<Type>::Find(Type value,int n){
    if(n<1){
        cout<<"The n is illegal"<<endl;
        return NULL;
    }
    ListNode<Type> *pmove=head;
    int count=0;
    while(count!=n&&pmove){
        pmove=pmove->pnext;
        if(pmove->data==value){
            count++;
        }
 
    }
    if(pmove==NULL){
        cout<<"can't find the element"<<endl;
        return NULL;
    }
    return pmove;
}
template<typename Type> bool SingleList<Type>::Insert(Type item, int n){
    if(n<0){
        cout<<"The n is illegal"<<endl;
        return 0;
    }
    ListNode<Type> *pmove=head;
    ListNode<Type> *pnode=new ListNode<Type>(item);
    if(pnode==NULL){
        cout<<"Application error!"<<endl;
        return 0;
    }
    for(int i=0;i<n&&pmove;i++){
        pmove=pmove->pnext;
    }
    if(pmove==null){
        cout<<"the n is illegal"<<endl;
        return 0;
    }
    pnode->pnext=pmove->pnext;
    pmove->pnext=pnode;
    return 1;
}

#endif


 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved