静态链表过程演示及代码实现(A - B) U (B - A)

静态链表说明

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

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;
}

详细代码参考:所有代码入口

原文地址:https://www.cnblogs.com/dengjili/p/11731582.html

时间: 2024-10-13 16:49:22

静态链表过程演示及代码实现(A - B) U (B - A)的相关文章

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

喜欢的话可以扫码关注我们的公众号哦,更多精彩尽在微信公众号[程序猿声] 01 单链表(Singly Linked List ) 1.1 什么是单链表? 单链表是一种链式存储的结构.它动态的为节点分配存储单元.当有节点插入时,系统动态的为结点分配空间.在结点删除时,应该及时释放相应的存储单元,以防止内存泄露.由于是链式存储,所以操作单链表时,必须知道头结点或者头指针的位置.并且,在查找第i个节点时,必须找到第i-1个节点. 1.2 单链表的存储结构代码描述 对于链式存储,通过上一节的讲解相信大家已

能判断是否还有剩余空间的静态链表

第一次系统的学习数据结构是在半年前,看小甲鱼的数据结构与算法视频,自学的话有许多不懂得地方,什么AVL树,红黑树,图的最短路径,最小生成树...但总归对数据结构与算法有一个大体的印象,到现在随着不断写代码,做OJ题,愈发认识到数据结构与算法的重要性,打算再看一遍,现在看着:大话数据结构(程杰著),数据结构(C语言版严蔚敏著),不推荐新手使用 数据结构与算法分析(Mark Allen Weiss 著)这本书真的很难懂. 回归正题,我看了许多书有关静态链表的描述和代码发现都没有判断是否还有剩余空间,

静态链表(C++实现)

用数组描述的链表,即称为静态链表. 在C语言中,静态链表的表现形式即为结构体数组,结构体变量包括数据域data和游标cur. 这种存储结构,仍需要预先分配一个较大的空间,但在作为线性表的插入和删除操作时不需移动元素,仅需修改指针,故仍具有链式存储结构的主要优点. 下图表示了静态链表的一中存储结构: 图中用彩色途上的是两个头结点,不存放数据,分别用来记录第一个备用节点和第一个数据节点的下标. 下面给出静态链表的C++实现代码: 首先给出头文件:StaticList.h: #include<iost

静态链表 C++实现

<span style="font-size:12px;">用数组描述的链表,即称为<strong>静态链表</strong>. 在C语言中,静态链表的表现形式即为结构体数组,结构体变量包括数据域data和游标cur. 这种存储结构,仍需要预先分配一个较大的空间,但在作为线性表的插入和删除操作时不需移动元素,仅需修改指针,故仍具有链式存储结构的主要优点. 下图表示了静态链表的一中存储结构: 图中用彩色途上的是两个头结点,不存放数据,分别用来记录第一个

看数据结构写代码(5)静态链表

静态链表用于 不能使用 指针的 编程语言中. 下面奉上代码: // StaticLinkList.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include <stdlib.h> //静态链表的 实现 typedef int Element; #define INIT_SIZE 10 //为了测试,故意将值设置的很小 enum E_STATE { E_STATE_ERROR = 0, E_STATE_OK = 1, }; str

数据结构之线性表代码实现顺序存储,链式存储,静态链表(选自大话数据结构)

一,线性表顺序存储 #include <stdio.h> #include <string.h> #include <ctype.h> #include <stdlib.h> #include <io.h> #include <math.h> #include <time.h> #define OK 1 #define ERROR 0 #define TRUE 1 #define FALSE 0 #define MAXSI

静态链表、循环链表、双向链表(C代码实现)

静态链表 对于没有指针的编程语言,可以用数组替代指针,来描述链表.让数组的每个元素由data和cur两部分组成,其中cur相当于链表的next指针,这种用数组描述的链表叫做静态链表,这种描述方法叫做游标实现法.我们对数组的第一个和最后一个元素做特殊处理,不存数据.让数组的第一个元素cur存放第一个备用元素(第一个未被占用的元素)下标,而数组的最后一个元素cur存放第一个有值的元素下标,相当于头结点作用.空的静态链表如下图 当存放入一些数据时("甲""乙""

静态链表代码

早期的编程语言不像C语言拥有指针功能,但是又希望能够实现单链表, 于是在数组的基础上创建了单链表,称为静态链表. /************************************* 静态链表 数据结构:每个数组节点都有值和游标. 游标表示下一个节点,节点分为已用节点和备用节点 第一个节点和最后节点保留: 第一个节点游标表示备用节点起始位置 最后一个节点游标表示已用节点的起始位置 已用节点的最后一个元素的游标指向0,表示末尾. ******************************

数据结构与算法(三)-线性表之静态链表

前言:前面介绍的线性表的顺序存储结构和链式存储结构中,都有对对象地引用或指向,也就是编程语言中有引用或者指针,那么在没有引用或指针的语言中,该怎么实现这个的数据结构呢? 一.简介 定义:用数组代替指针或引用来描述单链表,即用数组描述的链表叫做静态链表,这种描述方法叫做游标实现法: 上面的静态链表图有两个数组游标和数据,其中数据数组存储数据,而游标数组存储同下标为数据的下一个数据的下标值,简单模拟一下静态链表遍历的过程: 先查看下标为999的游标数组值:1: 根据游标数组值1,查找下标为1的数据: