• C++链表实现


    单个节点头文件

     1 //Node.h
     2 #ifndef NODE_H
     3 #define NODE_H
     4 
     5 #include<iostream>
     6 using namespace std;
     7 
     8 class Node{
     9 public:
    10     //生成节点
    11     Node();
    12     //删除节点
    13     ~Node();
    14     //设置数据
    15     void setData(int d){*data=d;};
    16     //得到节点数据
    17     int getData(){return *data;};
    18     //链接下一节点
    19     void setNext(Node *r){next=r;};
    20     //得到节点的下一节点
    21     Node *getNext(){return next;} ;
    22     //打印数据
    23     void PrintData(){cout<<*data;};
    24 private:
    25     int *data;
    26     Node *next;
    27 };
    28 
    29 Node::Node(){
    30     data=new int;
    31     next=NULL;
    32 }
    33 
    34 Node::~Node(){
    35     delete data;
    36     next=NULL;
    37 }
    38 
    39 #endif

    链表头文件

    #ifndef LINKLIST_H
    #define LINKLIST_H
    
    #include<iostream>
    #include"Node.h"
    using namespace std;
    
    class LinkList{
    public:
        LinkList();
        ~LinkList();
        //是否为空
        bool  isEmpty();
        //清除链表
        bool  ClearList();
        //得到链表长度
        int  GetListLength() const {return length;}
        //得到元素的位置
        int  GetElementIndex(int &elem);
        //得到链表指定位置的元素
        bool  GetListElement(int index,int *elem);
        //链表插入
        bool  ListInsert(int index,int &elem);
        //链表删除
        bool  ListDelete(int index,int *elem);
        //打印链表
        void  ListPrint();
    private:
        Node *list;
        int  length;
    };
    
    LinkList::LinkList(){
        list=new Node();
        list->setData(0);
        list->setNext(NULL);
        length=0;
    }
    
    LinkList::~LinkList(){
        Node *nextNode=list;
        while(nextNode->getNext()!=NULL){
            nextNode=list->getNext();
            delete list;
            list=nextNode;
        }
        delete list;
        list=NULL;
    }
    
    bool  LinkList::isEmpty(){
        if(length==0){
            return true;
        }else{
            return false;
        }
    }
    
    bool  LinkList::ClearList(){
        if(isEmpty()){
            cout<<"List empty clear fail"<<endl;
            return false;
        }
        Node *nowNode=list->getNext();
        Node *nextNode=list->getNext();
        while(nextNode->getNext()!=NULL){
            nextNode=nextNode->getNext();
            delete nowNode;
            nowNode=nextNode;
        }
        delete nowNode;
        length=0;
        list->setNext(NULL);
        return true;
    }
    
    int LinkList::GetElementIndex(int &elem){
        Node *tempNode=list;
        for(int i=0;i<length;++i){
            tempNode=tempNode->getNext();
            if(elem==tempNode->getData()){
                return ++i;
            }
        }
        return -1;
    }
    
    bool LinkList::GetListElement(int index,int  *elem){
        if(index<0 || index>=length){
            return false;
        }
        Node *tempNode=list;
        for(int i=0;i<=index;++i){
            tempNode=tempNode->getNext();
        }
        *elem=tempNode->getData();
        return true;
    }
    
    bool LinkList::ListInsert(int index,int &elem){
        if(index<0 || index>length){
            return false;
        }
        Node *tempProNode=list;
        for(int i=0;i<index;++i){
            tempProNode=tempProNode->getNext();
        }
        Node *nowNode=new Node();
        if(nowNode==NULL){
            cout<<"new node create fail"<<endl;
            return false;
        }
        Node *temp=tempProNode->getNext();
        tempProNode->setNext(nowNode);
        nowNode->setNext(temp);
        nowNode->setData(elem);
        ++length;
        return true;
    }
    
    bool LinkList::ListDelete(int index,int *elem){
        if(index<0 || index>=length){
            return false;
        }
        Node *tempProNode=list;
        for(int i=0;i<index;++i){
            tempProNode=tempProNode->getNext();
        }
        Node *tempNode=tempProNode->getNext();
        tempProNode->setNext(tempNode->getNext());
        *elem=tempNode->getData();
        delete tempNode;
        --length;
        return true;
    }
    
    void LinkList::ListPrint(){
        if(isEmpty()){
            cout<<"List empty"<<endl;
            return ;
        }
        Node *tempNode=list->getNext();
        while(tempNode->getNext()!=NULL){
            tempNode->PrintData();
            tempNode=tempNode->getNext();
        }
        tempNode->PrintData();
        cout<<endl<<"end"<<endl;
    }
    #endif

    调用代码

    #include<iostream>
    #include<string>
    #include"LinkList.h"
    using namespace std;
    
    int main(){
        int data[10]={0,1,2,3,4,5,6,7,8,9};
        LinkList *linkList=new LinkList();
        for(int i=0;i<=5;++i){
            linkList->ListInsert(i,data[i]);
        }
        linkList->ListPrint();
        cout<<"getElementIndex:"<<linkList->GetElementIndex(data[4])<<endl;
        int getData;
        linkList->GetListElement(2,&getData);
        cout<<"getListElement:"<<getData<<endl;
        int deleteData;
        linkList->ListDelete(0,&deleteData);
        cout<<"delete data:"<<deleteData<<endl;
        linkList->ListPrint();
    
        delete linkList;
        linkList=NULL;
        system("pause");
        return 0;
    }
  • 相关阅读:
    错误:CS0234: 命名空间“System”中不存在类型或命名空间名称“Linq”的解决方法
    DotNetNuke中Membership Provider机制
    解决异常“SqlParameterCollection 只接受非空的 SqlParameter 类型对象。”
    使用 Membership.ValidateUser(Login1.UserName, Login1.Password)验证用户
    布隆过滤器应用
    Paxos在大型系统中常见的应用场景(转)
    淘宝MapReduce作业特性分析(转)
    淘宝Hadoop集群的概况(转)
    内核模块管理(转)
    Centos启动流程(转)
  • 原文地址:https://www.cnblogs.com/arno1394/p/11250636.html
Copyright © 2020-2023  润新知