图中黄色部分为(A-B)U(B-A)的实际意义,用结构数组做静态链表来实现该表达式

大致流程是先建立A链表,接着将挨个输入的B中元素在A链表中遍历。如果没找到,就加到A链表结尾下标为endpointer的位置之后。如果找到了,删除该节点(回收到备用链表中)。

需要注意的是:

  • 每次拿着B中元素遍历A链表时,遍历到endpointer就停了。因为endpointer之后的都是B中元素,排除B中有相同元素的可能性,只用与A中元素(即endpointer之前的比较)
  • 代码中,B中元素的插入方式,是在endpointer后以倒叙插入的方式插入,所以最先插入的,反倒在顺序上跑到了后面
/*该算法将每一个B中元素在A中遍历。若找到则删除,否则,
倒叙添加在endpointer位置之后。S为结果链。时间复杂度为O(m*n)*/
#define MAXSIZE 1000;
typedef struct {
ElementType data;
int cur;
}component,SLinkList[MAXSIZE]; /*初始化space结构数组作为备用链表,0指向1,1指向2...*/
void InitSpace(SLinkList &space) {
for(int i = ; i < MAXSIZE; i++) {
space[i].cur = i + ;
}
space[MAXSIZE - ].cur = ;
} /*从备用链表分配一个节点出来*/
int MallocFromSpace(SLinkList &space) {
int i = space[].cur;//space[0]永远是备用链表的头节点
if(space[].cur)//判断备用链表是否已为空
space[].cur = space[i].cur;
return i;
} /*回收下标为k的空闲节点,始终把节点加在头节点之后*/
void FreeToSpace(SLinkList &space,int k) {
space[k].cur = space[].cur;
space[].cur = k;
} /* (A-B)U(B-A) */
void difference(SLinkList &space, int &S) {
int endPointer,tmp,Apre,Anow;
InitSpace(space);
S = MallocFromSpace(space);//这个是A集合的头节点,什么也没装
endPointer = S;
scanf(m,n);//m是A集合的元素个数,n是B集合的元素个数
/*开始录入A集合*/
for(int i = ; i < m; i++) {
tmp = MallocFromSpace(space);
space[endPointer].cur = tmp;
scanf(space[tmp].data);
endPointer = tmp;
}
space[endPointer].cur = ; for(int j = ; j < n; j++) {
scanf(b);
Apre = S;
Anow = space[S].cur;
while(space[Anow].data != b && Anow != space[endPointer].cur) {//比较到endpointer就停了,因为除非B中有重复的元素,不然没必要让B中的元素与B相比
Apre = Anow;
Anow = space[Anow].cur;
} if(space[Anow].data == b) {//有
space[Apre].cur = space[Anow].cur;
FreeToSpace(space,Anow);
if(Anow == endPointer)
endPointer = Apre; //这个endpointer始终指着A的最后一个元素
} else {//没有
int tmp = MallocFromSpace(space);
//用倒叙插入的方式将A中没有的B的元素插进去
space[i].cur = space[endPointer].cur;
space[endPointer].cur = i;
}
}
}

静态链表实现 (A-B)U(B-A)的更多相关文章

  1. 使用C语言描述静态链表和动态链表

    静态链表和动态链表是线性表链式存储结构的两种不同的表示方式. 静态链表的初始长度一般是固定的,在做插入和删除操作时不需要移动元素,仅需修改指针,故仍具有链式存储结构的主要优点. 动态链表是相对于静态链 ...

  2. 静态链表 C语言描述

    静态链表1.下标为0的游标存放最后存放数据节点的游标,即是第一个没有存放元素(备用链表)的下标2.最后一个的节点存放第一个由数值得下标3.第一个和最后一个都不存放数据 即是备用链表的第一个的下标 4. ...

  3. 03静态链表_StaticLinkList--(线性表)

    #include "string.h" #include "ctype.h" #include "stdio.h" #include &qu ...

  4. java与数据结构(2)---java实现静态链表

    结点类 1 //结点类 2 class Node<T> { 3 private T data; 4 private int cursor; 5 6 Node(T data, int cur ...

  5. C链表之创建简单静态链表

    C代码: #include<stdio.h> #include<stdlib.h> #include<malloc.h> //创建简单静态链表 typedef st ...

  6. 静态链表实现(A-B)+(B-A)【代码】

    -----------------------------------------------第一次发代码,写在前面------------------------------------------ ...

  7. 静态链表C语言数据结构

    静态链表就是将数组实现单链表: int Malloc_SLL(StaticLinkList space) { int i = space[0].cur;//取得第一个头节点的下标 if( space[ ...

  8. 静态链表的C实现(基于数据结构 严蔚敏)

    静态链表是利用一维数组实现逻辑上的单链表结构,结点的逻辑上相邻但物理位置上不一定相邻,因为内存分配上是一次性的,故称为静态. 特点: 预先需要一片连续的存储空间: 非随机存取: 无现成的"内 ...

  9. c++ 简单静态链表

    所有结点(结构体变量)都是在程序中定义的,不是临时开辟的,也不能用完后释放,这种链表称为静态链表.对各结点既可以通过上一个结点的next指针去访问,也可以直接通过结构体变量名s1, s2, s3去访问 ...

随机推荐

  1. [转]ReactJS入门教程

    Refference From:http://www.cocoachina.com/webapp/20150721/12692.html 现在最热门的前端框架有AngularJS.React.Boot ...

  2. handsontable的单元格操作方法

    1.为handsontable添加钩子方法 addHook(key,callback):key为钩子方法名 <span style="font-size:18px;"> ...

  3. UDP通讯协议

    常见的通讯协议有udp和tcp. 先来简单了解一下这两个协议各自的特点: UDP: --将数据及源.目的封装在数据包中,不需要建立连接: --每个数据包的大小限制在64k以内: --因无连接,是不可靠 ...

  4. FTP Client

    1: /// <summary> 2: /// FTP 管理类 3: /// </summary> 4: public class FTPManage 5: { 6: priv ...

  5. 常用JS代码整理

    1: function request(paras) { 2: var url = location.href; 3: var paraString = url.substring(url.index ...

  6. Pure Css 菜单的使用

    本人新手,之前偶尔接触Bootstrap,也做过一些响应式开发,但是都是略显皮毛,公司的业务需求也限制了深入学习. 现着手Pure Css学习,尝试了简单的左边菜单自动隐藏的demo.闲话少说,代码贴 ...

  7. [转]IDENT_CURRENT、SCOPE_IDENTITY、@@IDENTITY 差異對照表

    本文转自:http://www.dotblogs.com.tw/hunterpo/archive/2009/09/04/10421.aspx IDENT_CURRENT.SCOPE_IDENTITY ...

  8. Tomcat 常见问题篇

    Tomcat 常见问题一.Tomcat常见问题 1.Tomcat web容器出现故障时,我们通过Tomcat自带的logs查看原因,以下错误提示都是源于logs 2.Connection refuse ...

  9. Qt相关问题

    1.  Qt编译中的error: cannot find -lGL和 error: collect2: error: ld returned 1 exit status 一般见于新安装的系统,马上就直 ...

  10. 《JavaScript 闯关记》之事件

    JavaScript 程序采用了异步事件驱动编程模型.在这种程序设计风格下,当文档.浏览器.元素或与之相关的对象发生某些有趣的事情时,Web 浏览器就会产生事件(event).例如,当 Web 浏览器 ...