静态链表
对于一些语言,如Basic、Fortran等早期的编程高级语言,由于没有指针,链表结构按照其他高级语言指针的讲法,它就没法实现了。怎么办呢?
有人就想出来用数组代替指针,来描述单链表。
首先我们让数组的元素都是由两个数据域组成,data和cur。也就是说,数组的每个下标都对应一个data和一个cur。数据域data,用来存放数据元素,也就是通常我们要处理的数据,而cur相当于单链表的next指针,存放该元素的后继在数组中的下标,我们把cur叫做游标。
我们把这种用数组描述的链表叫做静态链表,这种描述方法还有起名叫做游标实现法。
为了我们方便插入数据,我们通常会把数组建立得大一些,以便有一些空闲空间可以便于插入时不至于溢出。
/*线性表的静态链表存储结构*/
#define MAXSIZE 1000 /*线性表的最大长度是1000*/
typedef struct {
ElemType data;
int cur; /*游标(cursor):为0时表示无指向*/
}Component,StaticLinkList[MAXSIZE];
另外我们对数组第一个和最后一个元素作为特殊元素处理,不存数据。我们通常把未被使用的数组元素称为备用链表。而数组的第一个元素,即下标为0的元素的cur就存放备用链表的第一个结点的下标;而数组的最后一个元素的cur则方寸第一个有数值的元素的下标,相当于单链表中的头结点作用。
初始化静态链表代码:
/*将一维数组space中各分量链成一备用链表*/
/*space[0].cur为头指针,"0"表示空指针*/
Status InitList(StaticLinkList space) {
int i;
for(i<0;i<MAXSIZE-1;I++)
space[i].cur = i+1;
space[MAXSIZE-1].cur = 0; /*目前静态链表为空,最后一个元素的cur为0*/
return OK;
}
静态链表的插入操作
静态链表中要解决的是