是否可以在JavaScript中创建XOR双向链表?

问题描述 投票:0回答:2

似乎JavaScript对象与^ XOR运算符不兼容。那么有没有办法创建一个XOR双链表?

我可以做常规的单/双链表。我在搜索引擎优化和谷歌搜索都没有成功,所以我的猜测是不可能的。或者也许没有人真正关心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
2个回答
0
投票

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

在JavaScript中也没有实际的理由。据我所知,XOR链表的唯一好处是内存占用量略有减少。在JavaScript中使用这种结构保存的内存量会被对象本身的开销所抵消。

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


0
投票

仅仅为了练习的目的,我写了一些使用地图来模拟指针。显然,这不适用于生产代码。

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
© www.soinside.com 2019 - 2024. All rights reserved.