静态链表求(A-B)U(B-A)的集合
知识储备:来源于https://blog.csdn.net/sinat_38816924/article/details/83475594
本代码本来是借鉴课本上的源代码来完成的,结果调试时错误较多,所以很大幅度的更改了原来的代码,函数中变量超级多,个人认为这是一个相对杂乱的代码,唯一的优点就是解决了实际问题,相信过个十天半个月我再看这个代码都会一头雾水,害!
1 #include <stdio.h> 2 #include <iostream> 3 using namespace std; 4 //静态链表 5 //求集合运算(A-B)U(B-A) 6 #define MAXSIZE 20 7 //定义结构体 8 struct Space { 9 int data; 10 int cur; 11 }space[MAXSIZE]; 12 //初始化静态链表 13 void Init(Space *space) { 14 int i; 15 for (i = 0; i < MAXSIZE-1; i++) space[i].cur = i + 1; 16 space[MAXSIZE - 1].cur = 0; 17 } 18 int malloc_sl(Space *space) { 19 int i; 20 //若备用空间链表非空,则返回分配的节点下标,否则返回0 21 i = space[0].cur; 22 if (i) space[0].cur = space[i].cur; 23 return i; 24 } 25 void free_sl(Space *space,int k) { 26 //回收到备用链表 27 space[k].cur = space[0].cur; 28 space[0].cur = k; 29 } 30 void difference(Space space[]) { 31 int m, n, i, x, j, k, l; 32 cout << "请输入A链表元素个数:"; 33 cin >> n; 34 cout << "请输入B链表元素个数:"; 35 cin >> m; 36 Init(space); 37 int head = malloc_sl(space);//生成头结点 38 int last = head;//last指向space的当前最后结点 39 cout << last << endl; 40 //开始输入A,B链表内元素 41 cout << "请依次输入A链表内的元素" << endl; 42 cin >> space[1].data; 43 for (i = 1; i < n; i++) { 44 j = malloc_sl(space); 45 cin >> space[j].data; 46 space[last].cur = j; 47 last = j; 48 } 49 space[last].cur = 0;//尾结点的指针为空 50 cout << "请输入依次B链表内的数据" << endl; 51 for (i = 0; i < m; i++) { 52 cin >> x; 53 //判断元素是否存在 54 j = head; 55 while (space[last].cur!=j && space[j].data != x) { 56 l = j;//用来指向j的上一个结点,便于后期节点删除操作 57 j = space[j].cur; 58 } 59 //增加操作 60 if (space[last].cur==j) { 61 cout << "此元素A链表之前不存在" << endl; 62 k = malloc_sl(space); 63 space[k].data = x; 64 space[last].cur = k; 65 last = k; 66 n++; 67 } 68 else { 69 //删除操作 70 cout << "此元素A链表中已存在" << endl; 71 if (j == head) {//头结点数据相同 72 head = space[head].cur; 73 free_sl(space, j); 74 } 75 else { 76 space[l].cur = space[j].cur; 77 free_sl(space, j); 78 } 79 n--; 80 } 81 } 82 //开始输出 83 i = head; 84 cout << "链表中共有" << n << "个元素" << endl; 85 cout << "所得到的结果为:" << endl; 86 while (space[last].cur!=i) { 87 cout << space[i].data << endl; 88 i = space[i].cur; 89 } 90 } 91 int main() { 92 difference(space); 93 return 0