• 1.单链表


     

     

     数组模拟单链表,图论的基础

    单链表用的最多的是邻接表,邻接表是n个单链表,邻接表是树和图的存储方式

    单链表 >> 邻接表 >> 存储树和图

     单链表开始时是head指向空节点

    插入元素后长这样

     每个节点存储两个值

    值:val

    指针:next

     然后用数组模拟就需要定义几个数组

    e[N]:存储每个节点的val值

    ne[N]:存储每个点的next指针是多少

    每个节点都有编号,空节点用-1表示

    e[i]和ne[i]是用下标关联起来

    0号点的值就是e[0],0号点的next指针就是ne[0] = 1

     1 #include <bits/stdc++.h>
     2 using namespace std;
     3 const int N = 100010;
     4 //head表示头结点下标
     5 //e[i]表示节点i的值 
     6 //ne[i]表示节点i的next指针是多少,就是说节点i的下一个点的下标是什么
     7 //idx存储当前已经用到了哪个点
     8 //注意idx是从0开始的,0号点是第一个插入的点,第k个插入点的下标是k - 1
     9 //当我们需要分配一个新的点的时候,把当前idx指向的节点分配给它,然后idx++
    10 int head, e[N], ne[N], idx;
    11 //初始化 
    12 void init() {
    13     head = -1;
    14     idx = 0; //当前可以从0号点开始分配
    15 }
    16 //将值为x的节点插入到头结点 
    17 void add_to_head(int x) {
    18     e[idx] = x;
    19     ne[idx] = head;
    20     head = idx;
    21     idx++;
    22 }
    23 //将值为x的节点插入到下标为k的节点后面
    24 //在下标是k - 1的点后面插入一个点
    25 void add(int k, int x) {
    26     e[idx] = x;
    27     ne[idx] = ne[k];
    28     ne[k] = idx;
    29     idx++;
    30 }
    31 //将下标为k的节点的后面的一个节点删除
    32 //第k个插入点的下标是k - 1
    33 void remove(int k) {
    34     ne[k] = ne[ne[k]];
    35 } 
    36 int main() {
    37     init();
    38     int m;
    39     cin >> m;
    40     while (m--) {
    41         int k, x;
    42         string c;
    43         cin >> c;
    44         if (c[0] == 'H') {
    45             cin >> x;
    46             add_to_head(x);
    47         } else if (c[0] == 'D') {
    48             cin >> k;
    49             if (k == 0) {
    50                 head = ne[head];
    51             } else {
    52                 remove(k - 1);
    53             }
    54         } else {
    55             cin >> k >> x;
    56             add(k - 1, x);
    57         }
    58     }
    59     for (int i = head; i != -1; i = ne[i]) {
    60         cout << e[i] << " ";
    61     }
    62     cout << endl;
    63     return 0;
    64 }
  • 相关阅读:
    【Spring】构建Spring Web应用
    【记录】Spring项目转化为Spring Web项目
    【生活工具】你能带我回家么,可能明天要下雨了。
    【Spring】面向切面之AOP
    【Spring】高级装配
    【Linux】Linux学习笔记(完结)
    【Spring】Spring的bean装配
    【Netty】源码分析目录
    【项目实战】多线程环境下正确创建单例
    【环境搭建】使用Jekyll搭建Github博客
  • 原文地址:https://www.cnblogs.com/fx1998/p/13284023.html
Copyright © 2020-2023  润新知