zoukankan      html  css  js  c++  java
  • 链表数据结构(C/C++语言实现)

    注意:没有使用malloc和free;加了一个头文件,用于清屏和暂停;还有就是一个错误特别容易被忽略,那就是主函数中声明了LinkList p,然后就直接创建链表,忘了给p分配空间。一定要先初始化链表再建立。以下代码说白了就是一个个的函数堆出来的,只是要注意函数的参数有时候有引用符&,有时候没有,我总结了一个便于记忆的小技巧:如果你想要对链表做出任何改变,请一定加上&;如果你对链表不想做出改变,就可以不用加,无论你加还是不加,为了保险,可以都加上。如果擅长用指针的话,就忽略从此段话!!!!!

    #include<iostream>
    #include<cstdlib>
    using namespace std;
    
    struct LNode{
        int data;
        LNode* next;
    };
    typedef LNode *LinkList;
    
    //函数声明
    void show();
    void InitList(LinkList &L);
    int CreateList(LinkList &L,int n);
    int InsertList(LinkList &L,int index,int e);
    string GetElem(LinkList L,int index,int &e);
    int deleteList(LinkList &L,int index,int &e);
    void PrintList(LinkList L);
    
    int main(){
        int action,length,index,result,e;
        string res;
        LinkList L;
        show();
        while(cin>>action){
            switch(action){
    
                case 1://初始化链表
                    system("cls");
                    InitList(L);
                    break;
    
                case 2://建立链表
                    system("cls");
                    cout<<"请输入链表的长度:"<<endl;
                    cin>>length;
                    result=CreateList(L,length);
                    if(!result){
                        cout<<"创建链表失败!"<<endl;
                    } else {
                        cout<<"创建链表成功!"<<endl;
                    }
                    break;
    
                case 3://向链表中插入数据
                    system("cls");
                    cout<<"请输入想要插入的位置和插入元素的值:"<<endl;
                    cin>>index>>e;
                    InsertList(L,index,e);
                    break;
    
                case 4://获取索引为index的元素值
                    system("cls");
                    cout<<"请输入索引:"<<endl;
                    cin>>index;
                    res=GetElem(L,index,e);
                    if(res=="yes"){
                        cout<<"第"<<index<<"个数是"<<e<<endl;
                    } else {
                        cout<<"未找到该索引的值"<<endl;
                    }
                    break;
    
                case 5://删除索引为index的值
                    system("cls");
                    cout<<"请输入想要删除的数的索引:"<<endl;
                    cin>>index;
                    deleteList(L,index,e);
                    cout<<"第"<<index<<"个元素已经被删除!"<<endl;
                    break;
    
                case 6://打印链表
                    system("cls");
                    cout<<"链表内容为:"<<endl;
                    PrintList(L);
                    break;
    
                case 7://退出
                    return 0;
            }
            system("pause");//暂停
            system("cls");//清屏
            show();
        }
    }
    
    //主界面
    void show(){
        cout<<"+----------------------------------------+"<<endl;
        cout<<"|                                        |"<<endl;
        cout<<"|            1->初始化链表               |"<<endl;
        cout<<"|            2->创建链表                 |"<<endl;
        cout<<"|            3->插入结点                 |"<<endl;
        cout<<"|            4->查找结点                 |"<<endl;
        cout<<"|            5->删除节点                 |"<<endl;
        cout<<"|            6->打印链表                 |"<<endl;
        cout<<"|            7->退出                     |"<<endl;
        cout<<"|                                        |"<<endl;
        cout<<"+----------------------------------------+"<<endl;
    }
    
    //初始化链表
    void InitList(LinkList &L){
        L=new LNode;
        cout<<"链表初始化成功!"<<endl;
    }
    
    //创建链表
    //尾插法,最先进入的元素在最末尾
    //int CreateList(LinkList &L,int n){
    //    cout<<"请依次输入结点的值:"<<endl;
    //    L->next=NULL;
    //    int i;
    //    for(i=0;i<n;i++){
    //        LinkList p=new LNode;
    //        cin>>p->data;
    //        p->next=L->next;
    //        L->next=p;
    //    }
    //    if(i!=n){
    //        return 0;//失败
    //    } else {
    //        return 1;//成功
    //    }
    //}
    
    //正序创建,按照输入顺序存储
    int CreateList(LinkList &L,int length){
        cout<<"请依次输入结点的值:"<<endl;
        LinkList p,q;
        L->next=NULL;
        p=L;
        for(int i=0,x;i<length;i++){
            LinkList q=new LNode;
            cin>>x;
            q->data=x;
            p->next=q;
            p=p->next;
        }
        p->next=NULL;
        return 1;
    }
    
    
    
    //获取第i个结点的值
    string GetElem(LinkList L,int i,int &e){
        LinkList p;
        p=L->next;
        int j=1;
        while(p&&j<i){
            p=p->next;
            j++;
        }
        if(!p||j>i){
            return "no";//未找到
        }  else {
            e=p->data;
            return "yes";//找到
        }
    }
    
    //将值为e的结点插入到第i个位置
    int InsertList(LinkList &L,int i,int e){
        LinkList p;
        p=L;
        int j=0;
        while(p&&j<i-1){
            p=p->next;
            j++;
        }
        if(!p||j>i-1){
            return 0;   //失败
        } else {
            LinkList s=new LNode;
            s->data=e;
            s->next=p->next;
            p->next=s;
            return 1;//成功
        }
    }
    
    //删除第i个结点,并将结点的值保存到e中
    int deleteList(LinkList &L,int i,int &e){
        LinkList p,q;
        p=L;
        int j=0;
        while(p->next&&j<i-1){
           p=p->next;
           j++;
        }
        if(!(p->next)&&j>i-1){
            return 0;
        }
        q=p->next;
        p->next=q->next;
        e=q->data;
        delete q;//释放q结点,节约空间
        return e;
    }
    
    //打印链表
    void PrintList(LinkList L){
        LinkList p;
        p=L;
        while(p->next){
            p=p->next;
            cout<<p->data<<" ";
        }
        cout<<endl;
    }
    

      

      

  • 相关阅读:
    怎么在ubuntu上运行php代码?
    html5中的meta标签
    怎么写jquery插件
    InnoDB和Foreign KEY Constraints
    Hadoop 管理工具HUE配置-filebrowser配置
    Ubuntu 14.10 下Hadoop HttpFS 配置
    Hadoop 管理工具HUE配置-Yarn Resource Manager HA配置
    Hadoop 管理工具HUE配置
    Spark 在Hadoop HA下配置HistoryServer问题
    Ubuntu 14.10 下安装Synergy,不同电脑之间公用一套键盘鼠标
  • 原文地址:https://www.cnblogs.com/-beyond/p/5948798.html
Copyright © 2011-2022 走看看