前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【CPP】游标(静态)链表

【CPP】游标(静态)链表

作者头像
ZifengHuang
发布2020-07-29 15:28:43
7260
发布2020-07-29 15:28:43
举报
文章被收录于专栏:未竟东方白未竟东方白

这次的代码基本来自《数据结构与算法分析——C语言描述》这本神书和网上别人写的代码。主要讲一下游标链表的原理。

游标(Cursor)链表,即是用数组和数组下标来代替指针实现链表的一种东西。在许多编程语言中,指针是不被支持的。在这种情况下如果我们需要自己来实现链表(虽然大多数这类语言都不需要自己实现链表),就可以使用数组和游标来实现。由于我们通过声明数组下标变量来代替指针,所以把那个下标变量叫做游标。由于这个链表的储存空间由数组来提供,所以叫做静态链表。

在实现游标链表时,最主要是要模拟出指针(游标),和内存的申请与释放(malloc,free)。这里我们先看看代码头,这次的代码是由纯C的函数构成。

首先我们初始化模拟内存的数组CursorSpace,我们申请一个足够大的数组,然后让这个数组每个元素指向下一位的下标为自己的下一个数,让数组末指向数组头,这样我们就将整个数组内存串成了一个大的循环链表空间,在这里我们让0号位表示空白空间的头。然后这里我们可以看到,每次我们alloc时,函数都会在CursorSpace找到0号位的下一位来返回,然后让0号位指向自己的后一位。这样我们便通过这种指针般的下标申请到了一位空位,且保持着空内存的小循环。然后当我们free时用类似的方法,让打算free的空间被0号位链接,把内容清空,就达成了free的效果。

接着是几个简单的函数,参数中的List L在开头时就声明过了时int类型的数,实际上因为这个程序的内存中可以存放多个链表,所以这个参数代表的是链表的头(头下标)。

刚才上面的MakeEmpty函数中有调用到DeleteList函数。这个函数先将链表头接在0号位,然后一个一个将链表的元素free掉,全部free完自然链表就被删除完全并入了空内存中了。

Insert没有什么特别的,alloc空间后将空间接在链表的目标位置。

然后是Find函数和FindPrevious函数,由于是单链表,所以可以用简单的循环遍历整个链表找出想要的数据位置,利用Find和FindPrevious函数可以和Insert配合达成自由的数据插入操作。

最后是一个简单的Delete函数,Delete函数中要注意的是保证删除后前一个元素能再成功接上后一个元素,而且要注意用IsLast判断是否链表为空。

以上便是这次的静态链表的解释,代码本身比较稳健,大家大可以把代码下载下来然后自己在main函数里去测试这个链表。照例在最后放上代码的下载。

链接:http://pan.baidu.com/s/1hsOnYUo 密码:slgm

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2017-10-07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 未竟东方白 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档