用数组模拟链表

1.什么是数组模拟链表:

        数组模拟链表是一个什么东东呢?就是在某索引处存储下一个索引。下面举例说明:

       

 

        不知道大家明白了没有。如果我上面的数组定义为a[4],那么我访问a[0]时,所获取的就是下一个位置所对应的索引。也就是我要向访问a[0]的下一个节点,那么我只需要访问a[a[0]],这样,就获取了下一个节点处的值。

2.链表的操作:

       2.1

       把03fristlast进行存储的话,这样的话,在对数组进行操作以后,增加操作我个人感觉也就可以执行了(不明白的话给我回复,我可以给你解释)。此时first=0last=3。(下面会用到)

       

       i. 需要new一个比原数组大1的数组,然后进行数组clone

       ii. 需要修改索引为last的值为数组.length-1(此时为4

       iii. 把新增加的索引处的值改为first(此时为0)

       iv. 修改last的值为数组.length-1

       

                     

       2.2 

       举例:删除索引为1的值所对应的元素(其实不是删除,这个我感觉很不好)。

       i. 获取索引1处的值:2

       ii. 获取索引2处的值:3

       iii. 讲1处的值改为2处的值

       iv. 如果删除的为last处的值,需要将last改为值为last处的索引,例如删除4,那么last需要改为值为4处的索引:3.

       v. 如果删除的为first处的值,那么将first改为索引first处的值,例如删除0,那么first需要改为索引0处的值:1

              

       这样,就没有了指向2处的元素,这个元素也就被“删”掉了。

       2.3 其他操作

       其他操作需要很强的依赖数组操作,有兴趣可以自己研究一下,由于这次我做的例子用到的不多,我也就不再一一列举了(偷个懒哈)

3.个人对该算法的看法:

        i.我个人感觉这个算法也就是自己感兴趣研究研究还行,这个假删除是一个弊病。

       ii.删操作中,最大的问题在于删除索引为last的数据,需要用一个for循环来找到谁的值为last

       iii.这个算法我个人还有好多东西想不明白,比如交换两个数据的位置(当然这个不在链表的讨论范围内,单项回环链表中是没有这个方法的),删除操作里面那个图的顺序为0134(先不考虑回环),如果我想修改为13的位置,那么我首先需要判断13谁在前谁在后(此处是1在前,这个是需要判断的),然后还得再查值为1处的索引,然后修改成为3处的值,然后再把31处的索引相互交换。虽然没有几个操作,但是有需要查一个位置。

       那么如果我要进行排序呢?算法的复杂度是不是有点高呢,因为需要查,所以增加了一阶复杂度。

       下篇我将举一个例子,用来解决著名的Josephus问题

       PS:由于写这篇文章的时候,忘了把找好的资料拿上了,所以造成了有些问题不是链表所讨论的范畴,说出来只是希望大家对此算法有更加深刻的理解而已,欢迎拍砖

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值