静态链表过程演示及代码实现(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 ...
随机推荐
- sql server 综合使用的例子
exec sp_helptext prosampleoldstyle_usp -- ============================================= -- ========= ...
- MySQL高级 之 explain执行计划详解(转)
使用explain关键字可以模拟优化器执行SQL查询语句,从而知道MySQL是如何处理你的SQL语句的,分析你的查询语句或是表结构的性能瓶颈. explain执行计划包含的信息 其中最重要的字段为:i ...
- bootstrap Table 的使用方法
然后添加css 找到bootstrap-table.min.css 添加进去 再添加JS Js添加时 按照顺序添加 然后初始化bootstrap-table <script type=&qu ...
- learning scala Function Recursive Tail Call
可以使用scala库,可以从字面上看出是在调用 递归函数: code import scala.util.control.TailCalls._ val arrayDonuts: Array[Stri ...
- Python多线程笔记(二)
Lock对象 原语锁(互斥锁)是一个同步原语,状态是"已锁定"或者"未锁定"之一.两个方法acquire()和release()用于修改锁的状态.如果状态为已锁 ...
- springBoot学习(二):初学JPA
依旧跟着大佬学习JPA,在这里记下过程. JPA主要做的事情是简化数据库操作,至少现在为止,我觉得还是挺方便简单明了的.在原本代码的基础下,更改UserController.User.UserRepo ...
- 说出Servlet的生命周期,并说出Servlet和CGI的区别。
说出Servlet的生命周期,并说出Servlet和CGI的区别. 山治ZHrx5 | 浏览 1377 次 推荐于2016-09-16 22:39:19 最佳答案 Servlet的生命周期分为5个阶段 ...
- Tcl模块化
Proc 过程名 参数列表 过程体 示例代码(斐波那契数列): proc fib {num} { if {$num<=2} {return 1} return [expr [fib [expr ...
- SQL SERVER 从其它数据库中复制带自增ID主键的表数据
SQL SERVER两个结构相同(或不同)的表,互相导入数据,方法有两种: 1.使用SQL SERVER 自带的导出.导入功能,在库名上右击,“任务”,导出数据.导入数据,这个操作具体不就不多讲了. ...
- html 与 xml 的区别与联系
[引言] 前一阵子刚刚学习了html(HyperText Markup Language),最近又接触了xml(Extensible Markup Language),它们之间有什么联系和区别呢?现在 ...