码迷,mamicode.com
首页 > 其他好文 > 详细

静态链表

时间:2015-02-03 22:34:01      阅读:266      评论:0      收藏:0      [点我收藏+]

标签:


概念:

单链表的实现很好的借助了指针的作用,但是对一起早起的高级编程语言,他们没有指针,如果想实现单链表,就得用数组来代替指针。

首先我们让数组的元素都是由两个数据域组成,data和cur。也就是说数组的每个下标都对应一个data和一个cur。cur相当于单链表中的next指针,存放该元素的后继在数组中的下标。

我们把这种数组描述的链表叫做静态链表。


实现规则:

对数组的第一个和最后一个元素结点做特殊处理,他们不存放数据。通常把未被使用的数组元素成为备用链表,数组的第一个元素,即下标为0的元素的cur就存放备用链表的第一个结点的下标;而数组的最后一个元素的cur则存放第一个有数值的元素的下标,相当于单链表中的头结点的作用。

当整个链表为空时,如下图所示:

技术分享

数组的最后一个元素指向第一个有数据的元素的下标,对于空表来说,它的cur等于0,代表后面没有元素,类似于NULL。

而对于有数据的静态链表,如下图所示:

技术分享

最后一个有值元素,它的游标cur设置为0。同样,如果下标为0的元素的cur等于0,代表没有备用的链表可以使用。


静态链表的插入和删除:

静态链表中要解决的问题是:如何用静态模拟动态链表结构的存储空间的分配,需要的时候申请,不需要的时候释放,类似C语言的malloc和free这两个函数。这里就要自己实现这两个函数,对已用链表和备用链表这两个链表做相应的操作。

现在如果我们需要在“乙”和“丁”之间插入一个值为“丙”的元素,只需要将“乙”的cur改为7,表示下一位是“丙”,并将“丙”的cur改为3,表示下一位是丁。

技术分享

现在如果我们删除了第一个元素“甲”,表示现在“甲”这个位置空出来了,如果未来有新人要来则优先考虑这里,所以删除的位置成为第一个优先空位,即首元素的cur为1, 第一个元素位置的cur改为8,而下标为8的位置cur改为9,最后元素位置的cur改为2。

技术分享

http://blog.csdn.net/jnu_simba/article/details/8831150

静态链表

标签:

原文地址:http://www.cnblogs.com/stemon/p/4271037.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!