zoukankan      html  css  js  c++  java
  • c_数据结构_链表

    #include<stdio.h>
    #include<stdlib.h>
    #define ERROR 0
    #define OK 1
    #define OVERFLOW -2
    
    typedef struct Lnode{
        int data;
        struct Lnode *next;
    }LNode,*LinkList;
    //初始化一个空指针
    int InitList_L(LinkList &L){
    
        L=(LNode *)malloc(sizeof(struct Lnode));
    //    L->data=info;
        L->next=NULL;
    
        return OK;
    
    }
    //查找元素
    int Yin(LinkList L,int &r){
        LinkList p;int x=0;int j=1;int i;
        
        printf("请选择:1.继续查询
    2.结束查询
    ");
        printf("请输入选择:");
        scanf("%d",&x);
        if(x==1){
            printf("
    请选择查询元素位置:");
            scanf("%d",&i);
            p=L->next;
            while(p&&j<i){
           // printf("*****
    ");
            p=p->next;
            ++j;
            }
            if(!p||j>i){ 
            printf("
    查询位置不在列表内!!
    
    ");
            //return ERROR;
            Yin(L,r);
            }else{return ERROR;}
        //return OK;
        }
    //    printf("******");
        return OK;
    
    }
    
    int GetElem_L(LinkList L,int i,int &e){
        LinkList p;int x=0;int j=1;int r,h;
        printf("
    请选择查询元素位置:");
        scanf("%d",&i);
        p=L->next;
            
        while(p&&j<i){
       // printf("*****
    ");
        p=p->next;
        ++j;
        }
        if(!p||j>i){ 
            printf("
    查询位置不在列表内!!
    
    ");
            h=Yin(L,r);    
            if(h==0){
                return ERROR;
            }else{    
            e=p->data;
            printf("
    查找的%d位置的元素为:%d
    
    ",i,e);
            return OK;
            }
        }
        return OK;
    }
    //插入元素
    ListInser_L(LinkList &L,int i,int e){
        LinkList p,s;int j=0;
        p=L;
        printf("
    请选择插入位置:");
        scanf("%d",&i);
        printf("
    请选择插入元素:");
        scanf("%d",&e);
        while(p&&j<i-1){
            p=p->next;
            ++j;
        }
        if(!p||j>i-1) 
        {
            printf("
    插入位置不在链表长度内!!
    
    ");
            return ERROR;
        }
        s=(LNode*)malloc(sizeof(struct Lnode));
        s->data=e;
        s->next=p->next;
        p->next=s;
        return OK;
    }
    // 删除元素
    int ListDelete_L(LinkList &L,int i,int e){
        LinkList p,q;int j=0;
        p=L;
        printf("
    请输入要删除的位置:");
        scanf("%d",&i);
        while(p->next&&j<i-1){
            p=p->next;
            ++j;
        }
        if(!(p->next)||j>i-1) {
            printf("
    删除的位置不在链表长度内!!
    
    ");
            return ERROR;
        }
        q=p->next;
        p->next=q->next;
        e=q->data;
        free(q);
        return OK;
        }
    
    //创建链表
    int creatlist(LinkList &L){
        int i;
        LinkList p,q;
        if(L==NULL)
            InitList_L(L);
        q=L;
        printf("
    请输入链表长度:");
        scanf("%d",&i);
        while(i<=0){
            printf("
    输入链表长度不合法,请重新输入表长:");
            scanf("%d",&i);
        }
        printf("
    请输入%d个数:",i);
        for(i;i>0;i--){
            p=(LNode*)malloc(sizeof(struct Lnode));
            p->next=NULL;
            scanf("%d",&p->data);
            q->next=p;
            q=p;
        }
        printf("
    输入成功!!
    
    ");
        return OK;
    
    }
    //打印链表中的元素
    int pr(LinkList L){
        LinkList q;
        q=L->next;
        printf("
    表中存储元素为:
    ");
        while(q!=NULL){
            printf("%d
    ",q->data);
            q=q->next;
        }
        return OK;
    }
    //清空链表,只保留头结点
    void  ClearList(LinkList &L){   
        LinkList p;
        while(L->next){
            p=L->next;
            L->next=p->next;
             free(p);
        }
        printf("清空链表成功!!
    
    ");
        creatlist(L);
    }
    void OperateMenu(){       //操作菜单
    
        printf("--------------请选择元素处理方式---------
    
    ");
        printf("0> 退出
    
    ");
        printf("1>: 查找给定位置的数据
    
    ");
        printf("2>: 插入元素
    
    ");
        printf("3>: 删除元素
    
    ");
        printf("4>: 打印元素
    
    ");
        printf("5>: 释放原链表,重新创建新链表
    
    ");
        printf("请选择对元素的处理:");
    
        
    }
    
    void main(){
        LinkList L; int w=0,k,i=1,e=0,boo;
        L=NULL;
        printf("注:此测试过程输入值应全为数字
    
    ");
        printf("请用户选择存入数据或退出程序:
    
    ");
        printf("存入数据请输入:'1'
    
    ");
        printf("退出请选择'0'或 其它!!
    
    ");
        printf("请选择:");
        scanf("%d",&w);
        if(w==1){
            InitList_L(L);
            creatlist(L);
            OperateMenu();
            scanf("%d",&k);
            while(k){
                switch(k){
                case 0:break;
                case 1:boo=GetElem_L(L,i,e);
                    if(boo)
                        printf("查询成功!!
    
    ");
                    else
                        printf("查询失败!!
    
    ");
                    break;
                case 2:boo=ListInser_L(L,i,e);
                    if(boo)
                        printf("
    插入成功!!
    
    ");
                    else
                        printf("插入失败!!
    
    ");
                    break;
                case 3:boo=ListDelete_L(L,i,e);
                    if(boo)
                        printf("
    删除成功!!
    
    ");
                    else
                        printf("删除失败!!
    
    ");
                    break;    
                case 4:pr(L);break;
                case 5:ClearList(L);break;
                }
                OperateMenu();
                scanf("%d",&k);
            
            }
        }else{
            exit(OVERFLOW);
        }
    
    }
  • 相关阅读:
    LeetCode 1109 航班预定统计
    leetcode 138 复制带随机指针的链表
    maven导入org.apache.pdfbox
    Intellij Idea 通过svn或者git提交代码时速度慢的解决办法
    java LocalDateTime 加减当前时间
    git命令--拉取代码和切换分支
    Intellij IDEA插件Free Mybatis plugin
    MySQL 生成随机字符串 uuid
    最新版Navicat Premium v15.0.26 中文破解
    算法——二分法查找
  • 原文地址:https://www.cnblogs.com/Vera-y/p/9971236.html
Copyright © 2011-2022 走看看