链表

养成了开篇说废话的好习惯, 啊,写之前没想到要用指针来着,指针废qwq

链表

+++

认识一下

链表 & 数组都可用于存储数据,链表通过 指针 来连接元素, 而数组是把所有元素按次序存储

各自优势:

链表 : 方便地删除、插入数据 —— (O(1)) ,但随机访问数据 —— (O(n))

数组 : 随机访问数据 —— (O(1)) , 删除、插入数据 —— (O(n))


构建

单向链表

  • 数据域 : 存放数据
  • 指针域 : 连接当前节点和下一节点
struct Node {
    int value;
    Node *nxet;
}

双向链表

不同于单向 : 指针域 : 连接当前节点和下一节点

struct Node {
    int value;
    Node *left, *right;
}

向链表中插入(写入)数据

单向链表

void insert(int i, Node *p) {
    Node *node = new Node;
    node->value = i;
    node->nxet = p->nxet;
    p->nxet = node;
}

img

单向循环链表

将链表的头和尾连接起来

void insert(int i, Node) {
    Node *node = new node;
    node->value = i;
    node->nxet = NULL;
    if(p == NULL) { //判断原链表是否为空,空则自身循环
        p = node;
        node->nxet = node;
    } else { //不空则正常插入
        node->nxet = p->nxet;
        p->nxet = node;
    }
}

img

双向循环链表

void insert(int i, Node *p) {
    Node *node = new Node;
    node->value = i;
    if(p == NULL) {
        p = node;
        node->left = node;
        node->right = node;
    } else {
        node ->left = p;
        node->right = p->right;
        p->right->left = node;
        p->right = node;
    }
}

从链表中删除数据

单向(循环)链表

p->nxet 的值覆盖给 p ,同时更新 p 的下下个节点

void deletenode(Node *p) {
    p->value = p->nxet->value;
    Node *t = p->nxet;
    p->nxet = p->nxet->nxet;
    delete t;
}

img

双向循环链表

画个图自行理解一下就好啦( ̄▽ ̄)/

void deletenode(Node *p) {
    p->left->right = p->right;
    p->right->left = p->left;
    Node *t = p;
    p = p->right;
    delete t;
}

撒花✿✿ヽ(°▽°)ノ✿

还是数组香 ↓ 我直接搬书

struct Node{
    int value;
    int pre, next;
} node[SIZE];
int head, tail, tot;
int init(){
    tot = 2;
    head = 1; tail = 2;
    node[head].next = tail;
    node[tail].pre = head;
}
void insert(int p, int val){
    q = ++ tot;
    node[q].value = val;
    node[node[p].next].pre = q;
    node[q].next = node[p].next;
    node[p].next = q;
    node[q].pre = p;
}
void remove(int p){
    node[node[p].pre].next = node[p].next;
    node[node[p].next].pre = node[p].pre;
}
void clear(){
    memset(node, 0, sizeof(node));
    head = tail = tot = 0;
}

❀ ❀

​ ❀

而我们终其一生,都希望能成为更好的人。
原文地址:https://www.cnblogs.com/moziii/p/13288507.html