hello,everybody.今天我们一起来学习,线性表的静态链表。C语言的指针变量,使我们可以操作内存的地址。但是,一些其他没有指针变量的设计语言,就没办法对内存进行操作。那我们上堂课的单链表,在这些没有指针的编程语言中,就无法实现了。这时候,静态链表就出生了。
静态链表:用数组描述的链表叫做静态链表。
静态链表是为了,使那些没有指针的设计语言实现单链表能力的方法。它的思路是这样的,创建一个数组。使每个数组元素具有两个数据域,一个存放data,一个存放cur.cur,相当于单链表中的next。
静态链表的结构代码:
#define MAXSIZE 1000 /*假设链表的最大长度是1000*/
typedef struct
{
ElemType data;
int cur;/*游标(Cursor),为0时表示无指向*/
}Component,StaticLinkList[MAXSIZE];我们把未被使用的数组元素称为备用链表,数组下标为0的数据元素,不存数据,它的cur存放的是备用链表的第一个结点的下标。
而数组的最后一个下标的Cur存放的是第一个有数值的
元素下标,相当于单链表中的头结点作用。
这张图,是一个空的静态链表。首先,第一个数组元素,data域不存数据。cur存放的是备用链表中的第一个未被使用分量的下标。因为是空表,所以下标为1的分量就是第一个未被使用的分量。再看最后一个数据元素,data域也是不存数据。cur存放的是第一个有值的数据元素的下标。相当于头结点。
这幅图,是初始化静态表的算法。
静态链表的插入与删除:
实现静态链表的插入与删除,需要我们实现生成结点,回收结点算法。下面是对应算法的截图:
生成结点的算法。
回收结点的算法.
删除的算法:
删除的算法。
静态链表的优缺点:
优点:
在插入、删除操作时,只需要修改游标,不需要移动元素,从而改进了
在顺序存储结构中的插入和删除操作需要移动大量的元素的缺点。
缺点:
没有解决连续分配带来的表长难以确定的问题
失去了顺序存储随机存取的特性