数组模拟链表
Posted lngstart
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数组模拟链表相关的知识,希望对你有一定的参考价值。
主要的好处是静态的,因此不需要每一次都动态的new,所以在做算法题的时候能够节省时间!
数组模拟单链表
利用两个数组模拟,一个数组存储val值,另一个数组存储其下一个节点的
index
,存val数组的index
值对应在next数组中
代码如下
int e[N], ne[N];
int head, idx;
void init(){
head = -1;//开始为空,-1代表空集
idx = 1;
}
//将数据加入到头部,就像头插法一样
void add_to_head(int x){
e[idx] = x;
ne[idx] = head;
head = idx;
idx++;
}
//删除下标为k的点
void del(int k){
ne[k] = ne[ne[k]];
}
void insert(int k, int x){
e[idx] = x;
ne[idx] = ne[k];
ne[k] = idx;
idx++;
}
数组模拟双向链表
我们假定链表位于
index
0和1之间
物理地址是在index 0, 1之后,但是逻辑地址是在index 0, 1之间(就是index全在0, 1之间)
代码如下
int e[N], l[N], r[N], idx;
void init(){
//初始化,使得0, 1位置为两个端点
idx = 2;
r[0] = 1;//开始
l[1] = 0;//结束
}
//index为k的右边插入
void add(int k, int x){
e[idx] = x;
l[idx] = k;
r[idx] = r[k];
l[r[k]] = idx;
r[k] = idx;
idx++;
}
void remove(int k){
r[l[k]] = r[k];
l[r[k]] = l[k];
}
数组模拟链表理解:实际的索引值在另外数组中对应索引处存放指向的元素位置的索引
以上是关于数组模拟链表的主要内容,如果未能解决你的问题,请参考以下文章
NC41 最长无重复子数组/NC133链表的奇偶重排/NC116把数字翻译成字符串/NC135 股票交易的最大收益/NC126换钱的最少货币数/NC45实现二叉树先序,中序和后序遍历(递归)(代码片段
数组和链表的区别ArrayList和LinkedList的区别使用LinkedList模拟栈和队列