	//COLA.CPP
#include <iostream.h>
#include <iomanip.h>
#include <conio.h>

const int MaxCola = 5;
const int nulo =  -1;

int frente = nulo;
int final = nulo;
int cola[MaxCola];

void Insertar(){

	if ( (final+1 == MaxCola && frente == 0) || (final+1 == frente) ){
		cout << "cola llena ";
		getch();
	}
	else
		if (frente == nulo){  //la cola estaba vaca
			frente = final = 0;
			cout << "\n\nElemento a insertar: ";
			cin >> cola[frente];
		}
		else {  // caso general
			final++;
			if (final == MaxCola) // se da "la vuelta al inicio"
				final = 0;
			cout << "\n\nElemento a insertar: ";
			cin >> cola[final];
		}
}


void Atender(){

	if (frente == nulo)
		cout << "\nCola vacia\a";
	else {
		cout << "\nAtendido: " << cola[frente];
		if (frente == final)  // cola qued vaca
			frente = final = nulo;
		else{
			frente++;
			if (frente == MaxCola)
				frente = 0;
		}
	}
}

void Listar(){
	int i;

	if (frente==nulo)
		cout << "\nCola vacia \a\n";
	else
		if (frente <= final)
			for (i=frente; i <= final; i++)
				cout << setw(4) << cola[i];
		else {
			for (i=frente; i < MaxCola; i++)
				cout << setw(4) << cola[i];

			for (i=0; i <= final; i++)
				cout << setw(4) << cola[i];
		}
}

void main(){
	char opcion;

	do{
		clrscr();	
		Listar();
		cout << "Insertar  Atender  Salir \n";
		switch (opcion=getch()){
			case 'I':; case 'i': Insertar(); break;
			case 'A':; case 'a': Atender(); break;
		}
  } while (opcion != 'S' && opcion != 's');
}
