Dev - C++ - Doble Cola

 
Vista:
sin imagen de perfil
Val: 2
Ha disminuido su posición en 7 puestos en Dev - C++ (en relación al último mes)
Gráfica de Dev - C++

Doble Cola

Publicado por Carlos (2 intervenciones) el 13/03/2018 11:52:16
Buenas, estoy creando una doble cola (Puedo insertar y eliminar por el front o por el rear). Lo tengo que implementar con la clase vector y voy un poco perdido. Que métodos puedo utilizar para insertar por delante y por detrás? El push_back me inserta al final pero si quiero insertar un elemento al principio cómo lo hago?
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Doble Cola

Publicado por Alexis (1 intervención) el 20/01/2023 20:44:08
#include <iostream>
#include <stdlib.h>
using namespace std;


/* Estructura de los nodos de la cola
----------------------------------------------------------------------*/
struct nodo
{
char dato;
struct nodo *sgte;
};

/* Estructura de la cola
----------------------------------------------------------------------*/
struct cola
{
nodo *delante;
nodo *atras ;
};

/* Crear Nodo
----------------------------------------------------------------------*/
struct nodo *crearNodo( char x)
{
struct nodo *nuevoNodo = new(struct nodo);
nuevoNodo->dato = x;
return nuevoNodo;
};

/* Encolar elemento
----------------------------------------------------------------------*/
void encolar( struct cola &q, char x, int pos )
{
struct nodo *aux = crearNodo(x);

if( pos==1 )
{
if( q.delante==NULL)
{
aux->sgte = q.delante;
q.delante = aux;
q.atras = aux;
}
else
{
aux->sgte = q.delante;
q.delante = aux;
}
}
else
{
if( q.atras==NULL )
{
aux->sgte = q.atras;
q.delante = aux;
q.atras = aux;
}
else
{
aux->sgte = (q.atras)->sgte;
(q.atras)->sgte = aux;
}
}
}

/* Desencolar elemento
----------------------------------------------------------------------*/
char desencolar( struct cola &q, int pos )
{
char __c ;
struct nodo *aux = q.delante;

if( pos==1 )
{
__c = (q.delante)->dato;
q.delante = aux->sgte;
delete(aux);
}
else
{
__c = (q.atras)->dato;

while( aux->sgte!=q.atras )
aux = aux->sgte;

aux->sgte = (q.atras)->sgte;
delete(q.atras);
q.atras = aux;
}

return __c;
}

/* Mostrar Cola
----------------------------------------------------------------------*/
void muestraCola( struct cola q )
{
struct nodo *aux;

aux = q.delante;

while( aux != NULL )
{
cout<<" "<< aux->dato ;
aux = aux->sgte;
}
}

/* Menu de opciones
----------------------------------------------------------------------*/
void menu()
{
cout<<"\n\t IMPLEMENTACION DE COLAS DOBLES EN C++\n\n";
cout<<" 1. INSERTAR "<<endl;
cout<<" 2. ELIMINAR "<<endl;
cout<<" 3. MOSTRAR COLA "<<endl;
cout<<" 4. SALIR "<<endl;

cout<<"\n INGRESE OPCION: ";
}

/* Funcion Principal
----------------------------------------------------------------------*/
int main()
{
struct cola q;

q.delante = NULL;
q.atras = NULL;

char c; // caracter a encolar
char x ; // caracter que devuelve la funcion pop (desencolar)
int op; // opcion del menu
int pos; // posicion de isertar o eliminar (inicio o fin)

do
{
menu(); cin>> op;

switch(op)
{
case 1:
cout<< "\n Ingrese caracter: ";
cin>> c;

cout<<"\n\t[1] Inserta al inicio " <<endl;
cout<<"\t[2] Inserta al final " <<endl;
cout<<"\n\t Opcion : ";
cin>> pos;

encolar( q, c, pos );

cout<<"\n\n\t\tNumero '" << c << "' encolado...\n\n";

break;


case 2:
cout<<"\n\t[1] Elimina al inicio " <<endl;
cout<<"\t[2] Elimina al final " <<endl;
cout<<"\n\t Opcion : ";
cin>> pos;

x = desencolar( q, pos );

cout<<"\n\n\t\tNumero '"<< x <<"' desencolado...\n\n";

break;


case 3:
cout << "\n\n MOSTRANDO COLA\n\n";

if(q.delante!=NULL)
muestraCola( q );
else
cout<<"\n\n\tCola vacia...!" << endl;

break;
}

cout<<endl<<endl;
system("pause"); system("cls");

} while(op!=4);

return 0;
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar