necesito crear un cola dinamica y que cada elemento de una cola dinamica este enlazado a una pila y que esos elemento de la pila le correspondan unicamente al elemento de la cola al que estan asociados, estoy haciendo un programas de gradas y en las gradas insertas persona, las gradas serian la cola y los asiento las pilas, no puedo hacr quela pila le corresponda a solo un elemtno, al extraer de la pila, extrae todos los que haya insertado hasta el momento. el codigo es este
#include<stdio.h>
#include<conio.h>
#include<iostream>
using namespace std;
struct grada
{
int grad;
struct grada *sig;
struct pila *tope;
};
struct pila
{
int silla;
struct pila *ant;
};
void insgrada(struct grada **inicio,struct grada **fin,struct pila *tope)
{
struct grada *aux = NULL;
aux = (struct grada *) malloc ( sizeof(struct grada *));
if((*fin) == NULL )
{
aux->sig = NULL;
(*inicio) = (*fin) = aux;
}
else
{
aux->sig = NULL;
aux->tope = tope;
(*fin)->sig = aux;
(*fin) = aux;
}
cout << "Crea la grada numero?" << endl;
cin >> (*fin)->grad;
cout << "La grada numero " << (*fin)->grad << " ha sido creada" << endl;
}
void inspila(struct pila **tope,struct grada **fin)
{
struct pila *aux;
struct grada *auxg = NULL;
aux = (struct pila *) malloc (sizeof(struct pila));
//auxg = (struct grada *) malloc (sizeof(struct grada));
if((*tope) == NULL)
aux->ant = NULL;
else
{
aux->ant = (*tope);
(*fin)->tope = (*tope);
}
(*tope) = aux;
cout << "Asiento numero: " << endl;
cin >> (*tope)->silla;
cout << "Has insertado una silla en la grada numero: " << (*fin)->grad << endl;
}
void extraersilla(struct pila **tope,struct grada **inicio)
{
struct pila *aux=NULL;
struct grada *auxg = NULL;
aux = (*tope);
if((*inicio)->tope == NULL)
{
cout << "No hay sillas para extraer" << endl;
}
else
{
(*tope) = aux->ant;
(*inicio)->tope = (*tope);
cout << "La silla " << aux->silla << "a sido eliminada de la grada " << endl;
free(aux);
}
}
void listarpila(struct pila *tope)
{
struct pila *aux;
aux = tope;
while( aux != NULL)
{
cout << "Silla numero: " << aux->silla << endl;;
aux = aux->ant;
}
}
void main()
{
struct grada *inicio = NULL,*fin = NULL;
struct pila *tope = NULL;
int op;
do{
cout << "1.-Insertar grada\n2.-Insertar asiento en grada\n3.-Extraer elemento de pila\n5.-Salir" << endl;
cin >> op;
switch(op)
{
case 1:insgrada(&inicio,&fin,tope);
break;
case 2:
if(inicio == NULL)
cout << "Aun no hay grada donde insertar sillas" << endl;
else
inspila(&tope,&fin);
break;
case 3:extraersilla(&tope,&inicio);
break;
case 4:listarpila(tope);
break;
}
}while(op != 5);
return;
}