数据结构之静态链表

定义

用两个数组实现链表,一个数组存储数据,另一个数组记录当前数据的后继的下标。

示例

链表
数据:data[] = {-1, 34, 28, 53, 16, 25, -1, -1, -1, -1}
后继:next[] = { 1, 2, 3, 4, 5, -1, -1, -1, -1, -1}

说明

-1: 表示无效值

  1. data[0],无数据值,表示头节点
  2. next[0]为1,表示data[0]的后继为data[1]
  3. next[1]为2,表示data[1]的后继为data[2]
  4. next[2]为3,表示data[2]的后继为data[3]
  5. next[3]为4,表示data[3]的后继为data[4]
  6. next[4]为5,表示data[4]的后继为data[5]
操作
  1. 插入
    如:在28,前面插入17,则数组变化为
    数据:data[] = {-1, 34, 28, 53, 16, 25, 17, -1, -1, -1}
    后继:next[] = { 1, 6, 3, 4, 5, 2, -1, -1, -1, -1}
    说明:data数组,从下标1(下标0表示头结点)开始找到第一个无效值,当前为下标为6,将其设置为插入的数值,即data[6] = 17;调整34的后继为6,即next[1] = 6;调整17的后继为28,即next[6] = 2;
  2. 删除
    如:删除53,则数据变化为
    数据:data[] = {-1, 34, 28, -1, 16, 25, 17, -1, -1, -1}
    后继:next[] = { 1, 6, 4, -1, 5, 2, -1, -1, -1, -1}
    说明:找到后继节点为53的节点(28),下标为2;保存28的后继下标,即next[2](值为3);设置28的后继为其后继的后继,即next[2] = next[next[2]];设置下标3的数据及后继数组为-1,即data[3] = -1,next[3] = -1
扩展
  1. 循环链表
    后继数组中,设置最后一个节点的后继为头结点,如:
    数据:data[] = {-1, 34, 28, 53, 16, 25, -1, -1, -1, -1}
    后继:next[] = { 1, 2, 3, 4, 5, 0, -1, -1, -1, -1}
  2. 双向链表
    增加一个前驱数组,标识数据的前驱的下标,如
    数据:data[] = {-1, 34, 28, 53, 16, 25, -1, -1, -1, -1}
    后继:next[] = { 1, 2, 3, 4, 5, 0, -1, -1, -1, -1}
    前驱:prex[] = { 5, 0, 1, 2, 3, 4, -1, -1, -1, -1}

参考《算法训练营》

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值