数据结构里有一种存储结构,叫做静态链表,它能够融合顺序表和链表各自的优点,从而既能快速访问元素,又能快速增加或删除数据元素。
静态链表,也是线性存储结构的一种,它兼顾了顺序表和链表的优点于一身,可以看做是顺序表和链表的升级版。使用静态链表存储数据,数据全部存储在数组中(和顺序表一样),但存储位置是随机的,数据之间"一对一"的逻辑关系通过一个整形变量(称为"游标",和指针功能类似)维持(和链表类似)。提示:想系统学习数据结构的小伙伴,请进入我的个人网站xiexuewu.github.io,有一整套的数据结构和算法教程,提供有完整、可运行的C语言程序,非常适合有C语言基础的初学者。
例如,使用静态链表存储{1,2,}的过程如下:创建一个足够大的数组,假设大小为6,如图1所示:
图1空数组
接着,在将数据存放到数组中时,给各个数据元素配备一个整形变量,此变量用于指明各个元素的直接后继元素所在数组中的位置下标,如图2所示:
图2静态链表存储数据
通常,静态链表会将第一个数据元素放到数组下标为1的位置(a[1])中。
图2中,从a[1]存储的数据元素1开始,通过存储的游标变量,就可以在a[]中找到元素1的直接后继元素2;同样,通过元素a[]存储的游标变量5,可以在a[5]中找到元素2的直接后继元素,这样的循环过程直到某元素的游标变量为0截止(因为a[0]默认不存储数据元素)。类似图2这样,通过"数组+游标"的方式存储具有线性关系数据的存储结构就是静态链表。
静态链表中的节点通过上面的学习我们知道,静态链表存储数据元素也需要自定义数据类型,至少需要包含以下2部分信息:
数据域:用于存储数据元素的值;
游标:其实就是数组下标,表示直接后继元素所在数组中的位置;
因此,静态链表中节点的构成用C语言实现为:
typedefstruct{intdata;//数据域intcur;//游标}