链表

一、静态链表

1. 静态单向链表

#include <bits/stdc++.h>

using namespace std;
const int N = 1000;

int v[N] ,ne[N];    //数组v用来存放当前节点的值, 数组ne用来存放当前节点的后指针
int head ,idx;      //head代表头节点, idx代表当前分配节点的编号

//初始化链表, 将头指向空, 分配的节点编号为0
void init(){
    head = -1;
    idx = 0;
}

//插入操作, 在头节点后加入一个值为x的节点
void insert(int x){
    v[++idx] = x;
    ne[idx] = head, head = idx;
}

//删除节点x后面的一个点, 直接将节点x的后指针指向x后面的后面那个点即可
void remove(int x){
    ne[x] = ne[ne[x]];
}

int main(){

    ios::sync_with_stdio(false);
    cin.tie(0);
    init();
    //这个部分自己根据题意写
    return 0;
}

2. 静态双向链表

#include <bits/stdc++.h>

using namespace std;
const int N = 1000;

int v[N], pre[N], ne[N];                //数组v存储当前节点的值,数组pre存储当前节点的前指针,数组ne存储当前节点的后指针
int idx;                                //idx表示当前分配节点的编号

//初始化链表, 分配编号1作为头节点, 编号2作为尾节点, 当前分配的节点编号为2
void init() {
    pre[2] = 1, ne[1] = 2;
    idx = 2;
}

//插入操作, 在节点n的后边插入一个值为x的节点, 要注意操作的顺序
void insert(int n, int x) {
    v[++idx] = x;                       //idx自加, 再将值存入节点idx
    pre[idx] = n, ne[idx] = ne[n];      //idx的前指针变为n, 后指针变为n的后指针
    pre[ne[n]] = idx, ne[n] = idx;      //n原先后面的那个点的前指针变为idx, n的后指针变为idx
}

//删除节点n, 直接将n前后两个点的对应指针修改一下即可
void remove(int n) {
    pre[ne[n]] = pre[n];                //n后面那个点的前指针变为n的前指针
    ne[pre[n]] = ne[n];                 //n前面那个点的后指针变为n的后指针
}

int main() {
    ios::sync_with_stdio(false);
    cin.tie(0);
    init();
    //这块自己根据题目要求写
    return 0;
}

二、动态链表

posted @ 2020-11-24 20:19  Xiezeju  阅读(125)  评论(0编辑  收藏  举报