¿Existe una estructura de datos existente que sea de tamaño fijo y expulse el elemento más antiguo / último si se inserta un nuevo elemento?


20

Estoy buscando una estructura de datos que empuje su elemento más antiguo / último si se inserta un nuevo elemento. Por ejemplo, vamos a Drepresentar la estructura. Dcontiene 3 elementos de los Number Dvalores predeterminados del tipo que se inicializarán en 1, 2y 3.

re=[1,2,3]

Si se inserta un elemento Numberque contiene el valor , se expulsará y se desplazará hacia la derecha.5D312

re=[5 5,1,2]

Lo primero que viene a la mente sería una matriz, pero la definición no incluye el comportamiento de empuje.


Bueno, no hay una estructura de datos incorporada, pero es fácil de implementar usando una lista vinculada doblemente lista vinculada ¿verdad?
Usuario no encontrado

1
¿Qué pasa con el uso de un contenedor heredado de una cola? Luego agregas el método void push_replace(T val) { pop(); push(val); }.
Francesco Dondi

@FrancescoDondi probablemente debería serT push_replace(T val) { T old = pop(); push(val); return old; }
valbaca

1
Definitivamente lo hay ahora: lo definiste informalmente; quizás debería preguntar si es bien conocido, tiene una interfaz generalmente aceptada y si hay implementaciones disponibles (no es que el último sea un gran problema).
PJTraill

@valbaca Estoy pensando en C ++ donde pop()no devuelve nada debido a problemas con el desbobinado de la pila en caso de excepciones que copian un objeto complejo, por lo que se supone que debe usarlo front()antes si lo necesita antes de descartarlo. Pero claro, si no te importan las excepciones, tu camino puede ser mejor.
Francesco Dondi

Respuestas:


44

Las colas de tamaño fijo a menudo se implementan utilizando lo que algunas personas llaman memorias intermedias circulares . Si elimina la protección contra que esté llena, obtendrá el comportamiento deseado.

Por supuesto, no ocurrirá ningún empuje real en la matriz, que sería demasiado costoso, pero se verá desde afuera.


Los comentarios no son para discusión extendida; Esta conversación se ha movido al chat .
Rafael
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.