freeCodeCamp/curriculum/challenges/portuguese/08-coding-interview-prep/data-structures/create-a-priority-queue-cla...

5.5 KiB

id title challengeType videoUrl localeTitle
587d8255367417b2b2512c74 Create a Priority Queue Class 1 Criar uma classe de fila de prioridade

Description

Neste desafio você estará criando uma Fila de Prioridades. Uma Fila Prioritária é um tipo especial de Fila no qual os itens podem ter informações adicionais que especificam sua prioridade. Isso poderia ser simplesmente representado com um inteiro. A prioridade do item substituirá a ordem de veiculação para determinar se os itens da sequência são retirados da fila. Se um item com uma prioridade mais alta for enfileirado após os itens com prioridade mais baixa, o item com prioridade mais alta será retirado antes de todos os outros. Por exemplo, vamos imaginar que temos uma fila de prioridades com três itens: [['kitten', 2], ['dog', 2], ['rabbit', 2]] Aqui o segundo valor (um inteiro) representa a prioridade do item. . Se enfileirarmos ['human', 1] com uma prioridade de 1 (assumindo que prioridades mais baixas recebem precedência), ele seria o primeiro item a ser retirado. A coleção seria assim: [['human', 1], ['kitten', 2], ['dog', 2], ['rabbit', 2]] . Nós começamos a escrever um PriorityQueue no editor de código. Você precisará adicionar um método de enqueue para adicionar itens com prioridade, um método de dequeue para remover itens, um método de size para retornar o número de itens na fila, um método de front para retornar o elemento na frente da fila e finalmente, um método isEmpty que retornará true se a fila estiver vazia ou false se não estiver. O enqueue deve aceitar itens com o formato mostrado acima ( ['human', 1] ), em que 1 representa a prioridade. O dequeue deve retornar apenas o item atual, não sua prioridade.

Instructions

Tests

tests:
  - text: Sua classe <code>Queue</code> deve ter um método de <code>enqueue</code> .
    testString: 'assert((function(){var test = new PriorityQueue();  return (typeof test.enqueue === "function")}()), "Your <code>Queue</code> class should have a <code>enqueue</code> method.");'
  - text: Sua classe <code>Queue</code> deve ter um método de <code>Queue</code> <code>dequeue</code> .
    testString: 'assert((function(){var test = new PriorityQueue();  return (typeof test.dequeue === "function")}()), "Your <code>Queue</code> class should have a <code>dequeue</code> method.");'
  - text: Sua classe <code>Queue</code> deve ter um método de <code>size</code> .
    testString: 'assert((function(){var test = new PriorityQueue();  return (typeof test.size === "function")}()), "Your <code>Queue</code> class should have a <code>size</code> method.");'
  - text: Sua classe <code>Queue</code> deve ter um método <code>isEmpty</code> .
    testString: 'assert((function(){var test = new PriorityQueue();  return (typeof test.isEmpty === "function")}()), "Your <code>Queue</code> class should have an <code>isEmpty</code> method.");'
  - text: 'Seu PriorityQueue deve controlar corretamente o número atual de itens usando o método de <code>size</code> , à medida que os itens são enfileirados e retirados.'
    testString: 'assert((function(){var test = new PriorityQueue(); test.enqueue(["David Brown", 2]); test.enqueue(["Jon Snow", 1]); var size1 = test.size(); test.dequeue(); var size2 = test.size(); test.enqueue(["A", 3]); test.enqueue(["B", 3]); test.enqueue(["C", 3]); return (size1 === 2 && size2 === 1 && test.size() === 4)}()), "Your PriorityQueue should correctly keep track of the current number of items using the <code>size</code> method as items are enqueued and dequeued.");'
  - text: O método <code>isEmpty</code> deve retornar <code>true</code> quando a fila estiver vazia.
    testString: 'assert((function(){var test = new PriorityQueue(); test.enqueue(["A", 1]); test.enqueue(["B", 1]); test.dequeue(); var first = test.isEmpty(); test.dequeue(); return (!first && test.isEmpty()); }()), "The <code>isEmpty</code> method should return <code>true</code> when the queue is empty.");'
  - text: 'A fila de prioridade deve retornar itens com prioridade mais alta antes dos itens com prioridade mais baixa e retornar os itens na ordem de primeiro a sair, caso contrário.'
    testString: 'assert((function(){var test = new PriorityQueue(); test.enqueue(["A", 5]); test.enqueue(["B", 5]); test.enqueue(["C", 5]); test.enqueue(["D", 3]); test.enqueue(["E", 1]); test.enqueue(["F", 7]); var result = []; result.push(test.dequeue()); result.push(test.dequeue()); result.push(test.dequeue()); result.push(test.dequeue()); result.push(test.dequeue()); result.push(test.dequeue()); return result.join("") === "EDABCF";}()), "The priority queue should return items with a higher priority before items with a lower priority and return items in first-in-first-out order otherwise.");'

Challenge Seed

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

    // Only change code above this line
}

Solution

// solution required