Domanda

Sto implementando uno stack in JavaScript.

Si consideri:

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

Ora l'utente apre il valore di 2:

Stack{0,1,3} Top:0

È un comportamento accettabile per uno stack? Sto eseguendo il mio stack, ma esiste un codice integrato che lo farebbe per me?

Il mio codice:

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());

Se uno stack non è il tipo corretto di struttura dati per questa applicazione, quale sarebbe quella corretta?

È stato utile?

Soluzione

  

È legale eseguire l'operazione sopra in pila?

Non è un'operazione stack tradizionale. Una struttura di dati che ti ha permesso di farlo che in realtà non poteva essere definita una pila; è più di un semplice vecchio elenco.

  

Se lo stack non consente di rimuovere i dati tra top e start. quali sono le strutture di dati alter utilizzate in javascript per la logica sopra?

C'è qualcosa di sbagliato in un semplice Array ? Ti dà la voce di accesso casuale che vuoi scrivere:

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

più metodi di praticità in stile stack per accedere sia a stack caricati frontalmente che a coda (e, di conseguenza, code): push / pop / shift / unshift.

Non ha molto senso creare la propria classe wrapper Stack () quando Array () lo copre già IMO. Mentre uno scienziato informatico potrebbe essere interessato a cose come la complessità algoritmica degli elenchi collegati per stack, in pratica non sarai in grado di migliorare l'implementazione ottimizzata dell'array integrata in moderni interpreti JavaScript da codice di livello superiore.

Altri suggerimenti

Non è possibile farlo con Pop (senza far apparire altre cose lungo la strada). Dovresti cercare di fornire un altro modo per l'utente di trovare dove si trova il numero 2 e un altro metodo per l'utente per estrarlo, ad esempio utilizzando la giunzione dell'array. Ma a quel punto questo non è più uno stack.

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

Se devi davvero usare le pile, potresti far apparire più volte, archiviare temporaneamente i dati spuntati in un altro stack premendo, quindi quando hai finito, fai il contrario per rimettere in posizione la fine dello stack.

Qualcosa del genere viene comunemente eseguito dalle operazioni Annulla / Ripeti nelle applicazioni GUI: hanno una pila di operazioni Annulla e una pila opposta di operazioni Ripeti. Annulla sposta un'azione dallo stack A a B e Ripeti sposta un'azione dallo stack B ad A. Una nuova azione spinge sullo stack Annulla e cancella completamente lo stack Redo.

Un altro posto che viene utilizzato è negli elenchi Indietro / Avanti nel browser.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top