当前位置:编程学习 > 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 ty

补充:软件开发 , C++ ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,