Можно ли создать XOR-двусвязный список в JavaScript? - PullRequest
0 голосов
/ 12 апреля 2019

Похоже, что объекты JavaScript не совместимы с оператором ^ XOR. Так есть ли способ создать двусвязный список 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

Ответы [ 2 ]

0 голосов
/ 12 апреля 2019

Исключительно с целью практики, я написал немного, чтобы имитировать указатели, используя карту. Очевидно, это не для производственного кода.

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
0 голосов
/ 12 апреля 2019

Невозможно реализовать правильный список XOR в JavaScript, потому что вы не можете получить доступ к адресу памяти объекта.

На самом деле в JavaScript нет практической причины делать это. Из того, что я понимаю, единственным преимуществом связанного списка XOR является немного уменьшенный объем памяти. Объем памяти, который вы бы сэкономили с такой структурой в JavaScript, компенсируется накладными расходами самих объектов.

Кто-то однажды задал тот же вопрос о Python; ответ также относится к JavaScript.

...