Не совсем понятно, какие у вас требования заставили вас задать этот вопрос. Если вам нужна структура данных фиксированного размера, вы можете также рассмотреть различные политики кэширования. Тем не менее, поскольку у вас есть очередь, я думаю, вы ищете какой-то тип функциональности маршрутизатора. В этом случае я бы использовал кольцевой буфер: массив с первым и последним индексом. Всякий раз, когда элемент добавляется, вы просто увеличиваете индекс последнего элемента, а когда элемент удаляется, увеличиваете индекс первого элемента. В обоих случаях сложение выполняется по модулю размера массива, и обязательно увеличивайте другой индекс при необходимости, то есть когда очередь заполнена или пуста.
Кроме того, если это приложение типа маршрутизатора, вы также можете поэкспериментировать с таким алгоритмом, как Random Early Dropping (RED), который случайным образом удаляет элементы из очереди даже до ее заполнения. В некоторых случаях было установлено, что RED имеет лучшую общую производительность, чем простой метод, позволяющий заполнить очередь перед сбросом.