Scratch 实现数据结构静态链表的建立及操作

scratch操作

  • Scratch 实现数据结构静态链表的建立及操作
    • 数据结构
    • 初始化静态链表
    • 添加数据代码
    • 删除数据
    • 回收空闲节点操作代码
    • 计算静态链表的元素的个数
    • 插入数据代码
    • 增加据代码
    • 运行结果
  • C语言实现静态链表

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

数据结构

初始化静态链表

添加数据代码

在插入内容时,首先应对数组分配空间,否则程序无法运行!!

删除数据

回收空闲节点操作代码

计算静态链表的元素的个数

程序有改动,这里的判断NULL应该 改为‘ ’(空格)

插入数据代码

增加据代码

运行结果

C语言实现静态链表

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#define MAXSIZE 10
typedef char Elemtype;
typedef struct {Elemtype data;int cur;
}component,SlinkList[MAXSIZE];int LocateElem_SL(SlinkList S, Elemtype e)
{//在静态链表L中查找第1个值为e的元素//若找到,则返回它在L中的位序,否则返回0int i = S[0].cur;while (i&&S[i].data != e)i = S[i].cur;return i;
}void InitSpace_SL(SlinkList &space)
{//将一维数组space中各分量链成一个备用链表,space[0].cur为头指针,//“0”表示空指针for (int i = 0; i < MAXSIZE - 1; ++i)space[i].cur = i + 1;space[MAXSIZE - 1].cur = 0;}int Malloc_SL(SlinkList &space)
{//若备用链表非空,则返回分配的结点的下标,否则返回0int i = space[0].cur;if (space[0].cur)space[0].cur = space[i].cur;return i;
}void Free_SL(SlinkList &space, int k)
{//将下标为k的空闲结点回收到备用链表space[k].cur = space[0].cur;space[0].cur = k;
}void difference(SlinkList &space, int &S)
{//依次输入A和B的元素,在一维数组space中建立表示集合(A-B)U(B-A)//的静态链表,S为其头指针。假设备用空间足够大,space[0].cur为其头指针InitSpace_SL(space);         //初始化备用空间S = Malloc_SL(space);         //生成S的头结点int r = S;                        //r指向S的当前最后结点int m, n,i;                        scanf("%d%d", &m, &n);            //输入A和B的元素个数for (int j = 1; j <= m; j++) {   //建立集合A的链表i = Malloc_SL(space);    //分配结点scanf("%c", &space[i].data);    //输入A的元素值space[r].cur = i;             //插入到表尾r = i;}space[r].cur = 0;           //尾结点的指针为空for (int j = 1; j <= n; ++j)   //一次输入B的元素,若不在当前表中,则插入,否则删除{int b,p,k;scanf("%d", &b);p = S; k = space[S].cur;     //k指向集合A的第一个结点while (k != space[r].cur&&space[k].data != b)       //在当前表中查找{p = k;k = space[k].cur;}if (k == space[r].cur){i = Malloc_SL(space);space[i].data = b;space[i].cur = space[r].cur;space[r].cur = i;}else{space[p].cur = space[k].cur;Free_SL(space, k);if (r == k)r = p;}}
}void displayArr(component * array, int body) {int tempBody = body;//tempBody准备做遍历使用while (array[tempBody].cur) {printf("%d,%d ", array[tempBody].data, array[tempBody].cur);tempBody = array[tempBody].cur;}printf("%d,%d\n", array[tempBody].data, array[tempBody].cur);
}
int main() {SlinkList space;int x, y;difference(space, x);y = x;while (y){//遍历静态链表printf("%3d  %c\n", y, space[y].data);y = space[y].cur;}}

Scratch 与C语言实现数据结构静态链表的建立及操作相关推荐

  1. C语言实现STL静态链表,先进后出的数据结构-栈 一

    1. 栈的概念 在开始前,请牢记这句话:栈是一种先进后出的数据结构. 栈(stack)是限定仅在表的一端进行操作的数据结构,请联系我们前文所学的,设想一个单链表我们只能够对其链表的表尾结点进行操作,而 ...

  2. 【数据结构--静态链表】

    文章目录 前言 一.静态链表的定义 结构描述 代码描述 二.静态链表的基本操作 初始化 打印链表 静态链表的插入 静态链表的删除 三.完整代码及运行截图 完整代码如下: 运行截图 四.闵版(略改) 前 ...

  3. C语言数据结构 单链表的建立、遍历、查找、插入和删除操作

    参考文献 本博文为半摘记性质 -- 声明:全文主干部分摘自 [1] 杨智明. 数据结构(C语言版)[M]. 第一版. 北京:北京理工大学出版社, 2016. [2] 严蔚敏, 李冬梅, 吴伟民. 数据 ...

  4. 数据结构-静态链表创建

    静态链表: 也是一种线性存储结构,它结合了顺序表和链表的优点,既能快速访问元素,又能快速增加或删除数据元素.使用静态链表存储数据,数据全部存储在数组中(和顺序表一样),但存储位置是随机的,数据之间&q ...

  5. 头插法建立单链表c语言6,2020-07-14(C语言)数据结构采用头插法建立单链表

    //采用头插法建立单链表 include include typedef struct LNode { int data; struct LNode *next; } LNode, *LinkList ...

  6. C语言(数据结构) - 链表的基本操作

    1,为什么要用到链表 数组作为存放同类数据的集合,给我们在程序设计时带来很多的方便,增加了灵活性.但数组也同样存在一些弊病.如数组的大小在定义时要事先规定,不能在程序中进行调整,这样一来,在程序设计中 ...

  7. 静态树表查找算法及C语言实现,数据结构 静态树表查找算法

    友情提示:此篇文章大约需要阅读 6分钟55秒,不足之处请多指教,感谢您的阅读. 算法思想 在使用查找表中有n个关键字,表中的每个关键字被查找的概率都是1/n.在等概率的情况下,使用折半查找算法最优. ...

  8. 数据结构--双链表的创建和操作

    http://www.cnblogs.com/jingliming/p/4602144.html#0-tsina-1-42616-397232819ff9a47a7b7e80a40613cfe1 一. ...

  9. 数据结构单链表插入和删除操作

    单链表:先回顾单链表的特点  逻辑相邻 物理上不一定相连 首先初始化单链表,其中主要保存的是该节点自身的值以及下个节点的地址. 有效节点结构体设计: ​ struct Node{ ​ int data ...

最新文章

  1. #Ruby# Introspect (1)
  2. 反垃圾邮件网关市场分析
  3. DB2安装过程中可能遇到的错误
  4. 淡季不淡!速卖通户外运动产品好做吗?来看看法国这些爆款!
  5. mysql 乐观锁 version_乐观锁-version的使用
  6. Java中的HashMap和HashTable到底哪不同?(原文参考来自码农网)
  7. hdu 1625(floyd判环)
  8. 好记性不如烂笔头——.NET运行原理
  9. 2021年中国低密度PET泡沫市场趋势报告、技术动态创新及2027年市场预测
  10. simpleHandleData
  11. 百度迟到移动互联网:寻入口级产品 文化成挑战
  12. 全国精确到市的新冠疫情历史数据
  13. 项目集管理PgMP:聚焦战略、收益与治理︱项目管理者联盟联合创始人宣晓锋
  14. Java中的七种设计原则
  15. 高校房产管理系统应具备哪些基本功能?
  16. No.01统计学之数据的描述性统计
  17. Inner Join与Left Join
  18. tomcat布置前端项目
  19. 前端程序员如何快速转型全栈工程师(基础版)
  20. 网易企业邮箱 跟Thunderbird 雷鸟 e mail 客户端发邮件有冲突,发双份 解决方法很简单(图)

热门文章

  1. python回测代码_python实现马丁策略回测3000只股票的实例代码
  2. [JAVA]百度官方IP查询定位
  3. 坐标范围计算显示缩放级别zoom自适应显示地图
  4. 吉信通接收回复(http) java
  5. 自制COREXY结构的3D打印机
  6. Tungsten Fabric入门宝典丨8个典型故障及排查Tips
  7. 裸辞后进入华为,拿下34K测试岗offer....
  8. springboot 启动 ApplicationContext applicationContext = null
  9. hexo+github打造个人博客系列之Coding Pages去广告
  10. Hook函数三步走(SetWindowsHookEx、UnhookWindowsHookEx、CallNextHookEx)