Una cola es una estructura de datos, caracterizada por ser una secuencia de elementos en la que la operación de inserción push se realiza por un extremo y la operación de extracción pop por el otro. También se le llama estructura FIFO (del inglés First In First Out), que quiere decir "el primero que entra es el primero que sale".
Uso de la cola
Las colas se utilizan en sistemas informáticos, transportes y operaciones de investigación (entre otros), dónde los objetos, personas o eventos son tomados como datos que se almacenan y se guardan mediante colas para su posterior procesamiento. Este tipo de estructura de datos abstracta se implementa en lenguajes orientados a objetos mediante clases, en forma de listas enlazadas.
Operaciones Básicas
Operaciones Básicas
- Crear: se crea la cola vacía.
- Encolar (añadir, entrar, push): se añade un elemento a la cola. Se añade al final de esta.
- Desencolar (sacar, salir, pop): se elimina el elemento frontal de la cola, es decir, el primer elemento que entró.
- Frente (consultar, front): se devuelve el elemento frontal de la cola, es decir, el primero elemento que entró.
Colas simples: Se inserta por un sitio y se saca por otr, en este caso se inserta por el final y se saca por el principio.
Colas circulares: Se considera que después del ultimo elemento se accede de nuevo al primero.
Colas con prioridad: Se implementan mediante litas o arrays ordenados
Colas en c++
#ifndef COLA #define COLA // Define la cola template <class T> class Cola{ private: struct Nodo{ T elemento; struct Nodo* siguiente; // coloca el nodo en la segunda posición }* primero; struct Nodo* ultimo; unsigned int elementos; public: Cola(){ elementos = 0; } ~Cola(){ while (elementos != 0) pop(); } void push(const T& elem){ Nodo* aux = new Nodo; aux->elemento = elem; if (elementos == 0) primero = aux; else ultimo->siguiente = aux; ultimo = aux; ++elementos; } void pop(){ Nodo* aux = primero; primero = primero->siguiente; delete aux; --elementos; } T consultar() const{ return primero->elemento; } bool vacia() const{ return elementos == 0; } unsigned int size() const{ return elementos; } }; #endif
Ejemplo
#include <stdio.h>
#include <conio.h>
#include <string.h>
#include <stdlib.h>
#include <ctype.h>
typedef struct datos elemento;
struct datos {
char suceso[81];
elemento *siguiente;
};
void error (void)
{
printf("Error, insufuciente espacio en memoria\n\a");
exit(1);
}
elemento *nuevoelemento (void)
{
elemento *q=(elemento*)malloc(sizeof(elemento));
if(!q)error();
return q;
}
void menu (void);
void introducir (elemento**, elemento**, char[]);
char *realizar (elemento**, elemento**);
main()
{
elemento *principio, *final;
char opcion, suceso[81];
principio=final=NULL;
while(1){
do{
clrscr();
menu();
opcion=toupper(getche());
}while(opcion!='I' && opcion !='R' && opcion != 'S');
clrscr();
switch(opcion){
case 'I': printf("\nIntroduzca un suceso:\n");
gets(suceso);
introducir(&principio, &final, suceso);
break;
case 'R': strcpy(suceso, realizar(&principio, &final));
if(*suceso)
printf("\realizando el suceso %s", suceso);
printf("Pulse una tecla para continuar:\n");
getch();
break;
case 'S': exit(0);
}
}
}
void menu(void)
{
printf("\n\tIntroducir suceso");
printf("\n\t realizar el suceso");
printf("\n\t salir");
printf("\n\t elija la opcion deseada (I, R, S)");
}
/*A$adir a la cola */
void introducir (elemento **p, elemento **f, char suceso[])
{
elemento *pc, *fc, *q;
pc=*p; /*principio de la cola */
fc=*f; /*final de la cola */
q=nuevoelemento();
strcpy(q->suceso, suceso);
q->siguiente=NULL;
if(fc==NULL)
pc=fc=q;
else
fc=fc->siguiente=q;
*p=pc;
*f=fc;
}
/*Recuperar dato de la cola */
char *realizar (elemento **p, elemento **f)
{
elemento *pc, *fc, *q;
char *suceso;
pc=*p; /*principio de la cola */
fc=*f; /*final de la cola*/
if(pc!=NULL)
{
q=pc;
suceso=(char*)malloc(strlen(q->suceso)+1);
strcpy(suceso, q->suceso);
pc=pc->siguiente;
if(pc==NULL)
fc=NULL;
free(q);
*p=pc;
*f=fc;
}
else
{
printf("no hay sucesos\n\n\a");
suceso[0]='\0';
}
return suceso;
}