ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

磊磊零基础打卡算法:day12 c++静态单链表

2022-05-15 18:01:33  阅读:167  来源: 互联网

标签:head idx int 结点 ne c++ 磊磊 打卡 void


5.15

静态单链表


简单的方法:

成员变量:

int e[N],//存放节点的值
 ne[N],存放结点的next
 head,头结点指针
 idx;变化的指针
  • 初始化:

    • void init() {
          head = -1;//头结点最初指向-1
          idx = 0;//初始的位移指针是0;
      }  //初始化链表
  • 在头部位置添加:

    • void add_to_head(int x) {
          e[idx] = x, ne[idx] = head, head = idx++;
      }  //将x的值存在idx位置,将idx的下一个指向head结点,然后将idx,head指针变化位置,最后一步先赋值再加加;经典的头插法
  • 在任意位置插入

    • void add(int k, int x) {  //插入k后面的位置
          e[idx] = x, ne[idx] = ne[k], ne[k] = idx++;
      }//原理与在头部位置插入一样
  • 删除某个位置的结点:

    • void remove(int k) {  //删除k结点的后一个结点
          ne[k] = ne[ne[k]];
      //头结点的下一位,变成头结点的下一位的下一位,就相当于删除了k位置的结点
      }

例题

链接:

https://www.acwing.com/problem/content/828/


 ps:自己画的图有点小丑,见谅

 

 

 

#include "iostream"
using namespace std;
const int N = 100010;
int head, e[N], ne[N], idx;
void init() {
    head = -1;
    idx = 0;
}  //初始化链表
void add_to_head(int x) {
    e[idx] = x, ne[idx] = head, head = idx++;
}  //将x的值存在idx位置,将idx的下一个指向head结点,然后将idx,head指针变化位置,经典的头插法
void add(int k, int x) {  //插入k后面的位置
    e[idx] = x, ne[idx] = ne[k], ne[k] = idx++;
}
void remove(int k) {  //删除k结点的后一个结点
    ne[k] = ne[ne[k]];
}
int main() {
    int m;
    cin >> m;
    init();
    while (m--) {
        int k, x;
        char p;
        cin >> p;
        if (p == 'H') {
            cin >> x;
            add_to_head(x);
        } else if (p == 'D') {
            cin >> k;
            if (!k)
                head = ne[head];
            else
                remove(k - 1);
        } else {
            cin >> k >> x;
            add(k - 1, x);
        }
    }
    for (int i = head; i != -1; i = ne[i])
        //判断结束的位置其实是head=-1,也就是最开始的位置,i每次变化指针位置,指向下一个;
        cout << e[i] << " ";
    return 0;
}

标签:head,idx,int,结点,ne,c++,磊磊,打卡,void
来源: https://www.cnblogs.com/gwl999/p/16273833.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有