Sie sind auf Seite 1von 2

Laboratorio de Programacin ESTRUCTURA Y ALGO I

Ing.Alberto MOreno @ 2013


1






Teora.
Prctica : Colas en C++

En muchas aplicaciones se cumple el hecho de que el primer proceso que solicita un servicio o recurso es el primero en
ser servido. Para retirar elementos (servicios, recursos) en el mismo orden en que fueron solicitados, se necesitan unas
estructuras de datos abstractas que mantengan una secuencia de valores y permitan aadir nuevos elementos por un
extremo y retirarlos por el otro. Esta estructura recibe el nombre de cola.
En las colas el elemento que entr el primero sale tambin el primero, por ello se le conoce tambin como listas FIFO
(first-in, first-out; primero en entrar, primero en salir.)
Se define la cola, como una estructura de datos homognea de tamao variable que soporta el siguiente modo de acceso:
insercin por un extremo y extraccin por el opuesto. Operaciones posibles sobre la cola son la creacin de una cola
vaca, la determinacin de s la cola est o no vaca y la destruccin de la cola.
De igual modo que se ha visto para la pila, una cola se puede implementar haciendo uso de las estructuras dinmicas de
datos. En este caso, se simula mediante una lista enlazada que mantiene dos punteros, uno llamado frente por donde se
van extrayendo los elementos ms antiguos de la cola, y otro llamado final, que seala al extremo por el cual se irn
aadiendo elementos a la cola. De esta forma, el puntero final nos garantiza que cada vez que se tenga que extraer un
elemento de la cola, no sea necesario recorrer sta desde el principio, lo cual sera altamente ineficiente para colas largas.
Las operaciones de insertar y extraer de la cola tienen acceso directo a los nodos de la cola en los que se van a realizar
estas operaciones.
La diferencia con las pilas reside en el modo de entrada y salida de los datos, en las colas las inserciones se realizan al
final de la lista, no al principio.

Extraer
Aadir






Cola

FrenteFinal

Prctica

Se desea simular el comportamiento de una parada de autobs a la que slo puede llegar un autobs. Cuando llegue un
autobs con n plazas libes, las personas que estn esperando subirn por orden de llegada a la parada hasta completar las
plazas vacas o no haber esperando ms personas dicho autobs.
El comportamiento de la parada es idntico a una estructura de Cola. Por lo que se debe implementar una Cola (a partir
de la definicin que se adjunta Y SIN MODIFICAR LA DEFINICIN DE LA MISMA) y un programa cliente con las
siguientes opciones de menu:


Nombre: (Apellidos, Nombre) Curso:
Especialidad: (Gestin/Sistemas) Grupo: (A/B/C/D)
Puesto: nmero de ordenador Fecha: dd/mm/aa

Prctica 18: Colas en C++
A. Llegar Persona Parada
B. Llegar Bus Parada
C. Primero Bus Parada
D. PintarParada

X. Salir del Programa

Llegar Persona Parada. Se pedir por teclado el nombre de la persona que est esperando el autobs y se meter en
la cola.
Llegar Bus Parada. Se pedir por teclado el nmero de plazas libres que tiene el autobs y se quitarn de la cola
(mostrando su nombre por pantalla) tantas personas como plazas libres haya o hasta que la cola est vaca.
Primero Bus Parada. Mostrar por pantalla el nombre de la primera persona que espera el autobs.
PintarParada. Muestra por orden todas las personas que estn en la cola.
Salir del Programa. Se pedir confirmacin de salida.
Laboratorio de Programacin ESTRUCTURA Y ALGO I
Ing.Alberto MOreno @ 2013
2



Despus de cada opcin se har una pausa y se limpiar la pantalla antes de volver al men principal.

// Fichero Cadena.h
#ifndef _Cadena_h_
#define _Cadena_h_
namespace MCadena
{ const int MAXCAD = 80;
const char FINCAD = char(0);

typedef enum { Menor, Igual, Mayor } TCompara;
typedef char TCadena[MAXCAD+1];

void CopiaCadena(TCadena s1, TCadena &s2); // s2 = s1
TCompara ComparaCadena(TCadena s1, TCadena s2);
bool IgualCadena(TCadena s1, TCadena s2);
bool MayorCadena(TCadena s1, TCadena s2);
bool MenorCadena(TCadena s1, TCadena s2);

}

#endif

// Fichero Cola.h
#ifndef _Cola_h_
#define _Cola_h_

#include "Cadena.h"

namespace MCola
{ using namespace MCadena;

typedef struct TNodo *TLista;
struct TNodo
{ TCadena val;
TLista sig;
};

struct TCola
{ TLista frente;
TLista final;
};

TCola CrearCola();
void DestruirCola(TCola &c);
void MeterCola(TCola &c, TCadena s, bool &llena);
void SacarCola(TCola &c, TCadena &s, bool &vacia);
bool ColaLlena(TCola c);
bool ColaVacia(TCola c);
}

#endif

Das könnte Ihnen auch gefallen