Está en la página 1de 4

ISIS1225 - Estructuras de Datos y Algoritmos

Departamento de Ingeniería de Sistemas y Computación


Universidad de los Andes
Hoja de Trabajo – Concepto e Implementación de Tipos Abstracto de Datos (TAD) Stack y Queue
Preparada por Prof. Fernando De la Rosa

Trabajo Cooperativo en sesión sincrónica

1. Publicar Hoja de Trabajo con los problemas a resolver en el Aula Sicua+


2. Usar Collaborate / Zoom para conformación de grupos de trabajo (parejas conformadas
aleatoriamente). Trabajo en grupos durante 5 minutos por problema.
3. Usar Padlet para la publicación de las respuestas trabajadas por los grupos.
Cada grupo publica sus respuestas propuestas en el Padlet de la sesión.
4. Regreso a Sala General (Re-agrupamiento del curso).
5. Discusión de resultados de los problemas publicados en el Padlet entre el profesor y losestudiantes.

Código de Referencia:
https://github.com/ISIS1225DEVS/ISIS1225-Lib/blob/master/DISClib/ADT/stack.py

https://github.com/ISIS1225DEVS/ISIS1225-Lib/blob/master/DISClib/ADT/queue.py

1. Funcionalidad Básica del TAD Stack (LIFO)

Operación TAD Stack Descripción


newStack(datastructure) Crea una pila (stack) vacio de una estructura de datos
push (stack, element) Agrega un elemento en el tope de la pila
pop (stack) Retorna y elimina el elemento presente en el tope de la pila
isEmpty( stack ) Retorna True si la pila (stack) es vacia. False en caso contrario.
top (stack) Retorna el elemento presente en el tope de la pila
size(stack) Retorna el tamaño de la pila (stack)

Problema 1.1 Complejidad Temporal en Stack

Analizar la complejidad temporal de las operaciones del TAD Stack de acuerdo a la estructura de datos que
se utilice en su implementación.

1.1.1 Si el TAD Stack se implementa usando un arreglo (ArrayList), ¿Es más eficiente para las operaciones
que el tope sea el primer elemento o el último elemento del arreglo? Justificar la respuesta.

Operación TAD Stack Complejidad si tope al principio Complejidad si tope al final del ArrayList
del ArrayList
push (stack, element)
pop (stack)

Respuesta mejor selección del tope: Al principio / Al final del ArrayList


1.1.2 Si el TAD Stack se implementa usando una lista simplemente enlazada (Single Linked List), ¿Es más
eficiente para las operaciones que el tope sea el primer elemento o el último elemento de la lista?
Justificar la respuesta.

Operación TAD Stack Complejidad si tope al principio Complejidad si tope al final de Lista
de Lista Simple Enlazada Simple Enlazada
push (stack, element)
pop (stack)

Respuesta mejor selección del tope: Al principio / Al final de la Lista Simplemente Enlazada

1.1.3 Seleccionando la mejor implementación de Stack en arreglo (ArrayList) y la mejor implementación


de Stack en lista simplemente enlazada (SingleLinkedList), ¿Cuál es la complejidad de sus
operaciones en el peor caso?

Operación TAD Stack Complejidad Complejidad


Mejor Implementación en Mejor Implementación en Lista Simple
ArrayList Enlazada
newStack(datastructure)
push (stack, element)
pop (stack)
isEmpty( stack )
top (stack)
size(stack)

Problema 1.2. Aplicación

Suponga que inicia con un Stack vacio. Se va procesar una entrada de datos compuesta de letras y del
carácter guión: Toda letra significa aplicar push( … ) de la letra al Stack y todo guión significa que debe
aplicarse pop( … ) al Stack.

Dar el estado final del Stack después de procesar la entrada (en el orden de izquierda a derecha). Indicar
cuál es la letra que corresponde al tope del Stack resultante.

Entrada a procesar: 'P', 'R', 'U', '-', 'E', 'B', '-', '-', 'A', 'S', '-', 'T', 'A', 'C', '-', '-', 'K'

Problema 1.3. Casos de Aplicación de Stacks

1.3.1 Un caso de uso de Stacks es en un navegador Web cuando un usuario al navegar entre diferentes
páginas o sitios Web, el usuario quiere regresar a la página o sitio anterior. De esta forma el usuario
siempre puede regresar a una página o sitio que ya visitó.

1.3.2 Otro caso de aplicación de Stacks se usa en la evaluación de expresiones aritméticas que usan
operadores binarios (+, -, *, /, % y paréntesis). Por ejemplo evaluar la expresión:

( ( (10 * 43) + (80 – 24 * 5) ) – ( (95 / (7 + 4) * 6) + (51 – 7 / 2) ) )

Consultar la solución Dijkstra's two-stack algorithm.

1.3.3 En su caso propio, piense en un posible caso o problema donde Ud. considera la solución puede usar
uno o varios Stacks. Explíquelo en un párrafo.
2. Funcionalidad Básica del TAD Queue (FIFO)

Operación TAD Queue Descripción


newQueue(datastructure) Crea una cola (queue) vacio de una estructura de datos
enqueue (queue, element) Agrega un elemento al final de la cola (queue)
dequeue (queue) Retorna y elimina el elemento presente al principio de la cola
isEmpty(queue) Retorna True si la cola (queue) es vacia. False en caso contrario.
peek (queue) Retorna el elemento que esta al principio de la cola
size(queue) Retorna el tamaño de la cola (queue)

Problema 2.1. Complejidad Temporal en Queue

El propósito es analizar la complejidad temporal de las operaciones del TAD Queue de acuerdo a la
estructura de datos que se utilice en su implementación.

2.1.1 Si el TAD Queue se implementa usando un arreglo (ArrayList), ¿Es más eficiente para las
operaciones que el principio del queue sea el primer elemento o el último elemento del arreglo?

Operación TAD Queue Complejidad si primer elemento Complejidad si primer elemento al final
al principio del ArrayList del ArrayList
enqueue (queue, element)
dequeue (queue)

Respuesta mejor selección del primer elemento: Al principio / Al final del ArrayList

2.1.2 Si el TAD Queue se implementa usando una lista simplemente enlazada (Single Linked List), ¿Es más
eficiente para las operaciones que el principio del queue sea el primer elemento o el último
elemento de la lista?

Operación TAD Queue Complejidad si primer elemento Complejidad si primer elemento al final
al principio de Lista Simple de Lista Simple Enlazada
Enlazada
enqueue (queue, element)
dequeue (queue)

Respuesta mejor selección del primer elemento: Al principio / Al final de la Lista Simplemente Enlazada

2.1.3 Seleccionando la mejor implementación de Queue en arreglo (ArrayList) y la mejor implementación


de Queue en lista simplemente enlazada (SingleLinkedList), ¿Cuál es la complejidad de sus
operaciones en el peor caso?

Operación TAD Queue Complejidad Complejidad


Implementación en ArrayList Implementación en SingleLinkedList
newQueue(datastructure)
enqueue (queue, element)
dequeue (queue)
isEmpty(queue)
peek (queue)
size(queue)

Problema 2.2. Aplicación

Suponga que inicia con una Queue vacia. Se va procesar una entrada de datos compuesta de letras y del
carácter guión: toda letra significa aplicar enqueue( … ) de la letra a la Queue y todo guión significa que
debe aplicarse dequeue( … ) a la Queue.

Dar el estado final de la Queue después de procesar la entrada (en el orden de izquierda a derecha). Indicar
cuál es la letra que corresponde al principio y cuál letra al final de la Queue.

Entrada a procesar: 'P', 'R', 'U', '-', 'E', 'B', '-', '-', 'A', 'Q', '-', 'U', 'E', 'U', '-', '-', 'E'

Problema 2.3. Casos de Aplicación de Queues

2.3.1 Un caso de uso de Queues es la atención de clientes por parte de un cajero en un almacén o sucursal
bancaria. El cajero atiende a los clientes respetando su orden de llegada.

2.3.2 Otro caso de uso de Queues puede ser la forma como una impresora compartida por muchos
empleados recibe y atiende los documentos de impresión. La impresora imprime los documentos
respetando su orden de llegada.

2.3.3 En su caso propio, piense en un posible caso o problema donde Ud. considera la solución puede usar
uno o varios Queues. Explíquelo en un párrafo.

También podría gustarte