zoukankan      html  css  js  c++  java
  • 数组模拟链表

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

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

  • 相关阅读:
    php数组操作
    DedeCMS栏目页调用当前栏目名和上级栏目名
    ThinkPHP递归删除栏目
    WebUploader
    js中的事件委托或是事件代理
    thinkphp框架if标签条件表达式
    sublime插件安装
    thinkphp分页
    织梦自定义变量使用
    php foreach用法和实例
  • 原文地址:https://www.cnblogs.com/Lngstart/p/12271071.html
Copyright © 2011-2022 走看看