0
点赞
收藏
分享

微信扫一扫

【算法基础课模板笔记+注释】 数据结构02 --- 双链表

时光已翩然轻擦 2022-02-18 阅读 85

声明

本文资料参考acwing算法基础课
地址:https://www.acwing.com

概述

  1. 解决问题:用数组实现双链表
  2. 主要包括:结点内容e[N],结点右指针r[N],结点左指针l[N],下一个可用结点idx
  3. 双链表一般都要使用头尾结点!

模板记忆

这个模板分为四个部分:

  1. 初始化:头尾两个指针+idx
  2. 插入:插入三部曲:内容、指针、被指针++
  3. 删除:两侧指针互相指
  4. 遍历:从头到尾遍历整个链表

模板代码

int e[N], l[N], r[N], idx;  // 使用头尾结点,不需要head变量
void init()
{
    r[0] = 1;  // 头指向尾
    l[1] = 0;  // 尾指向头
    idx = 2;  // idx跳过头尾
}
void add(int k, int x)  // 在k结点后面插入x,一切插入都可以用这句实现
{
    e[idx] = x;  // 改结点内容
    l[idx] = k, r[idx] = r[k];  // 改前后指针
    l[r[k]] = idx, r[k] = idx ++ ;  // 改两侧结点指针(先改右侧的)
}
void del(int k)  // 删除k结点
{
    r[l[k]] = r[k];  // 两侧结点互指
    l[r[k]] = l[k];
}
for (int i = r[0]; i != 1; i = r[i]) cout << e[i] << ' ';  // 遍历整个链表
举报

相关推荐

0 条评论