有两个存放整数的线性表A和B,链式存储,元素个数分别为m和n,表中元素单调递增。
求出A和B的差集A - B(由在A中出现而不在B中出现的元素所构成的集合)。
将差集保存在线性表A中,差集的元素保持原有的顺序。
#include#include struct List { int data; struct List* next; }; struct List* adddata(int e) { struct List* t = (struct List*)malloc(sizeof(struct List)); t->data = e; t->next = NULL; return t; } void diff(struct List* a, struct List* b) { struct List* p1 = a; struct List* p2 = b; while (p1->next && p2->next) { if (p1->next->data < p2->next->data) p1 = p1->next; else if (p1->next->data > p2->next->data) p2 = p2->next; else { struct List* t = p1->next; p1->next = p1->next->next; free(t); } } } int main() { struct List* a = adddata(0); struct List* b = adddata(0); struct List* p = a; for (int i = 0; i < 5; i++) { if (i == 0) { a->next = adddata(rand() % 5); p = a->next; } else { p->next = adddata(1 + rand() % 5 + p->data); p = p->next; } } for (int i = 0; i < 6; i++) { if (i == 0) { b->next = adddata(rand() % 5); p = b->next; } else { p->next = adddata(1 + rand() % 5 + p->data); p = p->next; } } diff(a, b); p = a->next; while (p) { printf("%d ", p->data); p = p->next; } }



