C++ 数组模拟单双向链表实现与优化

前言
本章节聚焦算法题实战,系统讲解算法模块:以《C++ 编程》、《数据结构和算法》等板块以题带点,讲解思路与代码实现,帮助大家快速提升代码能力。
一、链表的概念
1.1 链表的定义
线性表的链式存储就是链表。它是将元素存储在物理上任意的存储单元中,由于无法像顺序表一样通过下标保证数据元素之间的逻辑关系,链式存储除了要保存数据元素外,还需额外维护数据元素之间的逻辑关系,这两部分信息合称结点(node)。即结点有两个域:保存数据元素的数据域和存储逻辑关系的指针域。
1.2 链表的分类

二、链表的模拟实现
2.1 单链表的模拟实现
2.1.1 定义 - 创建 - 初始化
- 两个足够大的数组,一个用来存数据,一个用来存下一个结点的位置。
- 变量
h,充当头指针,表示头结点的位置。 - 变量
id,为新来的结点分位置。

const int N = 1e5 + 10;
int h; // 头指针
int id; // 下一个元素分配的位置
int e[N], ne[N]; // 数据域和指针域
// 下标 0 位置作为哨兵位
// 其中 ne 数组全部初始化为 0,其中 ne[i] = 0 就表示空指针,后续没有结点
// 当然,也可以初始化为 -1 作为空指针,看个人爱好
2.1.2 头插
void push_front( x) {
id++;
e[id] = x;
ne[id] = ne[h];
ne[h] = id;
}





