c语言利用线性表求两个数组的子集
时间: 2023-10-28 20:13:40 浏览: 89
以下是一个示例程序,使用线性表(链表)来计算两个数组的子集。
```c
#include <stdio.h>
#include <stdlib.h>
typedef struct Node {
int data;
struct Node *next;
} Node;
Node *createList(int arr[], int n) {
Node *head = NULL, *p, *q;
for (int i = 0; i < n; i++) {
p = (Node *) malloc(sizeof(Node));
p->data = arr[i];
p->next = NULL;
if (head == NULL) {
head = p;
q = p;
} else {
q->next = p;
q = p;
}
}
return head;
}
void printList(Node *head) {
for (Node *p = head; p != NULL; p = p->next) {
printf("%d ", p->data);
}
printf("\n");
}
void subset(Node *A, Node *B) {
for (Node *p = A; p != NULL; p = p->next) {
for (Node *q = B; q != NULL; q = q->next) {
printf("{%d, %d}\n", p->data, q->data);
}
}
}
int main() {
int a[] = {1, 2, 3};
int b[] = {4, 5};
Node *A = createList(a, 3);
Node *B = createList(b, 2);
printList(A);
printList(B);
subset(A, B);
return 0;
}
```
输出结果为:
```
1 2 3
4 5
{1, 4}
{1, 5}
{2, 4}
{2, 5}
{3, 4}
{3, 5}
```
其中,`createList` 函数用于创建链表,`printList` 函数用于打印链表,`subset` 函数用于计算两个链表的子集。在 `subset` 函数中,使用两个循环遍历链表 A 和 B,并输出每个元素的组合。
阅读全文