31-07-2018, 17:24
Buenas, estaba adelantando algunos temas de la materia pero me trabé con "colas", creo que entendí el concepto "FIFO" de Primero entra, Primero Sale. El siguiente algoritmo que hice funciona, pero igual no lo entendi al 100%.
Nota: no estoy acostumbrado a postear acá, avísenme si debo moverlo a otra parte.
Mis dudas serian:
1) En mi función agregar(), cuando hago fin = nuevo dato no estoy reemplazando el valor de fin->siguiente que tengo dentro del else?
2) En mi función quitar() porque no funciona si hago frente = fin->siguiente si los nodos los estoy agregando al final de la lista.
Les dejo mi código completo
Nota: no estoy acostumbrado a postear acá, avísenme si debo moverlo a otra parte.
Mis dudas serian:
1) En mi función agregar(), cuando hago fin = nuevo dato no estoy reemplazando el valor de fin->siguiente que tengo dentro del else?
2) En mi función quitar() porque no funciona si hago frente = fin->siguiente si los nodos los estoy agregando al final de la lista.
Les dejo mi código completo
#include <iostream>
using namespace std;
struct Nodo{
int dato;
Nodo *siguiente;
};
void agregar(Nodo *&, Nodo *&, int);
int quitar(Nodo *&, Nodo *&);
int main(){
Nodo *frente = NULL;
Nodo *fin = NULL;
int n;
cout << "Agregando datos.. => ";
do{
cin >> n;
if(n != -1)
agregar(frente, fin, n);
}while(n != -1);
cout << endl;
cout << "Listado => ";
while(frente != NULL)
cout << quitar(frente, fin) << ", ";
cout << endl;
return 0;
}
// funciones
void agregar(Nodo *&frente, Nodo *&fin, int dato){
Nodo *nuevo_nodo = new Nodo();
nuevo_nodo->dato = dato;
nuevo_nodo->siguiente = NULL;
if(frente == NULL)
frente = nuevo_nodo;
else{
//fin = nuevo_nodo;
fin->siguiente = nuevo_nodo;
}
fin = nuevo_nodo;
cout << dato << "," ;
}
int quitar(Nodo *&frente, Nodo *&fin){
Nodo *aux = frente;
int dato = aux->dato;
if(frente != NULL)
frente = frente->siguiente;
// frente = fin->siguiente;
delete aux;
return dato;
}