zoukankan      html  css  js  c++  java
  • 两个单链表并归


    #include <stdio.h>
    #include <stdlib.h>
    #define  OK 1
    #define  ERROR  0

    typedef int ElemType,Status;

    typedef struct LNod
    {
     ElemType data;
     struct LNod *next;
     
    }LNode,*LinkList;


    //创建单链表
    void CreateList_L(LinkList &L,int n)
    {
     int i;
     LinkList p,q;
     L=(LinkList)malloc(sizeof(LNode));
     L->next = NULL;
     q=L;
     for (i=0;i<n;i++)
     {
      p=(LinkList)malloc(sizeof(LNode)); 
      scanf("%d",&p->data);
      q->next=p;
      q=p;
     }
     q->next=NULL;
    }

    //取出单链表中的某个元素
    Status GetElem_L(LinkList L,int pos,ElemType &e)
    {
     
     LinkList p=L->next;
     int j=1;
     while (p && j<pos)
     {
      p=p->next;
      j++;
     }
     if(!p)
     {
      return 0;
     }else
     {
      e=p->data;
     }
     
     return e;
    }

    //往单链表中插入一个元素
    Status ListInsert_L(LinkList &L,int pos,ElemType e)
    {
     LinkList q;
     LinkList p=L->next;
     int j=1;
     while (p&&j<pos-1)
     {
      p=p->next;
      j++;
     }
     if (!p)
     {
      return 0;
     }
     else
     {
      q=(LinkList)malloc(sizeof(LNode));
      q->data=e;
      q->next=p->next;
      p->next=q;
     }
     return 1;
    }


    //并归  充分利用前面写好的函数  GetElem_L  ListInsert_L
    //另外再实现 int LocatElemt(LinkList L,ElemType e)
    // 1 把L2的元素逐个取出来存在E中
    // 2 把E和L1的元素进行比较,看L1中有没E存在
    // 3 不存在,则把E插入到L1的后面

    //计算单链表的长度
    int len_l(LinkList L)
    {
     LinkList p;
     p=L->next;
     int j=0;
     while (p)
     {
      j++;
      p=p->next;
     }
     return j;
    }

    //把e和L的元素进行比较,看L中有没e存在
    int LocatElemt(LinkList L,ElemType e)
    {
     LinkList p=L->next;
     int Len=len_l(L);
     int j=1;
     while (j<=Len && p->data!=e)
     {
      j++;
      p=p->next;
      
     }
     if(!p)
      return 0;
     else
      return j;
     }

    //两个单链表进行并归
    void add_L(LinkList L1,LinkList L2)
    {
     int L1len=len_l(L1);
     int L2len=len_l(L2);
     int j;
     ElemType e;
     for (j=1;j<=L2len;j++)
     {
      GetElem_L(L2,j,e);
      if (LocatElemt(L1,e)==0)
      {
       ListInsert_L(L1,++L1len,e);
      } 
     }
    }

    //输出单链表
    void list_printf(LinkList L)
    {
     LinkList p;
     p=L->next;
     while (p)
     {
      printf("%d  ",p->data);
      p=p->next;
     }
    }

    void main()
    {
     LinkList L1,L2;
     printf("请输入L1单链表的值: ");
     CreateList_L(L1,4);
    // printf("L1的长度为:%d ",len_l(L1));
     printf("请输入L2单链表的值: ");
     CreateList_L(L2,3);
     printf("L1单链表的值为: ");
     list_printf(L1);
     printf(" ");
     printf("L2单链表的值为: ");
     list_printf(L2);
     printf(" ");
     printf("并归后的单链表为: ");
     add_L(L1,L2);
     list_printf(L1);
     printf(" ");
     
    }

    运行结果:

  • 相关阅读:
    ruia笔记
    一个有趣的小例子,带你入门协程模块-asyncio
    python标准库之secrets
    转载:(Mac)在bash和zsh配置环境变量path的几种方法
    mac安装mysql8.0的错误
    Mac下的安装 mongodb
    mac 安装zsh教程资料
    mac 报错Root chmod operation not permitted on file
    喝奶粉的宝宝一天喝多少水 奶粉喂养的宝宝每天要喝多少水
    洗碗机耗材:finish 亮碟 产品的选购
  • 原文地址:https://www.cnblogs.com/wangliangliang/p/3207622.html
Copyright © 2011-2022 走看看