zoukankan      html  css  js  c++  java
  • 链表操作

    #include<stdio.h>
    #include<malloc.h>
    //typedef int ElemType;
    int k=1,f;
    typedef struct LNode{
        int data;
        struct LNode *next;
    }LinkList;
    void InitList(LinkList *&L){   //创建头结点
        L=(LinkList *)malloc(sizeof(LinkList));
        L->next=NULL;
    }
    void DispList(LinkList *L){//输出线性表
        LinkList *p=L->next;
        while(p!=NULL){
            printf("%d ",p->data);
            p=p->next;
        }
        printf("
    ");
    }
    int LocateElem(LinkList *L,int e){//按元素值查找
    int i=1;
        LinkList *p=L->next;
        while(p!=NULL&&p->data!=e){
            p=p->next;
            i++;
            }
        if(p==NULL)
            return(0);
        else
            return(i);
    }
    bool ListInsert(LinkList * &L,int i,int e){//插入
        LinkList *p=L,*s,*q;
        q=p;
        p=p->next;
        while(p!=NULL){
            if(p->data==i){
                s=(LinkList *)malloc(sizeof(LinkList));
                s->data=e;
                s->next=p;
                q->next=s;
                return true;
            }
            q=p;
            p=p->next;
        }
        if(p==NULL && i==-1){
                s=(LinkList *)malloc(sizeof(LinkList));
                s->data=e;
                s->next=NULL;
                q->next=s;
                return true;
        }
         return false;
    }
    void DestroyList(LinkList *&L){//销毁
        LinkList *p=L,*q=p->next;
        while(q!=NULL){
            free(p);
            p=q;
            q=p->next;
        }
        free(p);
    }
    bool ListDelete(LinkList *&L,int e){//删除
    //    int j=0;
        LinkList *p=L,*q;
        while(p!=NULL&&p->data!=e){
            q=p;
            p=p->next;
        }
        if(p==NULL)
            return false;
        else{
            q->next=p->next;
                free(p);
                return true;
        }
    }
    void ListHeBing(LinkList *&L1,LinkList *&L2){//合并
        LinkList *p=L2->next;
        while(p!=NULL){
            if(LocateElem(L1,p->data))
                p=p->next;
            else{
                ListInsert(L1,-1,p->data);
                p=p->next;
            }
        }
    }
    /*int main(){
        LinkList *h,*h1,*h2;
        int e;
        InitList(h);
        printf("ssda
    ");
        ListInsert(h,-1,3);
        ListInsert(h,-1,9);
        ListInsert(h,-1,5);
        ListInsert(h,-1,6);
        ListInsert(h,-1,11);
        ListInsert(h,-1,8);
        printf("ssda
    ");
        DispList(h);
        ListInsert(h,5,4);
        ListInsert(h,5,7);
        DispList(h);
        ListDelete(h,11);
        DispList(h);
        InitList(h1);
        ListInsert(h1,-1,1);
        ListInsert(h1,-1,2);
        ListInsert(h1,-1,4);
        ListInsert(h1,-1,9);
        ListInsert(h1,-1,10);
        ListInsert(h1,-1,18);
        ListHeBing(h,h1);
        DispList(h);
    }*/
    void CJList(LinkList *&L){
        printf("输入你要创建的链表按回车键结束:
    ");
        int n;
        char c;
        while(scanf("%d%c",&n,&c)!=EOF&&c!='
    '){
            ListInsert(*&L,-1,n);
        }
        ListInsert(*&L,-1,n);
        printf("以下是你创建的链表:
    ");
        printf("h%d: ",k);
        DispList(*&L);
        return;
    }
    int main(){
       // LinkList *h1,*h2,*h3;
       LinkList *h[50];
        int e;
        int m,n;
        bool flag;
        printf("输入对应的序号进行操作:
    ");
        printf("创建链表请扣1:
    ");
        printf("插入数据请扣2:
    ");
        printf("删除数据请扣3:
    ");
        printf("合并链表请扣4:
    ");
        printf("查看链表请扣5:
    ");
        printf("销毁链表请扣6:
    ");
        printf("退出请按0:
    ");
        while(~scanf("%d",&e)){
            if(e==1){
                InitList(h[k]);
                CJList(h[k]);
                k++;
            }
            if(e==2){
                printf("你是要对第几条链表进行插入操作?请输入一个合理的数字!!
    ");
                int y;
                scanf("%d",&y);
                printf("以下是你要插入的链表:
    ");
                DispList(h[y]);
                printf("输入两个数,第一个数是你要插入的数值,第二个是要插入哪个数值的前面:
    ");
                scanf("%d%d",&m,&n);
                flag=ListInsert(h[y],n,m);
                if(flag==true){
                    printf("插入成功!!
    ");
                    printf("以下是你插入修改后的链表:
    ");
                    printf("h%d: ",y);
                    DispList(h[y]);
                }
                else printf("插入失败!!
    ");
            }
            if(e==3){
                printf("你是要对第几条链表进行删除操作?请输入一个合理的数字!!
    ");
                int y;
                scanf("%d",&y);
                printf("以下是你要删除的链表:
    ");
                DispList(h[y]);
                printf("输入你要删除的元素:
    ");
                scanf("%d",&m);
                flag=ListDelete(h[y],m);
                if(flag==true){
                    printf("删除成功!!
    ");
                    printf("以下是你删除后的链表:
    ");
                    printf("h%d: ",y);
                    DispList(h[y]);
                }
                else printf("删除失败!!
    ");
            }
       // DestroyList(h1);
            if(e==4){
                    int m,n;
                printf("接下来进行链表合并:
    ");
                printf("你要对哪两条链表进行合并?:
    ");
                scanf("%d%d",&m,&n);
                printf("以下是你要合并的两条链表:
    ");
                 printf("h%d: ",m);
                DispList(h[m]);
                 printf("
    ");
                  printf("h%d: ",n);
                DispList(h[n]);
                //InitList(h[k]);
              //  CJList(h[k]);
              //  f=k;
              //  k++;
               // InitList(h[k]);
               // CJList(h[k]);
                ListHeBing(h[m],h[n]);
                printf("以下是你合并后的链表:
    ");
                printf("h%d: ",m);
                DispList(h[m]);
                k--;
            }
            if(e==5){
                    printf("你要查看第几条链表?请输入一个合理的数字,如果要查看所有数组请输入-1:
    ");
                    int y;
                    int i;
                    scanf("%d",&y);
                    if(y==-1){
                        for(i=1;i<k;i++){
                        printf("h%d: ",i);
                        DispList(h[i]);
                        }
                    }
                  else{
                    printf("以下是你要查看的第%d条链表:
    ",y);
                    printf("h%d: ",y);
                    DispList(h[y]);
                  }
            }
            if(e==6){
                printf("你要销毁第几条链表?请输入一个合理的数字,如果要销毁所有数组请输入-1:
    ");
                    int y;
                    int i;
                    scanf("%d",&y);
                    if(y==-1){
                        for(i=1;i<k;i++)
                            DestroyList(h[i]);
                    }
                    else{
                        DestroyList(h[y]);
                        for(i=y;i<k;i++){
                            h[i]=h[i+1];
                        k--;
                        }
                    }
            }
            if(e==0) exit(0);
             printf("
    "); printf("
    "); printf("
    "); printf("
    "); printf("
    ");
        printf("输入对应的序号进行操作:
    ");
        printf("创建链表请扣1:
    ");
        printf("插入数据请扣2:
    ");
        printf("删除数据请扣3:
    ");
        printf("合并链表请扣4:
    ");
        printf("查看链表请扣5:
    ");
        printf("销毁链表请扣6:
    ");
        printf("退出请按0:
    ");
        }
    }
  • 相关阅读:
    android —— textview解析html富文本
    android toolbar及可折叠标题栏
    dp——cf1327F
    cf1327D,E——组合数学
    技能表自查
    python 之禅 import this
    转--Python标准库之一句话概括
    python 爆破
    python -- 算法
    python 代码模板
  • 原文地址:https://www.cnblogs.com/OMG-By/p/5326512.html
Copyright © 2011-2022 走看看