2016-07-19 23 views
0

Ich arbeite an einer Hash-Tabelle/Datenstruktur Übung, aber verstehe es nicht ganz gut. Jede Daten muss eine Instanz der Liste 'List' sein und mit der Hash-Funktion muss ich Schlüssel/Wert-Paare zur richtigen Liste hinzufügen und die Elemente basierend auf ihrem Schlüssel zurückgeben. Als das, was ich bisher versucht habe funktioniert nicht, jede Hilfe oder Erklärung, warum, was ich bis jetzt nicht arbeite, würde sehr geschätzt werden! Vielen Dank!Datenstruktur - Wie implementiert man Hashtabellen (inklusive Assoziationslisten) in Javascript?

function List() { 
    this.head=null; 
} 
function ListN (key, value, next) { 
    this.key = key; 
    this.value = value; 
    this.next = next; 
} 
List.prototype.set = function (key, value) { 
var newNode=new ListN(key, value, this.head); 
    this.head=newNode; 
}; 

List.prototype.get = function (key) { 
    var node = this.head; 
    while (node) { 
     if (node.key === key) { 
     return node.value; 
     } 
     node = node.next; 
    } 
}; 
    smallList = new List(); 

function HashT() { 
    this.data = Array(30); 
} 

HashT.prototype.set = function (key, value) { 
    var index=hash(key); 
    if (!this.data[index]) { 
    this.data[index]=new List(); 
    } 

    this.data[index].set({key:key, value:value}); 
}; 

HashT.prototype.get = function (key) { 
var index=hash(key); 
return this.data[index]; 

}; 
+1

Nur vorsichtig sein ul Niemand gibt den Schlüssel 'NaN' ein –

+0

In jeder nicht-dummen ECMAScript-Implementierung ist die zugrunde liegende Datenstruktur eines Objekts ein Hash. Verwenden Sie einfach ein einfaches Objekt. Oder eine Karte, wenn die Schlüssel keine Zeichenfolgen sind. – Oriol

+1

@Oriol Ich denke, der Punkt der Übung ist zu lernen, wie Hash-Tabellen implementiert werden. Ein Objekt dafür zu benutzen, wäre so, als würde man jemandem beibringen, wie man ein Vogelhaus baut, indem man ihm sagt, dass er in eine Zoohandlung gehen und eine kaufen soll. – Barmar

Antwort

1

Das Problem ist einfach, Ihr Fehler ist hier:

this.data[index].set({key:key, value:value}); 

Es muss

this.data[index].set(key, value); 

In Ihrem HashT.prototype.get geändert werden, muss die return Aussage sein:

return this.data[index].get(key); 
+0

Vielen Dank! Wie kann ich auch nur denjenigen zurückgeben, der dem Schlüssel entspricht? Ich habe versucht, wenn (this.data.key === Schlüssel) { Rückgabe this.data [Index]; } aber es funktioniert nicht – javascript2016

+0

@ javascript2016 siehe meine Bearbeitung –

+0

vielen Dank! Könntest du es erklären und auch, warum das, was ich hatte, nicht funktionieren würde, wenn ich versuche Hashtabellen zu verstehen – javascript2016