Как движется хвост после замены устаревшего предмета после переполнения кольцевого буфера - PullRequest
0 голосов
/ 22 апреля 2020

Я постараюсь объяснить свой вопрос как можно лучше. Допустим, у нас есть круговой буфер, который выглядит следующим образом:

   A
F     B
E     C
   D

Итак, хвост будет 5, а голова будет 0 ( мы ничего не снимали с очереди, мы только помещали в очередь элементы в cb.)

Теперь, допустим, я добавлю элементы X, Y & Z, поэтому буфер перезапишет значения после того, как я поставлю в очередь элементы , мой буфер должен выглядеть так:

  X
F   Y
E   Z
  D

Теперь хвост будет равен 2, а голова - 0. Теперь я хочу удалить элемент из буфера. Итак, мой буфер будет выглядеть так:

  None
F     Y
E     Z
   D

Теперь я хочу снова поместить что-то в буфер. И вот мой вопрос: Если хвост продолжит перезаписывать элементы, пока не достигнет конца, а потом, когда он достигнет конца, и я попытаюсь поставить в очередь что-то, он перезапишет значение «Нет», или если он прыгнет прямо в Значение «None», поскольку в этом месте буфер пуст и непосредственно перезаписывается значение «None» новым элементом?

Если ответ на вопрос заключается в том, что хвост должен сохранять значения перезаписи до он достигает конца, и после его окончания, когда я попытаюсь поставить в очередь новый элемент, он перезапишет значение «Нет», я знаю, как его реализовать, , но , если ответ является то, что хвост должен перезаписать значение «None» напрямую, вот еще один вопрос:

Давайте предположим, что хвост должен перезаписать значение «None» напрямую, путем перехода к 0-му индексу и перезаписи это с элементом, скажем, «R», мой буфер будет выглядеть так:

  R
F   Y
F   Z
  D

Теперь хвост равен 0, а голова остается неизменной, 1. Теперь, вопрос on: Когда я захочу поставить в очередь новые элементы, зная, что хвост в моем текущем состоянии равен 0, должен ли он продолжать перезаписывать значения из 0-го индекса или go обратно в индекс, где он был до то есть 2?

...