【问题标题】:Is it possible to create an XOR doubly-linked list in JavaScript?是否可以在 JavaScript 中创建 XOR 双向链表?
【发布时间】:2019-09-02 16:34:36
【问题描述】:

JavaScript 对象似乎与 ^ XOR 运算符不兼容。那么有没有什么方法可以创建一个异或双向链表呢?

我可以很好地做常规的单/双链表。而且我在 SO 和 Google 上都进行了搜索,但都没有成功,所以我的猜测是这是不可能的。或者也许没有人真正关心 XOR 列表...

var node = function(data, xor){
  this.data = data;
  this.xor = xor;
}
var myNode=new node('data', 0);
console.log(0 ^ myNode);  // shows 0, should show myNode
console.log(null ^ myNode);  // shows 0, too
console.log(5 ^ 0);  // 5 as expected

【问题讨论】:

    标签: javascript linked-list xor doubly-linked-list


    【解决方案1】:

    您无法在 JavaScript 中实现正确的 XOR 链表,因为您无法访问对象的内存地址。

    在 JavaScript 中也没有真正的实际理由这样做。据我了解,XOR 链表的唯一好处是稍微减少了内存占用。在 JavaScript 中使用这种结构可以节省的内存量被对象本身的开销所抵消。

    曾经有人问过关于 Python 的相同问题; the answer 也适用于 JavaScript。

    【讨论】:

      【解决方案2】:

      仅出于练习的目的,我写了一点来模拟使用映射的指针。显然,这不适用于生产代码。

      var node = function(data, xor){
        this.data = data;
        this.xor = xor;
      }
      
      var pointerFactory = function(){
          var pointers = {};
          var pointerCount = 0;
          this.get_pointer = function(node){
              if (pointers.hasOwnProperty(node)) return pointers[node];
              pointerCount++;
              pointers[node]=pointerCount;
              pointers[pointerCount]=node;
              return pointerCount;
          }
          this.dereference_pointer = function(pointer){
              return (pointers.hasOwnProperty(pointer)) ? pointers[pointer] : null;
          }
      }
      
      var myNode = new node('my data', 0);
      var pf = new pointerFactory();
      var p = pf.get_pointer(myNode);
      console.log(pf.dereference_pointer(p).data); // my data
      console.log(pf.dereference_pointer(2)); //null
      console.log(0 ^ p);  // 1
      console.log(p ^ p);  // 0
      

      【讨论】:

        猜你喜欢
        • 2019-06-03
        • 2011-07-22
        • 1970-01-01
        • 2013-12-08
        • 2010-10-25
        • 2013-08-16
        • 2018-11-01
        • 1970-01-01
        • 2016-07-18
        相关资源
        最近更新 更多