C语言实现:【问题描述】 假设以两个元素依值递增有序排列的线性表A和B分别表示两个集合(即同一表中的元素值各不相同),现要求另辟空间构成一个线性表C,其元素为A和B中元素的交集,且表C中的元素也依值递增有序排列。试对顺序表编写求C的算法, C为重新创建的线性表。 【输入形式】 顺序表A长度 顺序表A(空格区分) 顺序表B长度 顺序表B(空格区分) 【输出形式】 顺序表C 【样例输入】 7 1 2 3 5 7 9 11 4 2 4 5 9 【样例输出】 2 5 9
时间: 2024-01-05 21:03:14 浏览: 86
以下是C语言实现的代码:
```c
#include <stdio.h>
#include <stdlib.h>
#define MAXSIZE 100
typedef struct {
int data[MAXSIZE];
int length;
} SqList;
void CreateList(SqList *L, int len) {
int i;
L->length = len;
printf("Please input %d elements: ", len);
for (i = 0; i < len; i++) {
scanf("%d", &L->data[i]);
}
}
void Merge(SqList La, SqList Lb, SqList *Lc) {
int i = 0, j = 0, k = 0;
while (i < La.length && j < Lb.length) {
if (La.data[i] < Lb.data[j]) {
i++;
} else if (La.data[i] > Lb.data[j]) {
j++;
} else {
Lc->data[k++] = La.data[i++];
j++;
}
}
Lc->length = k;
}
void PrintList(SqList L) {
int i;
for (i = 0; i < L.length; i++) {
printf("%d ", L.data[i]);
}
}
int main() {
SqList La, Lb, Lc;
int lena, lenb;
printf("Please input the length of List A: ");
scanf("%d", &lena);
CreateList(&La, lena);
printf("Please input the length of List B: ");
scanf("%d", &lenb);
CreateList(&Lb, lenb);
Merge(La, Lb, &Lc);
printf("The intersection of A and B is: ");
PrintList(Lc);
printf("\n");
return 0;
}
```
运行结果:
```
Please input the length of List A: 7
Please input 7 elements: 1 2 3 5 7 9 11
Please input the length of List B: 4
Please input 4 elements: 2 4 5 9
The intersection of A and B is: 2 5 9
```
阅读全文