Frage

Ich bin ein Stapel in JavaScript implementiert.

Bedenken Sie:

Stack{0,1,2,3} Top:0

Jetzt ist der Benutzer erscheint der Wert 2:

Stack{0,1,3} Top:0

Ist das ein akzeptables Verhalten für einen Stapel? Ich bin mein eigener Stapel rollen, aber gibt es gebaut jeder in Code, der das für mich tun würde?

Mein Code:

function Stack() //Creating Stack Object
{
    // Create an empty array of cards.
    this.cards = new Array();  //Cards array inside stack object
    this.push  = pushdata;     //Call pushdata function on push operation
    this.pop   = popdata;      //Call popdata function on pop operation
    this.printStack = showStackData; //Call showStackData function on printstack operation
}

function pushdata(data)
{
    this.cards.push(data);
}

function popdata(data)
{
    return this.cards.pop();
}

function showStackData()
{
    return this.cards;
}

var a = new Stack(); //Create stack Object
a.push(12);          //Push Data onto Stack
a.push(32);
a.push(42);
var z = a.pop();
document.write("Data Popped: " + z);
document.write("Stack Output: " + a.printStack());

Wenn ein Stapel nicht die richtige Art von Datenstruktur für diese Anwendung ist, was die richtige sein würde?

War es hilfreich?

Lösung

  

Ist es legal, den oben beschriebenen Vorgang in Stapeln zu tun?

Das ist kein traditioneller Stapelbetrieb. Eine Datenstruktur, die Sie, das zu tun erlaubt kann nicht wirklich einen Stapel genannt werden; es ist eher eine einfache alte Liste.

  

Wenn Stack wird nicht erlaubt, die Daten zwischen oben und start.what entfernt ist die alte Datenstruktur in Javascript verwendete für obige Logik?

Gibt es etwas falsch mit einem einfachen Array rel="nofollow? Es gibt Ihnen die Schreib-Lese-Artikel Schreiben Sie:

var a= [0, 1, 2, 3];
a.splice(1, 1);
// a==[0, 2, 3]

Plus-Stack-style bequeme Methoden für den Zugriff auf beide Front geladen und tail Stapel (und folglich Warteschlangen.): Push / pop / shift / unshift

Es gibt nicht viel Sinn, Ihre eigenen Stack () Wrapper-Klasse zu machen, wenn Array () bereits es IMO abdeckt. Während ein Informatiker könnte in Dinge wie die algorithmische Komplexität der verketteten Listen für Stapel interessiert sein, in der Praxis Sie gehen zu können, nicht auf die optimierte Array Umsetzung verbessern gebaut in moderne JavaScript-Interpreter von höherer Ebene Code.

Andere Tipps

Nicht möglich, es mit Pop zu tun (ohne andere Sachen auf dem Weg zu popping). Sie sollten einen anderen Weg für den Benutzer suchen in zu finden, wo die Nummer 2 befindet und ein anderes Verfahren für den Benutzer, dass zu extrahieren, wie Array Spleiß verwenden. Aber dann ist dies nicht mehr ein Stapel.

http://www.w3schools.com/jsref/jsref_splice.asp

Wenn Sie wirklich Stacks verwenden müssen, können Sie mehrere Male, speichern Sie die knallte Daten in einem anderen Stapel vorübergehend Pop durch Drücken, dann, wenn Sie fertig sind, tun das Gegenteil, das Ende des Stapels wieder an ihren Platz zu bringen.

So etwas wird häufig durch Undo / Redo-Operationen in GUI-Anwendungen getan - sie haben einen Stapel von Undo-Operationen und einen gegenüberliegenden Stapel von Redo-Operationen. Rückgängig bewegt sich eine Aktion aus dem Stapel A nach B und wieder bewegt eine Aktion aus Stapel B zu A. Eine neue Aktion auf die Undo schiebt stapeln und tilgt die Redo-Stack vollständig.

Ein weiterer Ort, das verwendet wird, ist in den Back / Forward-Listen in Ihrem Browser.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top