当前位置: 首页 > news >正文

数组模拟单链表-acwing

题目:

代码

new(),申请结点空间时间性能慢。

数组模拟链表,时间性能快,通过下标索引代替指针域。

head = -1, 头结点指针置空,也就是初始化位置为-1

idx 当前所需要用到的位置,向后不断申请空间的移动指针(下标)

e[i]  表示i指向的值域,值

ne[i] 表示i指向的指针域,指针,指向下一个结点的位置

#include<bits/stdc++.h>
using namespace std;const int N = 1e5+10;// head 指向头结点
//e[i] 结点i的值域
//ne[i] 结点i的指针域,索引下一个点的位置
//idx 当前需要使用的位置,相当于指针向后移动,申请结点空间
int head, e[N], ne[N], idx;void init() {head = -1; idx = 0;
}
// 头插法
//刚开始创建的是一个,idx = 0,nex[idx] 指向空,头结点为-1的结点。
void add_to_head(int x) {//指向头结点,自身成为头结点。idx 向后移动e[idx] = x,ne[idx] = head, head = idx++;
}
//将x 插入到下标是k的点的后面
void add(int k, int x) {e[idx] = x, ne[idx] = ne[k], ne[k] = idx++;
}
// 将下标是k的点后面的点删掉
void remove(int k) {ne[k] = ne[ne[k]];
}int main() {int m;cin >> m;init();while(m --) {int k, x;char op;cin >> op;if(op == 'H') {cin >> x;add_to_head(x);}else if(op == 'D') {cin >> k;if(!k) head = ne[head];else remove(k - 1); // 因为下标从0开始,第k个要-1偏移得到下标}else {cin >> k >> x;add(k-1, x);}}for(int i = head; i!=-1; i = ne[i]) cout << e[i] << " ";cout << endl;return 0;
}

图文直观分析 


http://www.mrgr.cn/news/68598.html

相关文章:

  • go 集成Gin Web开发框架
  • vue3 基于element-plus进行的一个可拖动改变导航与内容区域大小的简单方法
  • 【报告PDF附下载】2024人工智能大模型技术财务应用蓝皮书
  • 实习冲刺Day16
  • 高校宿舍信息管理系统小程序
  • 记录加密请求
  • Redis - 主从复制
  • 回溯算法详解与剪枝优化
  • 叶子祺东京被偶遇 素颜逆天 身材火辣
  • C语言初阶必会的练习题(3)之位操作符(^ 、、>>等)的应用
  • 什么是crm客户关系管理系统?全面认识指南
  • C++ EBO介绍
  • qt QClipboard详解
  • petty 状态管理库文档
  • 【Linux】进程信号全攻略(一)
  • 【论文复现】基于深度学习的手势识别算法
  • 2024年了,还适合入行嵌入式吗?
  • jdk17启动项目报错
  • 安装指定版本的transfomers报错ERROR: Failed building wheel for tokenizers
  • 深究JS底层原理
  • np.clip函数
  • prompt资料收集
  • 《瀚文欣赏的唐诗集》
  • 【高等数学】微分学的应用
  • 挑选BPM软件秘籍,揭秘六大必备功能
  • Python练习12