#include <iostream>
using namespace std;
struct Cola
{
int dato;
Cola* ptrSiguiente;
};
typedef Cola *ptrNodoCola;
int estaVacia(ptrNodoCola ptrCabeza);
int retirar(ptrNodoCola *ptrCabeza, ptrNodoCola *ptrTalon);
void agregar(ptrNodoCola *ptrCabeza, ptrNodoCola *ptrTalon, int valor);
int main()
{
ptrNodoCola ptrCabeza = NULL;
ptrNodoCola ptrTalon = NULL;
int N, t, tacosVendidos = 0, fila = 0;
char opcion;
cout << "\nNumero de operaciones: ";
cin >> N;
for (size_t i = 0; i < N; i++)
{
cout << "\n1.- Agregar fila, 2.- Atender, 3.- Clientes fila, 4.- Tacos vendidos: ";
cin >> opcion;
switch (opcion)
{
case '1':
cout << "\nNuevo cliente en la fila";
cout << "\nNumero de tacos: ";
cin >> t;
agregar(&ptrCabeza, &ptrTalon, t);
fila++;
break;
case '2':
if (!estaVacia(ptrCabeza))
{
tacosVendidos += retirar(&ptrCabeza, &ptrTalon);
fila--;
}
else
cout << "\nLa fila esta vacia" << endl;
break;
case '3':
cout << "\nClientes en la fila: " << fila << endl;
break;
case '4':
cout << "\nTacos vendidos: " << tacosVendidos << endl;
break;
default:
cout << "\n\nOPCION INCORRECTA" << endl;
break;
}
}
return EXIT_SUCCESS;
}
int estaVacia( ptrNodoCola ptrCabeza )
{
return ptrCabeza == NULL;
}
void agregar( ptrNodoCola *ptrCabeza, ptrNodoCola *ptrTalon, int valor )
{
ptrNodoCola ptrNuevo;
ptrNuevo = new Cola;
ptrNuevo->dato = valor;
ptrNuevo->ptrSiguiente = NULL;
if (estaVacia(*ptrCabeza))
*ptrCabeza = ptrNuevo;
else
(*ptrTalon)->ptrSiguiente = ptrNuevo;
*ptrTalon = ptrNuevo;
}
int retirar(ptrNodoCola *ptrCabeza, ptrNodoCola *ptrTalon)
{
int valor;
ptrNodoCola tempPtr;
valor = (*ptrCabeza)->dato;
tempPtr = *ptrCabeza;
*ptrCabeza = (*ptrCabeza)->ptrSiguiente;
if (*ptrCabeza == NULL)
*ptrTalon = NULL;
delete tempPtr;
return valor;
}