数据结构:XOR链表--- 一个空间高效的双向链表

XOR链表— 一个空间高效的双向链表

传统的双向链表,要求有两个地址阈,分别存储前一个和后一个节点的地址。这里我们提到的空间高效的双向链表,仅仅为每一个节点申请一个地址空间,这空间有效的双向链表叫做XOR链表。在XOR链表中不在存储一个确定的地址,而是对于每一个节点存储前一个地址和后一个地址的XOR值。

这里写图片描述

看上面的双向链表,这是原始的双向链表,下面简单介绍其和XOR链表的不同。
传统的双向链表:
Node A:
prev = NULL,next = add(B) // 表示前一个是NULL,下一个节点的地址是B
Node B:
prev = add(A),next = add(C) // 表示前一个节点地址是A,下一个节点的地址是C
Node C:
prev = add(B),next = add(D) // 表示前一个节点地址是B,下一个节点的地址是D
Node D:
prev = add(C),next = NULL // 表示前一个节点地址是C,下一个节点是NULL
XOR链表:
在每一个节点中的地址变量是前一个地址和后一个地址的亦或值(XOR of next and previous)
我们将这个变量表示成xnp。
Node A:
npx = 0 XOR add(B) //位运算XOR, 0和地址B的XOR值
Node B:
npx = add(A) XOR add(C) //位运算, 地址A和地址B的XOR值
Node C:
npx = add(B) XOR add(D) //位运算, 地址B和地址D的XOR值
Node D:
npx = add(C) XOR 0 //位运算, 地址C和0的XOR值
访问XOR双向链表:
我们可以根据简单的亦或操作,从前往后或者从后往前的访问这个双向链表,但是访问的时候要保留前一个节点的地址。
例如当我们在No

  • 4
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值