Está en la página 1de 11

UNIVERSIDAD NACIONAL MAYOR DE SAN MARCOS

FACULTAD DE INGENIERIA DE SISTEMAS


E.A.P. INGENIERIA DE SISTEMAS

ESTRUCTURA DE DATOS

PRACTICA 6: Colas

Ejemplo 1:
Escribir un subalgoritmo que permita insertar un elemento en una doble cola – representada por
un vector – Tenga en cuenta que debe existir un parámetro que indique el extremo de la doble cola
en que debe realizarse la inserción.

Versión 1- Vector Lineal – Alumna: Motta,G.


REGISTRO Bicola
entero prim, ult, tama
entero V[max]
FinRegistro
Bicola BC

El predicado nos servirá para verificar si se puede insertar un elemento nuevo al vector, ya que se
tienen un número máximos de este.
Predicado ColaLlena(Bicola BC)
Si(BC.tama = max) entonces
retornar true
Sino
retornar false
FinSi
FinPredicado

La acción EncolarIZQ permite insertar un elemento por la parte izquierda. Al realizarse esta
acción, primero verificará si la cola está llena, en el caso contrario procederá a insertar el nuevo
elemento. El proceso de inserción es mover todos los elementos de la bicola un casillero, luego
insertar en la primera posición el nuevo dato.
Acción EncolarIZQ(Bicola BC, entero dato)
Si(ColaLlena()) entonces
Escribir("La cola ya se encuentra
llena")
Sino
BC.ult ← BC.ult + 1
BC.tama ← BC.tama + 1
i ← prim
temp → BC.V[prim]
Mientras(i != BC.ult) hacer
aux ← BC.V[i+1]
BC.V[i+1] ← temp
temp ← aux
i←i+1
FinMientras
BC.V[prim] ← dato
FinSi
FinAcción

La acción EncolarDER , solo se procederá a mover la última posición un casillero e insertar en ese
mismo el dato nuevo; teniendo en cuenta que la bicola no esté llena.

Accion EncolarDER(Bicola BC, entero dato)


Si (ColaLLena()) entonces
Escribir("La cola ya se encuentra llena")
Sino
BC.ult ← (BC.ult + 1) mod Max
BC.V[BC.ult] ← dato
BC.tama ← BC.tama + 1
Finsi
FinAcción

Versión 2 - Vector Lineal – Alumna: Acuña,B.

Registro Cola Para encolar al final se indica un


Entero max parámetro Verdadero
Entero p, f, tam Para encolar al inicio se indica un
Entero dato[max] parámetro Falso
Fin-Registro

Predicado ENCOLAR (Cola X, val, booleano p)


Si (Lleno(X))
Escribir “Cola llena”;
Sino
SI (p= Verdad) //encolar al final
X.f ← (X.f + 1) mod max; // hacemos que el ultimo avance de forma circular
X.dato [X.f] ←val;

SINO //encolar al comienzo


SI( X,p > 1) //si el principio no es la posición 1 del vector
X.p ← X.p -1
X.dato [X.p] ← val;
SINO // si el principio es la posición 1 del vector
X.p← X.max
X.dato [X.p] ← val;
FIN-SI
FIN-SI
X.tam ← X.tam +1;
FIN-SI
FIN-P

Predicado Lleno(Cola C)
Si (C.tam=C.max)
retornar Verdadero
sino
retornar falso
fin-si
Fin-predicado

Ejemplo 2:

Un funcionario de Juzgados tramita expedientes, de forma que siempre va cogiendo de la bandeja


de expedientes a tramitar el que se encuentra más arriba. Cada expediente se puede caracterizar por
un código, el asunto del que trata, la fecha de expedición y la fecha de tramitación. Una ordenanza
es el encargado de traerle nuevos expedientes, que va dejando encima de los que ya había en la
bandeja.
a. Definir la operación ApilarExp, cuyo resultado es añadir a la estructura bandeja de expedientes
los datos almacenados en la estructura ordenanza.
b. Como con este sistema es fácil que algún expediente se retrase mucho, de vez en cuando un juez
pide que se tramite un determinado expediente urgentemente. Para ello indica el código de dicho
expediente. Definir la operación Urgencia, que permitirá buscar un determinado expediente en la
bandeja y eliminarlo de ella para tramitarlo.

Versión 1 - Alumna: Motta, G.


Observación
b. Los nuevos expedientes se guardan en una cola, el cual cada vez que el encargado recibe un
expediente lo va colocando encima de la bandeja de expedientes
Versión 2 – Alumna: Acuña, B.

a) Definir la estructura de datos más adecuada para representar la bandeja de expedientes


y la más adecuada para representar el cargamento de expedientes nuevos que trae el
ordenanza.
Registro Expediente Registro Pila Registro Cola
Entero codigo Entero max Entero max
Cadena asunto Entero cima Entero p, f, tam
Cadena fechae Expediente dato [max] Expediente dato [max]
Cadena fechat
Fin-Registro Fin-Registro
Fin-Registro
Expediente dato Pila Bandeja Cola Expedientes
b) Definir la operación ApilarExp, cuyo resultado es añadir a la estructura bandeja de
expedientes los datos almacenados en la estructura ordenanza.
Predicado ApilarExp (Pila bandeja, Cola expedientes)
Expediente val
Entero i ← 0
Mientras ( i<=expedientes.tam y !Llena(bandeja))
Desencolar (expedientes, val) //quitar expediente de la cola
Empilar (bandeja, val) //colocar expediente en bandeja
Fin-Para
Fin-Predicado
Función Desencolar( Cola C, Expediente val)
Si (VacioCola (C))
Escribir “Cola vacía”
SINO
val ← C.dato[C.p]
C.p ← C.p+1 mod C.max;
C.tam ←C. tam-1
Fin-Si
FIN-Funcion

Booleano Funcion VacioCola(Cola C)


Si (C.tam=0)
retornar Verdadero
sino
retornar falso
fin-si
Fin-predicado
Booleano Funcion Llena(Pila p)
Si (p.cima = p.max)
retorna Verdadero
sino
retorna falso
finsi
Fin- Función

Accion Empilar(Pila p,val)


Si (Llena(p))
escribir (“ Pila llena”)
sino
p.cima ← p.cima + 1
P.dato(Cima) ← val
Fin-si
Fin-accion

c) Como con este sistema es fácil que algún expediente se retrase mucho, de vez en
cuando un juez pide que se tramite un determinado expediente urgentemente. Para ello
indica el código de dicho expediente. Definir la operación Urgencia, que permitirá
buscar un determinado expediente en la bandeja y eliminarlo de ella para tramitarlo.

Expediente Funcion Urgencia (Pila bandeja, Entero cod)


Pila auxiliar
auxiliar.max ← bandeja.cima
auxliar.cima ← 0
Expediente exp
Booleano encontrado ← FALSO
Mientras (!Vacio(bandeja) y encontrado = FALSO)//vaciar hasta encontrar expediente
Desempilar (bandeja , exp)
SI ( exp.codigo = cod) //comparar su codigo
encontrado ← VERDAD
SINO //sino se encuentra empilar en pila auxiliar
Empilar (auxiliar, exp)
FIN-Si
FIN-Mientras
Expediente final ← exp //expediente encontrado
Mientras (!Vacio(auxliar))
Desempilar (auxiliar, exp )
Empilar (bandeja, exp) //se empila nuevamente los demas expedientes
FIN-Mientras
Retornar final //devuelve el expediente encontrado
Fin-Predicado
Predicado Desempilar (Pila p, Dato e)
Si vacio(p)
Escribir (“Pila Vacia”)
SINO
e ← p.dato(cima)
p.cima--
Fin-SI
Fin-Predicado

Booleano Funcion Llena(Pila p)


Si (p.cima = p.max)
retorna Verdadero
sino
retorna falso
finsi
Fin- Función

Booleano Funcion Vacio(Pila p)


Si (p.cima = 0)
retornar Verdadero
sino
retornar falso
fin-si
Fin- Función

Accion Empilar(Pila p,val)


Si (Llena(p))
escribir (“ Pila llena”)
sino
p.cima ← p.cima + 1
P.dato(Cima) ← val
Fin-si
Fin-accion

También podría gustarte