数据结构静态链表

静态链表是一种使用数组描述的链表,利用游标指示结点位置,避免了插入和删除时移动元素的开销。在内存中开辟连续空间作为数组,建立备用链表用于存储空节点。初始化时,创建包含数据和游标的结构体数组,并通过函数从备用链表中取出节点用于数据存储。在实际应用中,可以方便地取节点和赋值。
摘要由CSDN通过智能技术生成

为了和指针型的线性链表相区别,由数组描述的链表叫静态链表
数组的一个分量表示一个结点,同时用游标(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;    
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
静态链表是一种使用数组实现的链表结构。它通过数组中的元素自身的指针来实现链表的连接关系。以下是静态链表的基本操作: 1. 初始化:创建一个包含足够多元素的数组,每个元素包含两个字段,一个用于存储数据,另一个用于存储指向下一个元素的索引。初始化时,设置数组中所有元素的指针字段为-1,表示链表为空。 2. 插入:插入操作将新元素插入到静态链表中的指定位置。首先找到一个空闲位置并将新元素插入其中,然后将前一个元素的指针字段指向新元素,在将新元素的指针字段指向原来位置的后继元素。 3. 删除:删除操作将静态链表中指定位置的元素移除。首先将要删除的元素的前一个元素的指针字段指向要删除元素的后继元素,然后将要删除元素所在位置设置为空闲。 4. 查找:查找操作可以根据给定的关键字或索引在静态链表中找到对应的元素。可以通过遍历整个链表,逐个比较每个节点中存储的值与给定关键字或索引进行匹配。 5. 更新:更新操作用于修改静态链表中指定位置元素的值。首先找到要更新的元素位置,然后将其值进行修改。 需要注意的是,静态链表的插入和删除操作可能需要额外的空间来存储空闲位置的索引信息,以便快速找到可用位置。另外,由于静态链表使用数组实现,插入和删除操作可能会涉及元素的移动,因此效率较低,适用于对数据的频繁查找而不是插入和删除的场景。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值