zoukankan      html  css  js  c++  java
  • 静态链表求(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
  • 相关阅读:
    UBUNTU开机时出现“waiting for network configuration” 问题的解决 (转) 沉沉_
    模拟地与数字地(转) 沉沉_
    转 parsing error:expected ")" 解决方法 沉沉_
    转 按Enter键或者ESC键,程序退出的解决方法 沉沉_
    C语言中的常量 沉沉_
    TI C64X DSP中断向量表的配置(硬件中断) 转自新浪博客 沉沉_
    只用串口和网络裸机开发ARM程序(OK6410开发板) 沉沉_
    ubuntu 上开启 网络文件系统(NFS) 沉沉_
    Visual Studio 2010 Express for Windows Phone 新建项目时为何不显示 XNA
    Win32汇编菜单进阶之右键弹出菜单
  • 原文地址:https://www.cnblogs.com/2019-12-10-18ykx/p/12990355.html
Copyright © 2011-2022 走看看