Scratch 与C语言实现数据结构静态链表的建立及操作
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语言实现数据结构静态链表的建立及操作相关推荐
- C语言实现STL静态链表,先进后出的数据结构-栈 一
1. 栈的概念 在开始前,请牢记这句话:栈是一种先进后出的数据结构. 栈(stack)是限定仅在表的一端进行操作的数据结构,请联系我们前文所学的,设想一个单链表我们只能够对其链表的表尾结点进行操作,而 ...
- 【数据结构--静态链表】
文章目录 前言 一.静态链表的定义 结构描述 代码描述 二.静态链表的基本操作 初始化 打印链表 静态链表的插入 静态链表的删除 三.完整代码及运行截图 完整代码如下: 运行截图 四.闵版(略改) 前 ...
- C语言数据结构 单链表的建立、遍历、查找、插入和删除操作
参考文献 本博文为半摘记性质 -- 声明:全文主干部分摘自 [1] 杨智明. 数据结构(C语言版)[M]. 第一版. 北京:北京理工大学出版社, 2016. [2] 严蔚敏, 李冬梅, 吴伟民. 数据 ...
- 数据结构-静态链表创建
静态链表: 也是一种线性存储结构,它结合了顺序表和链表的优点,既能快速访问元素,又能快速增加或删除数据元素.使用静态链表存储数据,数据全部存储在数组中(和顺序表一样),但存储位置是随机的,数据之间&q ...
- 头插法建立单链表c语言6,2020-07-14(C语言)数据结构采用头插法建立单链表
//采用头插法建立单链表 include include typedef struct LNode { int data; struct LNode *next; } LNode, *LinkList ...
- C语言(数据结构) - 链表的基本操作
1,为什么要用到链表 数组作为存放同类数据的集合,给我们在程序设计时带来很多的方便,增加了灵活性.但数组也同样存在一些弊病.如数组的大小在定义时要事先规定,不能在程序中进行调整,这样一来,在程序设计中 ...
- 静态树表查找算法及C语言实现,数据结构 静态树表查找算法
友情提示:此篇文章大约需要阅读 6分钟55秒,不足之处请多指教,感谢您的阅读. 算法思想 在使用查找表中有n个关键字,表中的每个关键字被查找的概率都是1/n.在等概率的情况下,使用折半查找算法最优. ...
- 数据结构--双链表的创建和操作
http://www.cnblogs.com/jingliming/p/4602144.html#0-tsina-1-42616-397232819ff9a47a7b7e80a40613cfe1 一. ...
- 数据结构单链表插入和删除操作
单链表:先回顾单链表的特点 逻辑相邻 物理上不一定相连 首先初始化单链表,其中主要保存的是该节点自身的值以及下个节点的地址. 有效节点结构体设计: struct Node{ int data ...
最新文章
- #Ruby# Introspect (1)
- 反垃圾邮件网关市场分析
- DB2安装过程中可能遇到的错误
- 淡季不淡!速卖通户外运动产品好做吗?来看看法国这些爆款!
- mysql 乐观锁 version_乐观锁-version的使用
- Java中的HashMap和HashTable到底哪不同?(原文参考来自码农网)
- hdu 1625(floyd判环)
- 好记性不如烂笔头——.NET运行原理
- 2021年中国低密度PET泡沫市场趋势报告、技术动态创新及2027年市场预测
- simpleHandleData
- 百度迟到移动互联网:寻入口级产品 文化成挑战
- 全国精确到市的新冠疫情历史数据
- 项目集管理PgMP:聚焦战略、收益与治理︱项目管理者联盟联合创始人宣晓锋
- Java中的七种设计原则
- 高校房产管理系统应具备哪些基本功能?
- No.01统计学之数据的描述性统计
- Inner Join与Left Join
- tomcat布置前端项目
- 前端程序员如何快速转型全栈工程师(基础版)
- 网易企业邮箱 跟Thunderbird 雷鸟 e mail 客户端发邮件有冲突,发双份 解决方法很简单(图)
热门文章
- python回测代码_python实现马丁策略回测3000只股票的实例代码
- [JAVA]百度官方IP查询定位
- 坐标范围计算显示缩放级别zoom自适应显示地图
- 吉信通接收回复(http) java
- 自制COREXY结构的3D打印机
- Tungsten Fabric入门宝典丨8个典型故障及排查Tips
- 裸辞后进入华为,拿下34K测试岗offer....
- springboot 启动 ApplicationContext applicationContext = null
- hexo+github打造个人博客系列之Coding Pages去广告
- Hook函数三步走(SetWindowsHookEx、UnhookWindowsHookEx、CallNextHookEx)