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-01 21:06:40 浏览: 111
已知有两个按元素值递增有序的顺序表A和B,设计一个算法将表A和表B的全部元素归并为一个按元素值递增有序的顺序表C。
5星 · 资源好评率100%
以下是C语言实现两个递增有序顺序表求交集的代码:
```c
#include <stdio.h>
#include <stdlib.h>
#define MAXSIZE 100
typedef struct {
int *data;
int length;
} SqList;
void CreateList(SqList *L, int n) {
L->data = (int *)malloc(n * sizeof(int));
L->length = n;
for (int i = 0; i < n; i++) {
scanf("%d", &(L->data[i]));
}
}
void Merge(SqList A, SqList B, SqList *C) {
int i = 0, j = 0, k = 0;
while (i < A.length && j < B.length) {
if (A.data[i] == B.data[j]) {
C->data[k++] = A.data[i++];
j++;
} else if (A.data[i] < B.data[j]) {
i++;
} else {
j++;
}
}
C->length = k;
}
void PrintList(SqList L) {
for (int i = 0; i < L.length; i++) {
printf("%d ", L.data[i]);
}
printf("\n");
}
int main() {
SqList A, B, C;
int m, n;
scanf("%d", &m);
CreateList(&A, m);
scanf("%d", &n);
CreateList(&B, n);
C.data = (int *)malloc(MAXSIZE * sizeof(int));
Merge(A, B, &C);
PrintList(C);
return 0;
}
```
输入格式为:先输入顺序表A的长度,再输入顺序表A的元素,再输入顺序表B的长度,最后输入顺序表B的元素。输出格式为顺序表C的元素。
阅读全文