Está en la página 1de 11

Colas

Implementadas con Punteros

Algoritmos y Estructuras de Datos II


Lic. Ana Mara Company

Qu es una Cola?
Es una lista en la que las inserciones se realizan por un

extremo(final) y las eliminaciones se realizan por el


otro extremo (principio de la lista o frente).
Tambin se llaman listas FIFO, del ingls First-InFirst-Out, es decir, el primero en entrar es el primero
en salir

Definicin del tipo Lista


Las colas podran definirse siguiendo la misma definicin de

las listas, pero para algunas operaciones resulta ineficiente.


Entonces, podemos utilizar una definicin que considera a
una cola como un par de punteros:
type
tElem = char; {o lo que corresponda}
tApNodo = ^tNodoCola;
tNodoCola = record
contenido: tElem;
siguiente: tApNodo
end; {tNodoCola}
tCola = record
principio: tApNodo;
final: tApNodo
end; {tCola}

Operaciones bsicas sobre colas I


Creacin de una cola vaca
ColaVaca
Consulta del primer elemento

Aadir un elemento
Suprimir el primer elemento

Operaciones bsicas sobre colas II


Creacin de una cola vaca
Solo debemos iniciar a nil los campos principio y final del

registro.

Cola Vaca
Es conveniente considerar una lista vaca a aquella cuyo puntero

final tiene el valor nil ; slo es necesario evaluar la expresin


lgica cola.final = nil.

Consulta del primer elemento


Esta operacin es idntica a Cima de una pila, ya que nos

interesa el contenido del primer nodo de la cola.

Operaciones bsicas sobre colas III


Aadir un elemento
si cola no est vaca:
Crear y dar valores al nuevoNodo
Actualizar los punteros y el final de cola
en otro caso
Crear y dar valores al nuevoNodo
Actualizar principio y final de cola

Operaciones bsicas sobre colas IV


Suprimir el primer elemento
tenemos que considerar dos casos distintos:
1. Que la cola sea unitaria, pues al sacar su nico

elemento se queda vaca, por lo tanto hay que


actualizar tanto su principio como su final.
2. Que la cola tenga longitud mayor o igual a dos, en
cuyo caso slo hay que actualizar el campo
principio.

Ejercicio de ejemplo I
{
Ejercicio colas - Operaciones bsicas
sobre colas
}
program colas;
uses crt;
type
tElem = String;

procedure CrearCola(var cola: tCola);


begin
cola.principio:= nil;
cola.final:= nil
end;

tNodoCola = record
contenido: tElem;
siguiente: tApNodo
end;

function colaVacia(var cola:tCola):Boolean;


begin
if cola.final =nil then
colaVacia := true
else
colaVacia := false;
end;

tCola = record
principio: tApNodo;
final: tApNodo
end;

function primerElemento(var cola:tApNodo):tElem;


begin
primerElemento:= cola^.contenido;
end;

tApNodo = ^tNodoCola;

var
vc_cola:tCola;

Ejercicio de ejemplo II
procedure PonerEnCola(dato: tElem; var cola: tCola);
var
nuevoNodo: tApNodo;
begin
New(nuevoNodo);
nuevoNodo^.contenido:= dato;
nuevoNodo^.siguiente:= nil;
if cola.final <> nil then
begin
{Si la cola no est vaca se
actualizan los punteros}
cola.final^.siguiente:=
nuevoNodo;
cola.final:= nuevoNodo
end
else
begin
{Actualizacin de punteros}
cola.principio:=
nuevoNodo;
cola.final:= nuevoNodo
end
end;

procedure SacarDeCola(var cola: tCola);


var
apuntaAux : tApNodo;
begin
if cola.principio = cola.final then
begin
{La cola es unitaria}
apuntaAux:= cola.principio;
Dispose(apuntaAux);
cola.principio:= nil;
cola.final:= nil
end
else
begin
{Si Longitud(cola) >= 2}
apuntaAux:= cola.principio;
cola.principio:=
apuntaAux^.siguiente;
Dispose(apuntaAux)
end
end;

Ejercicio de ejemplo III


procedure MostrarCola(cola: tCola);
var
apuntaAux: tApNodo;
begin
if cola.final= nil then
WriteLn('Cola vaca')
else
begin
apuntaAux:= cola.principio;
while apuntaAux <> nil do
begin
Write(apuntaAux^.contenido);
write(' ');
apuntaAux:=
apuntaAux^.siguiente
end;
end
end;

{Programa principal}
BEGIN
CrearCola(vc_cola);
PonerEnCola('Primero', vc_cola);
PonerEnCola('Segundo', vc_cola);
PonerEnCola('Tercero', vc_cola);
MostrarCola(vc_cola);
SacarDeCola(vc_cola);
writeln();
MostrarCola(vc_cola);
writeln();
END.

Bibliografa
Mark Allen Weiss - Estructuras de Datos y Algoritmos - Florida

International University - Ao: 1995 - Editorial: Addison-Wesley


Iberoamericana .

Joyanes Aguilar, Luis - Programacin en Pascal - 4 Edicin - Ao: 2006 -

Editorial: McGraw-Hill/Interamericana de Espaa, S.A.U.

Cristbal Pareja Flores, Manuel Ojeda Aciego, ngel Andeyro Quesada,

Carlos Rossi Jimnez - Algoritmos y Programacin en Pascal.

Joyanes Aguilar, Luis - Fundamentos de la Programacin. Algoritmos,

Estructuras de Datos y Objetos - 3 Edicin - Editorial: McGraw-Hill

También podría gustarte