Files

3.5 KiB

id, title, challengeType, forumTopicId, dashedName
id title challengeType forumTopicId dashedName
587d8250367417b2b2512c5f Creare una classe Stack 1 301633 create-a-stack-class

--description--

Nell'ultima sezione, abbiamo parlato di cosa è uno stack (pila) e come possiamo usare un array per rappresentarlo. In questa sezione, creeremo la nostra classe stack. Anche se è possibile utilizzare degli array per creare gli stack, a volte è meglio limitare la quantità di controllo che abbiamo sui nostri stack. Oltre al metodo push e pop, gli stack hanno altri metodi utili. Aggiungiamo un metodo peek, isEmptye clear alla nostra classe stack.

--instructions--

Scrivi un metodo push che inserisce un elemento in cima allo stack, un metodo pop che rimuove e restituisce l'elemento in cima allo stack, un metodo peek che guarda l'elemento in cima allo stack, un metodo isEmpty che controlla se lo stack è vuoto, e un metodo clear che rimuove tutti gli elementi dallo stack. Normalmente gli stack non hanno questo, ma abbiamo aggiunto un metodo di aiuto print che visualizza la collezione nella console.

--hints--

La tua classe Stack dovrebbe avere un metodo push.

assert(
  (function () {
    var test = new Stack();
    return typeof test.push === 'function';
  })()
);

La tua classe Stack dovrebbe avere un metodo pop.

assert(
  (function () {
    var test = new Stack();
    return typeof test.pop === 'function';
  })()
);

La tua classe Stack dovrebbe avere un metodo peek.

assert(
  (function () {
    var test = new Stack();
    return typeof test.peek === 'function';
  })()
);

La tua classe Stack dovrebbe avere un metodo isEmpty.

assert(
  (function () {
    var test = new Stack();
    return typeof test.isEmpty === 'function';
  })()
);

La tua classe Stack dovrebbe avere un metodo clear.

assert(
  (function () {
    var test = new Stack();
    return typeof test.clear === 'function';
  })()
);

Il metodo peek dovrebbe restituire l'elemento in cima allo stack

assert(
  (function () {
    var test = new Stack();
    test.push('CS61');
    test.push('CS50');
    return test.peek() === 'CS50' && test.peek() === 'CS50';
  })()
);

Il metodo pop dovrebbe rimuovere e restituire l'elemento in cima allo stack

assert(
  (function () {
    var test = new Stack();
    test.push('CS61');
    test.push('CS50');
    return test.pop() === 'CS50' && test.pop() === 'CS61';
  })()
);

Il metodo isEmpty dovrebbe restituire true se uno stack non contiene alcun elemento

assert(
  (function () {
    var test = new Stack();
    return test.isEmpty();
  })()
);

Il metodo clear dovrebbe rimuovere tutti gli elementi dallo stack

assert(
  (function () {
    var test = new Stack();
    test.push('CS61');
    test.push('CS50');
    test.clear();
    return test.isEmpty();
  })()
);

--seed--

--seed-contents--

function Stack() {
  var collection = [];
  this.print = function() {
    console.log(collection);
  };
  // Only change code below this line

  // Only change code above this line
}

--solutions--

class Stack {
  constructor() {
    this.collection = [];
  }
  print() {
    console.log(this.collection);
  }
  push(val) {
    this.collection.push(val);
  }
  pop() {
    return this.collection.pop();
  }
  peek() {
    return this.collection[this.collection.length - 1];
  }
  isEmpty() {
    return this.collection.length === 0;
  }
  clear() {
    return (this.collection.length = 0);
  }
}