#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
typedef struct nodo {
int info;
struct nodo *sig;
};
struct nodo *raiz=NULL;
struct nodo *ultimo=NULL;
int vacia()
{
if (raiz == NULL)
return 1;
else
return 0;
}
void insertar(int x)
{
struct nodo *nuevo; //
nuevo=(struct nodo*)malloc(sizeof(struct nodo)); // nuevo tiene la direccion de.
//printf(" \n\t\t\t La direccion del nuevo nodo es %i --> ", nuevo);
nuevo->info=x; // el puntero esta apuntando a la estructura, info es un elemento numerico y lo estoy asignando a la estructura.
// la funcion pide x, y x es la parte de info=x.
nuevo->sig=NULL; //nuevo no apunta a ninguno
if (vacia()) //va a ver si raiz = null. al retornar 1 estamos diciendo verdadero
{
raiz = nuevo; //a raiz le daos el valor denuevo y ultimo tb vale nuevo pues el primero y el ultimo son el mismo si hay solo 1 persona en cola
ultimo = nuevo;
}
else
{
ultimo->sig = nuevo; //ultimo siempre se actualiza al nuevo valor, ultimo apunta a siguiente pa enlazar
ultimo = nuevo; // ahora ultimo es el nuevo
}
}
int extraer() //al extraer la cola esta empieza a desaparecer
{
if (!vacia()) //retorna un cero, Falso en informatica
{
int informacion = raiz->info; //declaro una variable informacion, raiz es el primero y vamos a decir que
struct nodo *primero = raiz; //declaramos un puntero llamado primero y es igual a raiz
// el primero que entra es el primero que sale, por eso es primero
if (raiz == ultimo) //cuando solo hay 1 persona o elemento
{
raiz = NULL; // la cosa es extraer, saque al ultimo que quedaba, por eso raiz = null
ultimo = NULL; //ultimo tb es null por lo mismo
}
else
{
primero = raiz; //se pierde el valor de raiz
raiz = raiz->sig; //estamos dejando en raiz la direccion del siguiente nodo
}
free(primero); //liberando el primer nodo y desaparece, el que se guardo con malloc, el que iva al frente de la fila se va
return informacion;
}
else
return -1;
}
void imprimir()
{
struct nodo *recorre = raiz; //declarar puntero recorreo con el valor de raiz
// NO estamos eliminando memoria, la lista queda igual
printf("\n\t Listado de todos los elementos que restan en la cola.\n");
while (recorre != NULL) //
{
printf("\n\t %i ", recorre->info); //se imprime el valor, ojo, es %i pq es un entero
recorre = recorre->sig;
}
printf("\n");
}
int main()
{
printf ("\n\t Lista tipo cola en Memoria Dinamica "); // estan en cualquier parte de la memoria, no son contiguos
printf ("\n\t Insertar los siguientes valores: 5,10,50,70,120,300 ");
insertar(5);
insertar(10);
insertar(50);
insertar(70);
insertar(120);
insertar(300);
imprimir();
printf("\n\t Extraemos uno de la cola --> %i, (se desplaza una posicion )"); // 5 fue extraido por lo tanto no sera mostrado
printf ("\n\n Se imprime el dato del primer nodo de la cola --> %i : \n", extraer());
imprimir();
getch();
return 0;
}