码迷,mamicode.com
首页 > 编程语言 > 详细

数组模拟链表

时间:2020-02-06 22:59:11      阅读:89      评论:0      收藏:0      [点我收藏+]

标签:另一个   list   val   头部   lis   链表   索引   一个   静态   

主要的好处是静态的,因此不需要每一次都动态的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++;
}

数组模拟双向链表

我们假定链表位于index0和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];
}

数组模拟链表理解:实际的索引值在另外数组中对应索引处存放指向的元素位置的索引

数组模拟链表

标签:另一个   list   val   头部   lis   链表   索引   一个   静态   

原文地址:https://www.cnblogs.com/Lngstart/p/12271071.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!