主要的好处是静态的,因此不需要每一次都动态的new,所以在做算法题的时候能够节省时间!

利用两个数组模拟,一个数组存储val值,另一个数组存储其下一个节点的index,存val数组的index值对应在next数组中

  1. int e[N], ne[N];
  2. int head, idx;
  3. void init(){
  4. head = -1;//开始为空,-1代表空集
  5. idx = 1;
  6. }
  7. //将数据加入到头部,就像头插法一样
  8. void add_to_head(int x){
  9. e[idx] = x;
  10. ne[idx] = head;
  11. head = idx;
  12. idx++;
  13. }
  14. //删除下标为k的点
  15. void del(int k){
  16. ne[k] = ne[ne[k]];
  17. }
  18. void insert(int k, int x){
  19. e[idx] = x;
  20. ne[idx] = ne[k];
  21. ne[k] = idx;
  22. idx++;
  23. }

我们假定链表位于index0和1之间
物理地址是在index 0, 1之后,但是逻辑地址是在index 0, 1之间(就是index全在0, 1之间)

  1. int e[N], l[N], r[N], idx;
  2. void init(){
  3. //初始化,使得0, 1位置为两个端点
  4. idx = 2;
  5. r[0] = 1;//开始
  6. l[1] = 0;//结束
  7. }
  8. //index为k的右边插入
  9. void add(int k, int x){
  10. e[idx] = x;
  11. l[idx] = k;
  12. r[idx] = r[k];
  13. l[r[k]] = idx;
  14. r[k] = idx;
  15. idx++;
  16. }
  17. void remove(int k){
  18. r[l[k]] = r[k];
  19. l[r[k]] = l[k];
  20. }

数组模拟链表理解:实际的索引值在另外数组中对应索引处存放指向的元素位置的索引

版权声明:本文为Lngstart原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/Lngstart/p/12271071.html