zoukankan      html  css  js  c++  java
  • 数据结构_链表及邻接表

    单链表

    两种形式

    结构体形式 : 申请新节点太慢

    struct List {
        int data;
        List *next;
    }
    

    数组模拟

    代码模板
    const int N = 1e6 + 10;
    int e[N], ne[N], head, idx;
    
    // 初始化:head存的是头结点下标,用idx分配空间
    void init() {
        head = -1; idx = 0;
    }
    // 头插法
    void add_to_head(int x) {
        e[idx] = x;
        n[idx] = head;
        head = idx;
        idx++;
    }
    // 删除节点
    void del(int k) {
        n[k] = n[n[k]];
    }
    // 在第k个插入的数后插入一个数
    void add(int k, int x) {
        e[idx] = x;
        n[idx] = n[k];
        n[k] = idx;
        idx++;
    }
    void display() {
        for(int i = head; i != -1; i = ne[i)
            printf("%d ", e[i]);
    }
    

    双链表(用于优化)

    代码模板

    const int N = 1e6 + 10;
    int e[N], l[N], r[N], idx;
    
    void insert(int a, int x) {
        e[idx] = x;
        l[idx] = a, r[idx] = r[a];
        l[r[a]] = idx, r[a] = idx ++ ;
    }
    
    // 删除节点a
    void remove(int a) {
        l[r[a]] = l[a];
        r[l[a]] = r[a];
    }
    

    邻接表

    代码模板

    const int N = 1e6 + 10;
    int e[N], ne[N], h[N], idx;
    
    void init() {
        memset(h, -1, sizeof h);
        idx = 0;
    }
    
    // 加边:(a, b)表示由a指向b
    void add(int a, int b) {
        e[idx] = b, ne[idx] = h[a], h[a] = idx++;
    }
    
    // 遍历: 表示以ver指向的节点
    void travel(int r) {
        for(int i = h[ver]; i != -1; i = ne[i])
            printf("%d", e[i]);
    }
    
  • 相关阅读:
    POJ2299--树状数组求逆序数
    每周总结
    2016湖南省赛--A题--2016
    ACM暑期训练总结
    jQuery实现拖动布局并将排序结果保存到数据库
    TP3.2整合kindeditor
    TP3.2整合uplodify文件上传
    Sublime Text3 使用
    ThinkPHP AJAX分页及JS缓存的应用
    Thinkphp分页类使用
  • 原文地址:https://www.cnblogs.com/Hot-machine/p/13191622.html
Copyright © 2011-2022 走看看