COLAS_1.c



// EJEMPLO BASICO DE UNA COLA

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

struct nodo
{
	int dato;
	struct nodo *atras;
};

struct nodo *cabeza = NULL;

struct nodo *isEmpty(struct nodo *cabeza ) { return cabeza; }

void ImprimeCola( struct nodo *cabeza )
{
	if ( !isEmpty(cabeza) ) return;
	printf("%d ==> ", cabeza->dato);
	cabeza = cabeza->atras;
	ImprimeCola(cabeza);
}

void ALaCola(struct nodo *new)
{
	struct nodo *aux = cabeza;
	if ( !cabeza ) cabeza = new; //eres el primero?
	else
	{
		while ( aux )
			if ( aux->atras ) aux = aux->atras;
			else { aux->atras = new; break; }
	}
}

void Guardar(char *cad)
{
	struct nodo *new = (struct nodo*)malloc(sizeof(struct nodo));
	new->dato = atoi(cad);
	new->atras = NULL;
	ALaCola(new);
}

void Atender( void )
{
	if ( isEmpty( cabeza ) )
	{
		printf("\nSe atendió a %d\n", cabeza->dato);
		cabeza = cabeza->atras;
	}
	else printf("NADIE A QUIEN ATENDER...\n");
}

int LeeOpcion( void )
{
	char *cad = (char*)malloc(sizeof(char)*80);
	printf("(g, a, i, x)==> ");
	fgets(cad,80,stdin);
	switch ( cad[0] )
	{
		case 103:		// es una 'g' - g 23 (guardar)
			cad++; cad++;
			Guardar(cad);
			break;
		case 'a':		// es una 'a' - (atender)
			Atender( );
			break;
		case 'x':		// es una 'x' - x ????
			exit(0);
		case 'i':		// es una 'i' - i ??? (mostrar)
			ImprimeCola(cabeza);
			break;
	}
}

int ciclo(void)
{
	while( 1 )
	{
		ImprimeCola(cabeza);
		printf("\n");
		LeeOpcion();
	}
}

int main() { ciclo(); }