算法日记 数组模拟链表

单链表

 只要创造两个数组,一个储存数据,另一个储存地址,理论上来讲就可以模拟链表。

数组头插法模拟

2fc0d9a6b0aa47409856a046aafde3ad.jpg

 如图所示,头插法就是将插入节点与储存地址的数组建立联系,再改变左指针指向。

1:初始化。让头结点head=-1表示NULL,并且让idx=0。idx在此处存放要用到的下标,每用一次,idx++。2:建立联系。先储存数据。val[idx]=x。再建立联系。ne[idx]=head。若第一次插入,就表示ne[idx]此时=Null。

3:改变指向。head=idx。最后idx++。这里可以理解为head是一个指针。idx也可以理解为记录了操作次数。

在下标为k的数据后插入节点。

总体方法与头插法一样,只是将head换成了ne[k]。

删除节点

只需要改变指向。

3a92f85704a14ed39b568668ab066c0b.jpg

 双链表

双链表是在原单链表的基础上,新增加了一个反方向的指针。即每个元素都有左指针l[]右指针r[]。插入原则也是先储存数据,再建立联系,再改变指向。

f991c461cd7b4fd69480557be0e321a1.jpg

 建立联系时是双向建立,并且在改变指向的时候,一定要先进行l[r[k]]=idx,再进行r[k]=idx的操作。若先进行后者,r[k]会被改变。

1c5fc0ae2f424efa8ee573d5b07ac899.jpg

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值