静态链表过程演示及代码实现(A - B) U (B - A)
静态链表说明
使用数组来实现链式存储结构,目的是方便在不设指针类型的高级程序设计语言中使用链式结构
c语言定义数据结构
#define MAX_SIZE 1000
// 所有的类型都统一定义为ElemType
typedef int ElemType;
typedef struct
{
ElemType data;
int cur;
} component, LinkList[MAX_SIZE];
存储结构如下图所示

静态链表的工作原理
静态链表重点是在构建两个链表:备用链表(空闲的节点)和数据链表(已被使用的节点),下面来讨论一下两条链表是如何工作的
初始化链表,处标记颜色为空闲列表不可用时,其余所有的都属于备用链表(空闲的节点)

插入部分数据,静态链表同时产生备用链表(空闲的节点)和数据链表(已被使用的节点)

将上图结构分解一下,如下图

插入数据演示图

删除数据演示图

代码实现(A - B) U (B - A)
核心代码
void difference(LinkList &S1, int head)
{
ElemType temp, tail = head;
// A = { 1, 2, 3, 4, 5}, B = { 4, 5, 6, 7, 8}
int m = 5, n = 5;
// Build the first collection
for (int j = 1; j <= 5; j++)
{
temp = Malloc(S1);
S1[temp].data = j;
S1[tail].cur = temp;
tail = temp;
}
S1[tail].cur = 0;
printf("A = { ");
Traverse(S1, head, visit);
printf("}\n");
printf("B = { ");
// Adds the second collection to the first
for (int j = 4; j <= 8; j++)
{
printf("%d ", j);
// Find if an added element exists in the collection
int front = head, begin = S1[head].cur, end = S1[tail].cur;
while (begin != end && S1[begin].data != j)
{
front = begin;
begin = S1[begin].cur;
}
// Add element does not exist in the current collection, add to the collection
if (begin == end)
{
temp = Malloc(S1);
S1[temp].data = j;
S1[temp].cur = end;
S1[tail].cur = temp;
tail = temp;
}
else
{
// The element already exists in the collection, delete it
S1[front].cur = S1[begin].cur;
Free(S1, begin);
// Delete tail node, tail pointer needs to move forward one bit
if (begin == tail)
{
tail = front;
}
}
}
printf("}\n");
printf("(A - B) U (B - A) = { ");
Traverse(S1, head, visit);
printf("}\n");
}
int main()
{
LinkList S1;
Init(S1);
int head = Malloc(S1);
difference(S1, head);
return 0;
}
详细代码参考:所有代码入口
静态链表过程演示及代码实现(A - B) U (B - A)的更多相关文章
- 【数据结构】单链表&&静态链表详解和代码实例
喜欢的话可以扫码关注我们的公众号哦,更多精彩尽在微信公众号[程序猿声] 01 单链表(Singly Linked List ) 1.1 什么是单链表? 单链表是一种链式存储的结构.它动态的为节点分配存 ...
- Java数据结构-线性表之静态链表
静态链表的定义: 节点由一个一维数组和一个指针域组成,数组用来存放数据元素,而指针域里面的指针(又称游标)用来指向下一个节点的数组下标. 这种链表称之为静态链表. 链表中的数组第一个和最后一个位置须要 ...
- 静态链表实现(A-B)+(B-A)【代码】
-----------------------------------------------第一次发代码,写在前面------------------------------------------ ...
- 数据结构6: 静态链表及C语言实现
本节继续介绍线性表的另外一种链式表示——静态链表.(前面介绍的链表称为 动态链表 ). 逻辑结构上相邻的数据元素,存储在指定的一块内存空间中,数据元素只允许在这块内存空间中随机存放,这样的存储结构生成 ...
- 使用C语言描述静态链表和动态链表
静态链表和动态链表是线性表链式存储结构的两种不同的表示方式. 静态链表的初始长度一般是固定的,在做插入和删除操作时不需要移动元素,仅需修改指针,故仍具有链式存储结构的主要优点. 动态链表是相对于静态链 ...
- 静态链表 C语言描述
静态链表1.下标为0的游标存放最后存放数据节点的游标,即是第一个没有存放元素(备用链表)的下标2.最后一个的节点存放第一个由数值得下标3.第一个和最后一个都不存放数据 即是备用链表的第一个的下标 4. ...
- 03静态链表_StaticLinkList--(线性表)
#include "string.h" #include "ctype.h" #include "stdio.h" #include &qu ...
- 超酷创意HTML5动画演示及代码
HTML5是未来的网页开发神器,今天分享的这些HTML5动画大部分利用了CSS3的动画属性来实现,废话不多说,直接上演示和代码. HTML5/CSS3实现大风车旋转动画 这次我们要来分享一款很酷的HT ...
- 静态链表实现 (A-B)U(B-A)
图中黄色部分为(A-B)U(B-A)的实际意义,用结构数组做静态链表来实现该表达式 大致流程是先建立A链表,接着将挨个输入的B中元素在A链表中遍历.如果没找到,就加到A链表结尾下标为endpointe ...
随机推荐
- native关键字
1.native关键字说明其修饰的方法是一个原生态方法,方法对应的实现不是在当前文件,而是在用其他语言(如C和C++)实现的文件中. 可以将native方法比作Java程序同C程序的接口
- svn优点跟缺点?
优点: 1.svn优点:集中式管理,管理方式在服务端配置好,客户端只需要同步提交即可,使用方便,操作简单,很容易就可以上手 2.在服务端统一控制好访问权限,利用代码的安全管理. 3.所有的代码以服务端 ...
- 011_GoldWave软件安装及使用
(一)软件安装包: 链接:https://pan.baidu.com/s/15c5veooyA8bAYIAgLFOLjg提取码:jiis 复制这段内容后打开百度网盘手机App,操作更方便哦 (二)降低 ...
- Bootstap学习的实用网站
基本CSS样式 http://v2.bootcss.com/base-css.html 93 Twitter Bootstrap HTML Templates https://shapebootstr ...
- 「CF150E」Freezing with Style「点分治」「单调队列」
题意 给定一颗带边权的树,求一条边数在\(L\).\(R\)之间的路径,并使得路径上边权的中位数最大.输出一条可行路径的两个端点.这里若有偶数个数,中位数为中间靠右的那个. \(n, L, R\leq ...
- linux系列(二十三):df命令
1.命令格式 df [选项] [文件] 2.命令功能 显示指定磁盘文件的可用空间.如果没有文件名被指定,则所有当前被挂载的文件系统的可用空间将被显示.默认情况下,磁盘空间将以 1KB 为单位进行显示, ...
- K-D Tree学习笔记
用途 做各种二维三维四维偏序等等. 代替空间巨大的树套树. 数据较弱的时候水分. 思想 我们发现平衡树这种东西功能强大,然而只能做一维上的询问修改,显得美中不足. 于是我们尝试用平衡树的这种二叉树结构 ...
- Dp优化之决策单调栈优化
证明:g(i) ≤ g(j) (i ≤ j) 令 d=g(i) , k<d , 设cut = x表示 f(i) = f(x) + w[x,i] ( x < i ) 构造一个式子: ...
- C语言联合
联合使用关键字union,表示的一种量,只占用一块内存,具体如何占用取决于类型最大的那个.比如int和float会选用float. 联合也可以和结构体结合起来用,也可以赋值,通过.属性名的方式指定初始 ...
- 如果项目在IIS发布后,出现System.ComponentModel.Win32Exception: 拒绝访问。
如果项目在IIS发布后,出现System.ComponentModel.Win32Exception: 拒绝访问. 那么就试试下面的办法. 步骤如下: 应用程序池=>设置应用程序池默认设置 将标 ...