为了和指针型的线性链表相区别,由数组描述的链表叫静态链表
数组的一个分量表示一个结点,同时用游标(cur)代替指针指示结点的位置。这种存储结构仍需要分配较大空间,但在作线性表的插入和删除操作时不需要移动元素,仅需要修改案指针。
静态链表是用结构体数组实现的,首先要在内存中开辟一段连续空间作为数组空间
然后建立备用链表,取备用链表头结点指向的节点作为数据链表的头结点
备用链表的头结点不要删除,用它来指向剩余的空节点
首先定义结构体
typedef struct{
int data;
int cur;
}array[MAXSIZE]
定义了一个结构体类型是array[100],这个类型是一个以结构体类型为元素类型的长度为100的数,可以用array创建这种类型的结构体。
①首先用array创建Space结构体,该Space含有100个元素,每个元素包含数据和游标
array SpaceSpace是一个数组,其每个元素中包含两个数据data和cur
②需将Space初始化为备用链表,通过初始化函数InitSpace实现
//创建备用链表
void InitSpace(array& sapce)
{
//将一维数组space中各分量链接成一个备用链表,space[0].cur为头指针
for(i=0;i<MAXSIZE-1;i++)
{
space[i].cur = i+1;
}
space[MAXSIZE-1].cur = 0;
}
得到如下所示的数组空间,只截取Space[0]-Space[9]这10个元素

③开始从备用链表里取节点存入数据data
首先取节点作为存储数据链表的头结点,如果把备用链表的头结点Space[0]当做数据链表的头节点写程序会很麻烦,所以保留备用链表的头结点,把备用链表头结点的下一个节点当做数据链表的头结点。
Space[0].cur =Space[1].cur //将Sapce[1]节点从备用链表中删除,可以使用了
//现在备用链表的头结点指向了Space[2]

继续取更多节点,并给每个元素赋值
Space[0].cur = Space[2].cur; //将Space[2]拿出来
Space

静态链表是一种使用数组描述的链表,利用游标指示结点位置,避免了插入和删除时移动元素的开销。在内存中开辟连续空间作为数组,建立备用链表用于存储空节点。初始化时,创建包含数据和游标的结构体数组,并通过函数从备用链表中取出节点用于数据存储。在实际应用中,可以方便地取节点和赋值。
最低0.47元/天 解锁文章
1万+

被折叠的 条评论
为什么被折叠?



