静态链表说明

使用数组来实现链式存储结构,目的是方便在不设指针类型的高级程序设计语言中使用链式结构

c语言定义数据结构

#define MAX_SIZE 1000

// 所有的类型都统一定义为ElemType
typedef int ElemType; typedef struct
{
ElemType data;
int cur;
} component, LinkList[MAX_SIZE];

存储结构如下图所示

静态链表的工作原理

静态链表重点是在构建两个链表:备用链表(空闲的节点)和数据链表(已被使用的节点),下面来讨论一下两条链表是如何工作的

  1. 初始化链表,处标记颜色为空闲列表不可用时,其余所有的都属于备用链表(空闲的节点)

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

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

  3. 插入数据演示图

  4. 删除数据演示图

代码实现(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)的更多相关文章

  1. 【数据结构】单链表&&静态链表详解和代码实例

    喜欢的话可以扫码关注我们的公众号哦,更多精彩尽在微信公众号[程序猿声] 01 单链表(Singly Linked List ) 1.1 什么是单链表? 单链表是一种链式存储的结构.它动态的为节点分配存 ...

  2. Java数据结构-线性表之静态链表

    静态链表的定义: 节点由一个一维数组和一个指针域组成,数组用来存放数据元素,而指针域里面的指针(又称游标)用来指向下一个节点的数组下标. 这种链表称之为静态链表. 链表中的数组第一个和最后一个位置须要 ...

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

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

  4. 数据结构6: 静态链表及C语言实现

    本节继续介绍线性表的另外一种链式表示——静态链表.(前面介绍的链表称为 动态链表 ). 逻辑结构上相邻的数据元素,存储在指定的一块内存空间中,数据元素只允许在这块内存空间中随机存放,这样的存储结构生成 ...

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

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

  6. 静态链表 C语言描述

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

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

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

  8. 超酷创意HTML5动画演示及代码

    HTML5是未来的网页开发神器,今天分享的这些HTML5动画大部分利用了CSS3的动画属性来实现,废话不多说,直接上演示和代码. HTML5/CSS3实现大风车旋转动画 这次我们要来分享一款很酷的HT ...

  9. 静态链表实现 (A-B)U(B-A)

    图中黄色部分为(A-B)U(B-A)的实际意义,用结构数组做静态链表来实现该表达式 大致流程是先建立A链表,接着将挨个输入的B中元素在A链表中遍历.如果没找到,就加到A链表结尾下标为endpointe ...

随机推荐

  1. MongoDB 查看chunk块大小

    使用mongo shell连到mongos执行命令:AllChunkInfo("dbname.cellname",true) 点击(此处)折叠或打开 AllChunkInfo = ...

  2. postgrepSQL psql基础操作

    1.登录postgrepSQL psql 2.退出postgrepSQL \q 3.查看postgrepSQL里面的数据库 1)psql -l 2)\ l 4.切换DB \c db_name 5.查看 ...

  3. Mina学习+手写服务端+通过telnet连接服务端

    1. 2. 3. 4.MinaServer.java package com.mina; import java.io.IOException;import java.net.InetSocketAd ...

  4. 在其他博客里看到的比较好的map用法,进行储存啦啦~ x

    1.map简介 map是一类关联式容器.它的特点是增加和删除节点对迭代器的影响很小,除了那个操作节点,对其他的节点都没有什么影响.对于迭代器来说,可以修改实值,而不能修改key. 2.map的功能 自 ...

  5. Queue Pair in RDMA (zz)

    Queue Pair in RDMA 首页分类标签留言关于订阅2018-03-21 | 分类 Network  | 标签 RDMA 一个CA(Channel Adapter)可以包含多个QP,QP相当 ...

  6. 2019暑期金华集训 Day3 字符串

    自闭集训 Day3 字符串 SAM 考虑后缀树. SAM的parent树是反串的后缀树,所以后面加一个字符的时候相当于往串前面加一个字符,恰好多出了一个后缀. 于是可以以此来理解SAM. 每一条路径对 ...

  7. python合并多个txt文件

    python合并多个txt文件 #合并一个文件夹下的多个txt文件 #coding=utf-8 import os #获取目标文件夹的路径 filedir = os.getcwd()+'\\数据' # ...

  8. 使用java时报的一些错误

    mysql-connector-java报not found的错误 ftp上传文件失败原因 1.mysql-connector-java报not found的错误 在网上查,很容易查找到java连接数 ...

  9. zabbix (一) 初识

    1.什么是zabbix? Zabbix由Alexei Vladishev创建,目前由Zabbix SIA积极开发和支持. Zabbix是一种企业级开源分布式监控解决方案. Zabbix是监控底层存储( ...

  10. 使用Adivisor配置增强处理,来实现数据库读写分离

    一.先写一个demo来概述Adivisor的简单使用步骤 实现步骤: 1.通过MethodBeforeAdivice接口实现前置增强处理 public class ServiceBeforeAdvis ...