静态链表

静态链表定义

用数组代替指针,来描述单链表。
首先让数组的元素都是由两个数据域组成,data和cur 。也就是说,数组的每个下标都对应一个 data 和一个 cur 。数据域 data,用来存放数据元素,也就是要处理的数据,而游标 cur 相当于单链表中的 next 指针,存放该元素的后继在数组中的下标 。

这种用数组描述的链表叫做静态链表。,通常为了方便插入数据,我们会把数组建立得大一些。以便有一些空闲空间可以便于插入而不至于溢出。在这里插入图片描述在这里插入图片描述
// 对于不提供结构 struct 的程序设计语言,可以使用一对并行数据data 和 cur 来处理。

  • 另外我们对数组第一个和最后一个元素作为特殊元素处理,不存数据。
  • 我们通常把未被使用的数组元素称为备用链表
  • 数组第一个元素,即下标为 0 的元素的 cur 就存放备用链表的第一个结点的下标
  • 而数组的最后一个元素的 cur 则存放第一个有数组的元素的下标。相当于单链表的头结点作用。
    在这里插入图片描述
    在这里插入图片描述
    举例分析:
    假设我们已经将数据存入静态链表,比如分别存放着“甲“ , ”乙“ ,”丁“ ,”戊“ ,”己“ ,”庚”等数据。它的状态如下。在这里插入图片描述
    此时 “ 甲” 这里就存有下一个元素 “乙”的游标 2 。“庚”是最后一个有值元素,所以它的 cur 设置为 0。而最后一个元素的 cur 则因 “甲”是第一有值元素所以存有它的下标为 1。 而第一个元素则因空闲空间的第一个元素下标为 7,所以它的 cur 存有 7。

静态链表的插入操作

静态链表中要解决的是:如何用静态模拟动态链表结构的存储空间的分配,需要时申请,无用时释放。
为了辨明数组中哪些分量未被使用,解决的办法是将所有未被使用过的和已被删除的分量用游标链成一个备用的链表,每当进行插入时,便可以从备用链上取得第一个结点作为待插入的新结点。
在这里插入图片描述在这里插入图片描述

假如我们要插入丙到甲和乙之间:

  • 当我们执行插入语句,调用代码时,输入 i 值为3。
  • 第 4 行让 k = MAX_SIZE - 1 = 999。
  • 第 7 行, j = Malloc_SSL(L) = 7。此时下标为 0 的 cur 也因为 7 要被占用而更改备用链表的值为 8.
  • 第 11 ~ 12行,for 循环1 由 1 到 2 ,执行两次。代码 k = L[k].cur ;使得 k = 999, 得到 k = L[999].cur = 1,再得到 k = L[1].cur = 2.
  • 第 13行, L[j].cur = L[k].cur ; 因 j = 7,而 k = 2得到 L[7].cur = L[2] .cur =3 。这就是让“丙”把它的 cur 改为 3.
  • 第 14 行,L[k].cur = j;意思是 L[2].cur = 7。也就是让 “乙”,把它的cur 改为指向 “丙”的下标 7.
    - [ ]

静态链表的删除操作

删除元素时,需要释放结点的函数 free()。在这里插入图片描述
在这里插入图片描述在这里插入图片描述在这里插入图片描述

静态链表优缺点

在这里插入图片描述
总的来说,静态链表是为了给没有指针的高级语言设计的一种能实现单链表的方法,平时可能会用不到,但有备无患。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值