线性表的合并

Posted wwww2

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了线性表的合并相关的知识,希望对你有一定的参考价值。

一般集合的并集问题

【问题描述】

已知两个集合A与B,现要求一个新的集合A=AUB;

例如:A=(1,2,4,6,7),B=(2,4,8,9);

        合并后   A=(1,2,4,6,7,8,9)

 

1.创建结点

技术图片
1 typedef struct Lnode
2 
3      int data;
4      struct Lnode * next;
5 
6 Lnode,*PLnode;
View Code

2.创建线性表

技术图片
 1 PLnode createList(PLnode L)
 2 
 3     L = (PLnode)malloc(sizeof(Lnode));
 4     PLnode Ptail = L;
 5     L->next = NULL;
 6 
 7     printf("input length:\n");
 8     scanf("%d",&L->data);
 9 
10     for(int i = 1;i<=L->data;i++)
11     
12         PLnode pnew = (PLnode)malloc(sizeof(Lnode));
13         printf("input data:\n");
14         scanf("%d",&pnew->data);
15 
16         Ptail->next = pnew;
17         Ptail = pnew;
18         Ptail->next = NULL;
19 
20     
21     return L;
22 
View Code

3.从LA中查找元素e

技术图片
 1 bool locateElem(PLnode LA,int e)
 2 
 3     PLnode p = LA;
 4     for(int i =1;i<=LA->data;i++)
 5     
 6         p = p->next;
 7         if(p->data == e)
 8         
 9             return false;     //如果有相同元素返回false
10         
11     
12     return true;
13 
View Code

4.插入操作

技术图片
 1 void insertList(PLnode LA,int e)
 2 
 3     PLnode p = LA;
 4 
 5     for(int i=1;i<=LA->data;i++)
 6     
 7         p = p->next;
 8     
 9 
10     PLnode pnew = new Lnode;
11     pnew->data = e;
12     p->next = pnew;
13     pnew->next=NULL;
14     LA->data++;            //长度增加
15 
View Code

5.合并

技术图片
 1 void mergeList(PLnode LA,PLnode LB)
 2 
 3     int len2 = LB->data;
 4 
 5     PLnode p = LB;
 6     for(int i=1;i<=len2;i++)
 7     
 8       p = p->next;
 9       if(locateElem(LA,p->data))    //如果没有相同的元素就插入
10       
11           insertList(LA,p->data);
12       
13     
14 
View Code

6.完整代码

技术图片
  1 #include<stdio.h>
  2 #include<stdlib.h>
  3 
  4 typedef struct Lnode
  5 
  6      int data;
  7      struct Lnode * next;
  8 
  9 Lnode,*PLnode;
 10 
 11 PLnode createList(PLnode L);
 12 void traverse(PLnode L);
 13 void insertList(PLnode LA,int e);
 14 bool locateElem(PLnode LA,int e);
 15 void mergeList(PLnode LA,PLnode LB);
 16 int main()
 17 
 18     PLnode LA;
 19     PLnode LB;
 20 
 21     LA = createList(LA);    //创建线性表LA,再将头指针赋值给LA;
 22     LB = createList(LB);    //创建线性表LA,再将头指针赋值给LA;
 23 
 24     traverse(LA);           //传入头指针
 25     traverse(LB);           //传入头指针
 26     mergeList(LA,LB);       //集合并集
 27     traverse(LA);           //再输出验证一下
 28     return 0;
 29 
 30 PLnode createList(PLnode L)
 31 
 32     L = (PLnode)malloc(sizeof(Lnode));
 33     PLnode Ptail = L;
 34     L->next = NULL;
 35 
 36     printf("input length:\n");
 37     scanf("%d",&L->data);
 38 
 39     for(int i = 1;i<=L->data;i++)
 40     
 41         PLnode pnew = (PLnode)malloc(sizeof(Lnode));
 42         printf("input data:\n");
 43         scanf("%d",&pnew->data);
 44 
 45         Ptail->next = pnew;
 46         Ptail = pnew;
 47         Ptail->next = NULL;
 48 
 49     
 50     return L;
 51 
 52 
 53 void traverse(PLnode L)
 54 
 55     PLnode p = L;
 56     while(p->next!=NULL)
 57     
 58         printf("%d ",p->next->data);
 59         p=p->next;
 60     
 61     printf("\n");
 62 
 63 
 64 void mergeList(PLnode LA,PLnode LB)
 65 
 66     int len2 = LB->data;
 67 
 68     PLnode p = LB;
 69     for(int i=1;i<=len2;i++)
 70     
 71       p = p->next;
 72       if(locateElem(LA,p->data))
 73       
 74           insertList(LA,p->data);
 75       
 76     
 77 
 78 
 79 
 80 
 81 bool locateElem(PLnode LA,int e)
 82 
 83     PLnode p = LA;
 84     for(int i =1;i<=LA->data;i++)
 85     
 86         p = p->next;
 87         if(p->data == e)
 88         
 89             return false;
 90         
 91     
 92     return true;
 93 
 94 
 95 void insertList(PLnode LA,int e)
 96 
 97     PLnode p = LA;
 98 
 99     for(int i=1;i<=LA->data;i++)
100     
101         p = p->next;
102     
103 
104     PLnode pnew = new Lnode;
105     pnew->data = e;
106     p->next = pnew;
107     pnew->next=NULL;
108     LA->data++;
109 
View Code

 

以上是关于线性表的合并的主要内容,如果未能解决你的问题,请参考以下文章

基础数据结构-线性表-顺序表的合并操作

数据结构~~~线性表复习2(动态链表的合并)

顺序表的非递减数列合并

线性表的插入和删除操作代码(C语言)

数据结构学习小结2 (第二章:线性表)

线性表的顺序表示和实现(严蔚敏版)