《数据结构 (C语言版)》洪国运 编著
『上海交通大学出版社』
线性表
实训2-2 求两个集合的交集
#include#include #define ElemType int //定义结点结构体 typedef struct LNode { ElemType data; struct LNode* next; }LNode, *linkList; //建立链表 LNode* create(ElemType data[], int n) { LNode* head = NULL; LNode* p = NULL; LNode* rear = NULL; head = (LNode*)malloc(sizeof(LNode)); head->next = NULL; rear = head; for (int i = 0; i < n; i++) { p = (LNode*)malloc(sizeof(LNode)); p->data = data[i]; p->next = NULL; rear->next = p; rear = p; } return head; } //输出链表中数据元素 void display(LNode* head) { LNode* p = NULL; p = head->next; while (p) { printf("%d ", p->data); p = p->next; } printf("n"); } //输出两个集合交集 LNode* inter(LNode* head1, LNode* head2) { LNode* p = head1->next; LNode* q = head2->next; LNode* s = NULL; LNode* head = NULL; head = (LNode*)malloc(sizeof(LNode)); while (p) { while (q) { if (p->data == q->data) { s = (LNode*)malloc(sizeof(LNode)); s->data = p->data; s->next = head->next; head->next = s; break; } else q = q->next; } p = p->next; q = head2->next; } return head; } int main() { int data1[10] = { 0 }; int data2[10] = { 0 }; int num1 = 0; int num2 = 0; int i = 0; LNode* h1 = NULL; LNode* h2 = NULL; LNode* h3 = NULL; printf("请输入集合A中的元素数:"); scanf("%d", &num1); printf("请输入集合A中的数据元素:"); for (i = 0; i < num1; i++) scanf("%d", &data1[i]); printf("请输入集合B中的元素数:"); scanf("%d", &num2); printf("请输入集合B中的数据元素:"); for (i = 0; i < num2; i++) scanf("%d", &data2[i]); h1 = create(data1, num1); h2 = create(data2, num2); printf("生成如下两个链表:n"); printf("链表1:"); display(h1); printf("链表2:"); display(h2); h3 = inter(h1, h2); printf("两个集合的交集是:"); display(h3); return 0; }



