Implimentar pila FIFO (first in/ first out)

Hola tengo que implementar el siguiente código: escribir un programa que implemente una pila FIFO. Partiendo de un array de 4 strings, preguntará al usuario con qué valor se poblará inicialmente (y lo presentará). A partir de ahí, irá pidiendo indefinidamente valores, que irá colocando en FIFO (y presentando).

Lo he estado intentando primero con números enteros pero la verdad es que no se me ocurre cómo. Lo de seguir metiendo valores se me ocurre con un do..while hasta que se introduzca un comando para no seguir ejecutando el programa. Mi mayor problema es que no se me ocurre como hacer para que cada vez que introduzcas un valor este tome la primera posición del array y el resto se muevan todos una posición. Alguna idea?? :frowning:

void setup()
{
  Serial.begin(9600);
  Serial.println("Introduzca su entero");
}

void loop()
{
  if (Serial.available()){
    int miArray[4]={0,0,0,0}; //Array de 4 enteros
    int Valor = Serial.parseInt();
    Serial.println(Valor); 
    miArray[0]= Valor;
    }
  }
}

Busca en una librería de Luis LLamas que tiene para eso, incremento dinámico de arrays

Ya lo había visto, lo que pasa es que hay que instalar un paquete y en teoría debería intentar hacerlo por mí misma entiendo.

Pero te sirve de base para comenzar el tuyo, mira me alegro que hagas tu propio ejercicio, eso habla mucho de tu compromiso, pero ningún profesor se va a molestar si analizas el trabajo de otra persona, al contrario ¿No te parece que nadie opera sin saber antes cómo es la anatomía? o por ejemplo, si eres una estudiante de foto, tu harás el esquema de luz pero antes analizarás esquemas ya resueltos, no te va a mandar nadie, que sepa lo que es un proceso académico, a hacer algo sin poder analizar soluciones anteriores.

Úsalo de referente

Tambien puedes usar la clase queue, que es una cola FIFO de la libreria STL de C++.
Con push metes en la cola y con pop sacas de la cola, front te devuelve el siguiente que va a salir.
Es más fácil de usar, puedes contener cualquier objeto, en el ejemplo int. Como inconveniente usa más memoria.

Por ejemplo:

#include <Arduino.h>
#include <queue>

using namespace std;

queue<int> fifo;

void setup(){
    Serial.begin(115200);

    fifo.push(1);
    fifo.push(2);
    fifo.push(3);
    fifo.push(4);

}

void loop(){
    while(!fifo.empty()){
        Serial.println( fifo.front() );
        fifo.pop();
    }
}

Hola a todos.
O tambien podrias hacerlo a "pelo" solo tendrias que definir una variable,por ejemplo, int puntero, que siempre contendra el valos del siguente lugar libre donde meter un dato nuevo, y al sacar un dato correr la libreria a la iz quierda o derecha. yo prefiero a la izquierda, la cosa podria quedar algo asi:
Para meter un dato:

    miArray[puntero]= Serial.parseInt();
    puntero++;

Y para sacar un dato:

   Serial.println(miArray[0]);//se supone que ya sale de la fifo, que no es solo para verla
    for (int x=(puntero-1); x==0; x--){miArray[x-1]=miArray[x];}
         puntero--;

Espero que te sirva. Saludos

1 Like

This topic was automatically closed 120 days after the last reply. New replies are no longer allowed.