Está en la página 1de 7

Estructura de Datos

Trabajo Práctico Parcial2 Total Puntos: 35


Profesora: Ms. Blanca Duarte de Báez Fecha de entrega: 12/10/20

Los trabajos se pueden realizar en forma grupal, hasta 4 integrantes y deben entregarse por
ecampus en la fecha fijada.
Integrantes: Héctor Gimenez

Conformar grupos de hasta 4 alumnos. (También puede realizar en forma


individual) A. Trabajo sobre Colas (20 puntos)

1. Dada las siguientes proposiciones, para una cola lineal, responde con verdadero, falso,
el resultado de la operación o la excepción correspondiente. (5 ptos)

a. COLA_VACIA (CREAR_COLA ( )) = Verdadero, crea la cola


b. COLA_VACIA (INSERTAR ( M, COLA ) ) = Verdadero, se ingresa el elemento
c. ELIMINAR (CREAR_COLA ( ) ) = Falso, ya que hay una cola creada
d. PRIMERO_COLA (CREAR_COLA ( ) ) = Falso, ya que hay una cola creada
e. PRIMERO_COLA (ELIMINAR ( M,COLA ) ) = Verdadero, elimina el elemento de la
cola

2. Analiza los algoritmos de inserción y eliminación para para colas lineales, desarrollados
en clase y responde: (6 ptos)
a. ¿Qué excepción se controla al insertar un elemento en una cola?
En este caso primeramente se verifica que la cola no esté llena, ya que ante
ese tipo de escenarios se genera un desbordamiento u overflow, ya que el
mismo esta al máximo de su capacidad.
b. ¿Qué variables se utilizan para determinar si una cola está llena?
Se utiliza la variable Final, también la variable Max y una variable booleana de
nombre bandera que en este caso retorna true o false dependiendo de si la
cola está llena o no.
c. ¿Qué excepción se controla para eliminar el primer elemento de una la cola?
Que la cola tenga elementos para eliminar, además de que el valor pasado
como argumento debe coincidir con el frente de la cola
d. ¿Qué variables se utilizan para determinar si una cola está vacía?
Las variables frente y bandera
e. ¿Puede darse desbordamiento en una cola lineal con celdas disponibles?
Sí, es posible ya que al eliminar un elemento en caso de que no se reacomode
la posición los elementos sobrantes al querer insertar nuevos elementos se
puede generar este error.
f. ¿Cuál sería una posible solución?
Utilizar una cola circular.

3. Sea COLA una cola lineal de 6 elementos. Inicialmente la cola está vacía (FRENTE =
FONDO = 0). Grafique el estado de COLA e indique durante todas las operaciones
siguientes el valor de FRENTE, FONDO y NUMEL: (9 ptos)
a. Insertar los elementos AA, BB, CC

Frente: 1 Fondo: 3 Numel: 3

AA BB CC
b. Eliminar el elemento AA

Frente: 2 Fondo: 3 Numel: 2

BB CC

c. Insertar los elementos DD, EE, FF

Frente: 2 Fondo: 6 Numel: 5

BB CC DD EE FF

d. Insertar el elemento GG
No es posible, se genera error de desborde. La cola queda igual

Frente: 2 Fondo: 6 Numel: 5

BB CC DD EE FF

e. Insertar el elemento HH
No es posible, se genera error de desborde. La cola queda igual.

Frente: 2 Fondo: 6 Numel: 5

BB CC DD EE FF

f. Eliminar y un elemento de la cola. ¿Cuál fue el elemento eliminado?


Se elimina el elemento BB

Frente: 3 Fondo: 6 Numel: 4

CC DD EE FF

g. Eliminar los elementos BB y CC

Frente: 4 Fondo: 6 Numel: 3

DD EE FF

h. ¿Con cuántos elementos se quedó COLA?


Se quedó con 3 elementos.
i. Hubo algún caso de error (desbordamientos, subdesbordamiento)? Si ocurrió
explíquelo.

Si, hubo errores de overflow ya que al intentar añadir elementos a la cola a


pesar de que tenía celdas libres, no están disponibles para ser utilizados
hasta que la cola se vacíe por completo.
B. Ejercicio de razonamiento lógico (8 puntos)
1) Dado el siguiente algoritmo para la inserción de elementos en una cola circular, lista las
diferencias con respecto al algoritmo para inserción de una cola lineal:

Inserta_ColaCircular (COLACIR, NUMEL, FRENTE, FONDO, NUMAX, DATO)


‘Evalúa cola lineal llena o Cola circula llena
Si ((FONDO = NUMAX) y (FRENTE = 1)) o ((FONDO + 1) = FRENTE)

Escribir “Cola Llena”


Sino
‘Evalúa se llenó la cola para reiniciar final
Si (FONDO = NUMAX)
FONDO = 1
Sino
FONDO = FONDO + 1
Fin si

COLACIR[FONDO] = DATO

‘Evalúa si es el primer elemento a insertar para inicializar FRENTE


Si FRENTE = 0
FRENTE = 1
Fin si

Fin si
Fin procedimiento

Respuesta: En este caso verifica las variables Frente y Fondo de la cola, una vez que el fondo
sea igual al tamaño máximo de la cola, se cambia el valor del apuntador fondo de la cola y se
coloca para que apunte desde la primera posición de la cola a modo de poder ir agregando
nuevos elementos en caso de que la cola no este llena.

2) Dado el siguiente algoritmo para eliminación de elementos en una cola circular, lista las
diferencias con respecto al algoritmo para eliminación de una cola lineal:
Elimina_ColaCircular (COLACIR, FRENTE, FONDO, NUMAX, NUMEL, DATO)

‘Evalúa si la cola está vacía


Si FRENTE = 0
Escribir “Cola vacía”
Sino
DATO = COLACIR[FRENTE]
‘Evalúa si hay un solo elemento, para inicializar FRENTE y FONDO = 0
Si FRENTE = FONDO
FRENTE = 0 FONDO = 0
Sino
‘Evalúa si se está eliminando el último dato, para inicializar FRENTE
Si FRENTE = MUMAX
FRENTE = 1
sino
FRENTE = FRENTE + 1
Fin si
Fin si
Fin si
Fin procedimiento
Respuesta: Se comprueba que la cola tenga elementos a eliminar, en caso de cumplirse esa
condición se procede a eliminar el valor del frente de la cola asi como también a actualizar los
apuntadores Frente y Fondo, si frente es igual al fondo (significa que ya no hay valores dentro
de la cola) se setea el valor de ambos a 0, en caso de que aún queden valores dentro de la cola,
se setea el valor del fondo para que apunte a la siguiente posición en caso de aun no se haya
hecho el recorrido de toda la cola o se coloca desde la primera posición en caso de ya se haya
completado el recorrido hasta la última posición.

C. Desarrolla el Ejercicio Nro: 22 Capítulo 6 (Libro de Mary Loomis) –(3


puntos)

Considere el uso de un arreglo para almacenar una lista ligada de información de un


inventario de libros. El arreglo se define en COBOL, como sigue:

Las entradas están ligadas en orden alfabético por el apellido del autor, alfabéticamente por la
primera palabra del título y, en orden ascendente por el número de almacén. Muestre el
contenido de la estructura arreglo – libros, después de completar cada una de las transacciones
siguientes:
Sig_
Sig Num
Autor Sig_Autor Titulo Num_ Ant_Num_Almacen Sig_Disponible
Titulo Almacen
Almacen
F. Stop Creative
1 Fitzgerald 4 Photography 10 53526 10 5 0
Newspaper
2 Linus Type 0 Origami 4 98374 0 10 0
3 11
Lowen The Longest
4 Maner 10 Yard 0 23764 9 6 0
La Marke de la
5 Ascent Agu 6 Francaise 2 49261 1 9 0
Dr. Frank Beer Basted
6 Annstein 1 Hot Dogs 9 19822 4 8 0
7 3
Artic Computer
8 Abacus 5 Simulation 1 17760 6 0 0
Denn M. Betsy Wore
9 Stretcher 2 Blue Jeans 8 38641 5 4 0
Finger Lickin'
10 C. Sanders 9 Good 5 73920 2 1 0
11 12
12 13
13 14
14 15
15 0

D. Ejercicio en lenguaje orientado a objetos –(5 puntos)

Defina la clase Cola, usando algún lenguaje orientado a objetos, con base en los algoritmos
presentados para programar los métodos, para insertar, eliminar y verificar los estados
posibles de una Cola.

//App.java
public class App {

public static void main(String[] args) {

ClaseCola cola = new ClaseCola(5);

cola.insertar('A');
cola.insertar('B');
cola.insertar('C');
cola.insertar('D');
cola.insertar('E');
cola.eliminar('A');
cola.eliminar('B');
cola.eliminar('C');
cola.eliminar('D');
cola.insertar('E'); // Error overflow
cola.eliminar('E');
cola.eliminar('E'); // Error underflow

cola.imprimir();

}
//ClaseCola.java
public class ClaseCola {

private int frente;


private int fondo;
private int max;
private int numEl = 0;
private final char[] cola;

ClaseCola(int max) {
this.frente = -1;
this.fondo = -1;
this.max = max;
this.cola = new char[max];
}

public void insertar(char elemento) {

if(estaLleno()) {
throw new IllegalArgumentException("La cola esta llena: Overflow error!");
}

if(this.fondo == -1) {
this.frente = 0;
}

this.fondo++;
this.numEl++;
this.cola[this.fondo] = elemento;
System.out.println("Se insertó el elemento: " + this.cola[fondo] + " Frente: "
+ this.frente + " Fondo: " + this.fondo + " NumEl: " + this.numEl);
}

public void eliminar(char elemento) {

if(estaVacio()) {
throw new IllegalArgumentException("La cola esta vacia: Underflow error!");
}

if(this.frente() != elemento) {
throw new IllegalArgumentException("Elemento no coincide con el frente de l
a cola!");
}

this.cola[frente] = ' ';


this.numEl--;

if(this.numEl == 0) {
this.frente = -1;
this.fondo = -1;
} else {
this.frente++;
}

System.out.println("Se eliminó el elemento: " + elemento + " Frente: " + this.f


rente + " Fondo: " + this.fondo + " NumEl: " + this.numEl);
}

public char frente() {


if(estaVacio()) {
throw new IllegalArgumentException("La cola no tiene elementos!");
}
return this.cola[this.frente];
}

public void imprimir() {


System.out.println(this.cola);
}

private boolean estaVacio() {


return this.frente == -1;
}

private boolean estaLleno() {


return this.fondo + 1 == this.max;
}

También podría gustarte