开发者社区> 问答> 正文

问: [image]20 数据结构与算法 线性表A、B,分别由单链表LA,LB存储,其中数据元素按

问: [image]20 数据结构与算法 线性表A、B,分别由单链表LA,LB存储,其中数据元素按

展开
收起
知与谁同 2018-07-15 15:34:12 2105 0
1 条回答
写回答
取消 提交回答

  • #include<stdio.h>

    #include<stdlib.h>

    #include<string.h>

    //类型定义

    typedef char ElemType;

    typedef struct Node

    { //结点类型

    ElemType data; //数据域

    struct Node *next; //指针域

    }Node, *LinkList;


    //函数声明

    LinkList *Create (LinkList *L);//生成链表

    LinkList UnionList(LinkList LA, LinkList LB, LinkList LC);//合并两个有序链表后仍有序

    void ShowList(LinkList L);//输出单链表

    void DestroyList(LinkList *L);//清除链表


    void main()

    {

    LinkList *L1,*L2,*L3;

    L1=(LinkList*)malloc(sizeof(LinkList));

    L2=(LinkList*)malloc(sizeof(LinkList));

    L3=(LinkList*)malloc(sizeof(LinkList));

    L1=Create(L1);

    ShowList(*L1);

    L2=Create(L2);

    ShowList(*L2);

    *L3=UnionList(*L1,*L2,*L3);

    ShowList(*L3);

    DestroyList(L1);

    free(L1);

    free(L2);

    free(L3);

    }


    LinkList *Create (LinkList *L)//建立一个单链表,将新结点插入表尾

    {

    Node *r, *s;

        ElemType c;

        int i,n;

        *L = (LinkList) malloc (sizeof(Node)); //为头结点分配存储空间

        r = *L; //r初值指向头结点

        printf("请输入生成链表的结点数:");

        scanf("%d",&n);getchar();//接收回车

        for (i = 1; i <= n; i ++)

        {

        printf("请输入第%d个元素:",i);  

        c=getchar(); //获取一个数据元素

        getchar();//接收回车

            s = (LinkList) malloc (sizeof(Node)); //生成一个新结点 

            s -> data = c; //将要插入数据元素的值赋给新结点的数据域

            s -> next = NULL; //链表末尾结点指针域为空

            r -> next = s; //将新结点插入到当前链表的表尾上

            r = s;     //r始终指向链表的当前表尾

        }

        return L; 

    }


    LinkList UnionList(LinkList LA, LinkList LB, LinkList LC)

    {

    Node *pa, *pb,*pc;

        pa=LA->next;

        pb=LB->next;

        pc=LA;LC=pc;//也可以写成LC=pc=LA;

        while((pa!=NULL)&&(pb!=NULL))

        {

        if(pa->data<=pb->data)

        {

        pc->next=pa;

        pc=pa;

        pa=pa->next;

        }

        else

        {

        pc->next=pb;

        pc=pb;

        pb=pb->next;

        }

        }

        pc->next=pa?pa:pb;

        free(LB);LB=NULL;

        return LC;

    }


    void ShowList(LinkList L)

    {

    Node *p;

        p=L->next;

        if(p!=NULL)

        do

        {printf("%3c",p->data);

         p=p->next;

        } while(p!=NULL);

        else printf("空链表\n");

        printf("\n");

    }

    void DestroyList(LinkList *L)

    {

    Node *p;

    if(*L==NULL){ free(L);return ;}

    else 

    p=*L;

    while(*L!=NULL)

    {

    p=*L;

    *L=(*L)->next;

    free(p);

    }

    }

    printf("链表已清除!\n");

    }

    2019-07-17 22:54:20
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
《应用型负载均衡ALB产品解读》 立即下载
阿里云网络-SLB负载均衡产品介绍 立即下载
负载均衡SLB热点问题解答 立即下载