线性表的合并
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;
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
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
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
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
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
以上是关于线性表的合并的主要内容,如果未能解决你的问题,请参考以下文章