数据结构之静态链表

定义

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

示例

链表
数据: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}

参考《算法训练营》

你可能感兴趣的:(算法,数据结构,链表,算法)