[1, 2, 3, 4, 5]Aqui, a leitura e a gravação estão na posição
^ Leia @ 0
^ Escreva @ 0
0
. Agora a fila recebe 3 novos registros a
, b
e c
. Nossa fila agora parece com: [a, b, c, 4, 5]Como o cabeçote de leitura lê, ele pode remover valores ou mantê-los:
^ Leia @ 0
^ Escreva @ 3
[nulo, nulo, nulo, 4, 5]Quando a gravação chega ao final da matriz, volta ao início:
^ Leia @ 3
^ Escreva @ 3
[f, null, null, d, e]Essa abordagem requer uma quantidade constante de memória, mas permite que arquivos de tamanho muito maior sejam processados. Instruções: Neste desafio, vamos implementar uma fila circular. A fila circular deve fornecer métodos de
^ Leia @ 3
^ Escreva @ 1
enqueue
e de dequeue
que permitem ler e gravar na fila. A classe em si também deve aceitar um número inteiro que você possa usar para especificar o tamanho da fila ao criá-la. Nós escrevemos a versão inicial desta classe para você no editor de código. Quando você enfileira itens na fila, o ponteiro de gravação deve avançar e retornar ao início assim que chegar ao final da fila. Da mesma forma, o ponteiro de leitura deve avançar conforme você desencaixa itens. O ponteiro de escrita não deve passar pelo ponteiro de leitura (nossa classe não permitirá que você sobrescreva dados que você ainda não tenha lido) e o ponteiro de leitura não deve ser capaz de avançar dados passados que você escreveu. Além disso, o método de enqueue
deve retornar o item que você enfileirou se tiver êxito e, caso contrário, retornará null
. Da mesma forma, quando você desenfileirar um item, ele deve ser retornado e, se não for possível, você deve retornar null
. enqueue
adiciona itens à fila circular.
testString: 'assert((function(){ var test = new CircularQueue(3); test.enqueue(17); test.enqueue(32); test.enqueue(591); var print = test.print(); return print[0] === 17 && print[1] === 32 && print[2] === 591; })(), "The enqueue
method adds items to the circular queue.");'
- text: Você não pode enfileirar itens após o ponteiro de leitura.
testString: 'assert((function(){ var test = new CircularQueue(3); test.enqueue(17); test.enqueue(32); test.enqueue(591); test.enqueue(13); test.enqueue(25); test.enqueue(59); var print = test.print(); return print[0] === 17 && print[1] === 32 && print[2] === 591; })(), "You cannot enqueue items past the read pointer.");'
- text: O método de dequeue
retira itens da fila.
testString: 'assert((function(){ var test = new CircularQueue(3); test.enqueue(17); test.enqueue(32); test.enqueue(591); return test.dequeue() === 17 && test.dequeue() === 32 && test.dequeue() === 591; })(), "The dequeue
method dequeues items from the queue.");'
- text: 'Depois que um item é desenfileirado, sua posição na fila deve ser redefinida como null
.'
testString: 'assert((function(){ var test = new CircularQueue(3); test.enqueue(17); test.enqueue(32); test.enqueue(672); test.dequeue(); test.dequeue(); var print = test.print(); return print[0] === null && print[1] === null && print[2] === 672; })(), "After an item is dequeued its position in the queue should be reset to null
.");'
- text: A tentativa de desenfileirar após o ponteiro de gravação retorna null
e não avança o ponteiro de gravação.
testString: 'assert((function(){ var test = new CircularQueue(3); test.enqueue(17); test.enqueue(32); test.enqueue(591); return test.dequeue() === 17 && test.dequeue() === 32 && test.dequeue() === 591 && test.dequeue() === null && test.dequeue() === null && test.dequeue() === null && test.dequeue() === null && test.enqueue(100) === 100 && test.dequeue() === 100; })(), "Trying to dequeue past the write pointer returns null
and does not advance the write pointer.");'
```