理解XOR链表时出现问题

时间:2009-10-26 14:42:47

标签: data-structures linked-list xor-linkedlist

我正在阅读XOR linked list(来自维基百科)。但我在理解它时遇到了一些问题。

我没有得到以下段落。

  

要从某个点开始遍历任一方向的列表,您需要两个连续项的地址,而不仅仅是一个。如果两个连续项目的地址相反,您将最终以相反的方向遍历列表。

我对此几乎没有疑问:

  
      
  1. 它是如何实现的(XOR链表本身)?

         

    (如果你通过举一些例子证明你的答案是合理的,那就太好了   通过采取一些地址,然后   相应地做一些计算。)

  2.   
  3. 我该如何实现它?关于实施的简要概念。

  4.   
  5. 实际上在哪里或可以使用?这看起来真有帮助吗?
  6.   

2 个答案:

答案 0 :(得分:5)

  1. 上述过程的工作原理是将下一个和前一个元素的地址存储在一个字段中(我们称之为A)。因此,要获取列表中下一个元素的值,您需要获取另一个元素的地址(这就是为什么需要两个元素...称之为B)。要查找下一个元素的地址,只需要A XOR B即可获得C(下一个元素的位置)。

  2. 取决于您使用的语言。研究你正在使用的任何语言的按位运算,你应该能够很快地解决它。

  3. 它可以在任何使用双链表的地方使用(XOR链表将节省内存)。需要注意的是,您必须使用列表中的两个连续元素来遍历元素。

答案 1 :(得分:5)

3。 这种链表现在不太实用。它的主要好处是节省内存,这通常是便宜和丰富的。您链接到的维基百科文章非常清楚地说明了这些缺点:

  

这种形式的链表可能是   不可取的:

     
      
  • 通用调试工具无法跟随XOR链,使调试更加困难;
  •   
  • 内存使用量减少的代价是代码复杂性的增加,使维护成本更高;
  •   
  • 大多数垃圾收集方案不适用于不包含文字指针的数据结构;
  •   
  • 指针的XOR没有在某些上下文中定义(例如,C语言),尽管许多语言在指针和整数之间提供某种类型的转换;
  •   
  • 如果没有遍历列表,指针将是不可读的 - 例如,如果指向列表项的指针包含在另一个数据结构中;
  •   
  • 在遍历列表时,您需要记住先前访问过的节点的地址,以便计算下一个节点的地址。
  •   
     

计算机系统越来越多   廉价和丰富的记忆,和   存储开销一般不是   超越专业的问题   嵌入式系统。它还在哪里   希望减少开销   链表,展开提供了更多   实用的方法(以及其他方法   优点,如增加缓存   表现和随机加速   访问)。