Está en la página 1de 20

Proyecto Final de Estructura de Datos

UNIVERSIDAD TÉCNICA DE MACHALA

FACULTAD DE INGENIERÍA CIVIL

CARRERA DE TECNOLOGÍAS DE LA INFORMACIÓN

TERCER SEMESTRE

PARALELO A

ESTRUCTURAS DE DATOS

“Simulación gráfica de las operaciones básicas de Pilas”

Proyecto de final de asignatura

Autores:

Aguilar Gavilanes Kevin Alexander

Barrezueta Ramón Carlos Isaac

Cando Machuca Madelayne Cristina

Carbo Valarezo Gislaine Tatiana

Vilela Amaya Angels Kristine

Docente:

Ing. Fausto Redrován Castillo, Mg.

MACHALA - ECUADOR

SEPTIEMBRE, 2022

1
Aguilar – Barrezueta – Carbo – Vilela – Cando
Proyecto Final de Estructura de Datos

AUTORÍA:

Nosotros, Aguilar Gavilanes Kevin Alexander, Barrezueta Ramón Carlos Isaac,


Cando Machuca Madelayne Cristina, Carbo Valarezo Gislaine Tatiana, Vilela
Amaya Angels Kristine, como autores del presente trabajo de investigación, somos
responsables de las ideas, conceptos, procedimientos y resultados vertidos en el
mismo.

f………………………………. f……………………………….

Aguilar Gavilanes Kevin Alexander Barrezueta Ramón Carlos Isaac

C.I.: 0704013374 C.I.: 0750573719

f………………………………. f……………………………….

Carbo Valarezo Gislaine Tatiana Vilela Amaya Angels Kristine

C.I.: 0705887909 C.I.: 0750604753

2
Aguilar – Barrezueta – Carbo – Vilela – Cando
Proyecto Final de Estructura de Datos

f……………………………….

Cando Machuca Madelayne Cristina

C.I.: 0706199593

3
Aguilar – Barrezueta – Carbo – Vilela – Cando
Proyecto Final de Estructura de Datos

Contenido
JUSTIFICACIÓN .................................................................................................... 6

OBJETIVOS ........................................................................................................... 7

Objetivo General. ................................................................................................ 7

Objetivo Específico. ............................................................................................ 7

ANTECEDENTES .................................................................................................. 8

MARCO TEÓRICO .............................................................................................. 10

Estructuras de Datos ........................................................................................ 10

Pila (Stack) ....................................................................................................... 10

Comportamiento de una pila .......................................................................... 10

Operaciones básicas de una pila ................................................................... 11

TAD Pila ........................................................................................................ 12

Recursividad ..................................................................................................... 13

Tipos de recursividad..................................................................................... 14

Lenguaje de programación. .............................................................................. 15

Entorno IDE ...................................................................................................... 16

REFERENCIAS ................................................................................................... 17

ANEXOS .............................................................................................................. 18

4
Aguilar – Barrezueta – Carbo – Vilela – Cando
Proyecto Final de Estructura de Datos

INDICE DE FIGURAS

Figuras 1 Apilar .................................................................................................... 11


Figuras 2 Desapilar .............................................................................................. 12

INDICE DE TABLAS

Tabla 1 Operaciones de pila ................................................................................ 13

5
Aguilar – Barrezueta – Carbo – Vilela – Cando
Proyecto Final de Estructura de Datos

JUSTIFICACIÓN

Las estructuras de datos son herramientas que se utilizan para la codificación de


diversos programas, caracterizadas por la organización y manipulación de objetos,
cada estructura se comporta de forma diferente y es necesario conocerlas y sus
operaciones para la aplicación de las mismas.

Del mismo modo, la importancia de los simuladores gráficos radica en que dichos
sistemas permiten simular el comportamiento de los datos y su almacenamiento,
posibilitando que se pueda visualizar las operaciones con las que la estructura
cuenta de forma que el usuario sea capaz de comprender el funcionamiento de las
mismas.

Tomando en cuenta lo anterior, mediante la implementación del simulador se puede


constatar las operaciones y funcionamiento de una pila puede llegar a sugerir
simplicidad, no obstante, se pueden desarrollar algoritmos con mayor grado de
complejidad que se pueden aplicar en esta estructura de datos, facilitando,
ayudando y solventando en el desarrollo del programa.

En el presente trabajo se pretende simular la estructura de datos Pila de forma que


se puedan aplicar las operaciones correspondientes y a la vez ser visualizadas
mediante una interfaz gráfica con ello se desea llegar a que los usuarios puedan
comprender de mejor forma el desarrollo de la estructura.

Si los simuladores gráficos son aplicados en los métodos de enseñanza-


aprendizaje los resultados de aprendizaje y comprensión se prevé mayores
beneficios con respecto al rendimiento de estudiantes.

6
Aguilar – Barrezueta – Carbo – Vilela – Cando
Proyecto Final de Estructura de Datos

OBJETIVOS
Objetivo General.

Desarrollar un simulador gráfico de operaciones de tipo CRUD para objetos de


cualquier tipo mediante estructuras de datos dinámicas tipo pila y programación en
Java para el perfeccionamiento en el conocimiento de las operaciones
fundamentales de dicha estructura y su aplicación práctica.

Objetivo Específico.

✓ Diseñar la interfaz gráfica con las opciones menú necesarias mediante la


herramienta Balsamiq para simular gráficamente las operaciones de la
estructura de datos Pila.
✓ Explicar cómo se implementan los algoritmos de las operaciones de Pila en
Java mediante el respectivo detalle del código implementado con el fin de
que los usuarios logren comprender su funcionalidad.
✓ Simular la estructura de datos Pila mediante una interfaz gráfica usando el
lenguaje de programación Java para la interacción entre usuario y
computador.

7
Aguilar – Barrezueta – Carbo – Vilela – Cando
Proyecto Final de Estructura de Datos

ANTECEDENTES

Las operaciones CRUD (create, read, update, delete) son la base de gran parte de
las estructuras de datos, debido a su estrecha relación con la gestión de datos
puesto que logra realizar las funciones que el usuario necesite, de igual forma,
tienen como fin manipular los objetos en dependencia de la estructura de datos
aplicada, lo que asimismo conduce a la mejor selección de estructura para los
diferentes programas. [1]

Las operaciones CRUD son operaciones fundamentales en programación las que


ayudan al control de datos.

● Create: crea un objeto en base a la estructura de datos que se elija.


● Read: permite que el usuario pueda conocer los objetos que se hallan en el
TAD.
● Update: necesario al momento de modificar un objeto o un atributo del
mismo dentro de la estructura de datos.
● Delete: esta operación tiene como fin eliminar un elemento del TAD por
elección del usuario.

Según la forma en que manejemos las operaciones CRUD estas podrían mejorar o
degradar el rendimiento.

Las funciones CRUD son las que distribuyen la carga entre los diferentes puntos
del sistema de información, tanto localmente (disco local), como remotamente
(base de datos, LDAP)

Por otro lado, se podría afirmar que la simulación permite experimentar con un
modelo del sistema para comprender mejor los procesos, con el fin de mejorar la
actividad en las empresas [2]

Los simuladores gráficos son herramientas que se han implementado en varios


aspectos con la finalidad de ayudar a comprender un respectivo tema a los
usuarios, aplicar este mecanismo como un método de enseñanza- aprendizaje con
respecto a las estructuras de datos, esto debido a que al momento de emular el
comportamiento de una estructura se toma en cuenta las operaciones principales,

8
Aguilar – Barrezueta – Carbo – Vilela – Cando
Proyecto Final de Estructura de Datos

puesto a que a partir de las mismas se pueden desarrollar otros métodos aplicables
al programa que se desea realizar, de forma que se posibilita un aprendizaje rápido
y eficiente.

Además de ello, esto permite que se pueda aplicar la lógica de programación de


forma eficiente puesto que ya se conoce como se comporta una estructura de datos
y proceder con la codificación adecuada.

9
Aguilar – Barrezueta – Carbo – Vilela – Cando
Proyecto Final de Estructura de Datos

MARCO TEÓRICO
Estructuras de Datos
Es una colección de datos cuya organización se caracteriza por las funciones
definidas utilizadas para almacenar y acceder a elementos individuales de datos, a
su vez pueden descomponerse en los elementos que la forman [3]. La manera en
que se colocan los elementos dentro de la estructura afectará la forma en que se
realicen los accesos a cada elemento.

Las estructuras de datos permiten la manipulación de elementos en dependencia a


la selección de la misma, debido a que el comportamiento con respecto a los
elementos (acceso, inserción, eliminación, entre otros) se realiza de forma
diferente.

Entre las diferentes estructuras datos encontramos a

- Pilas
- Colas
- Listas
- Arrays
- Árboles
- Y demás

En el presente trabajo se va a centrar en la explicación de la estructura de datos


Pilas, resaltando sus operaciones, características y aplicaciones, además de la
simulación mediante una interfaz gráfica.

Pila (Stack)
Una pila (stack) es una colección ordenada de elementos a los cuales sólo se
puede acceder por un único lugar o extremo de la pila [1]. Los elementos se
agregan o se quitan de la pila únicamente por su parte superior (cima).

Comportamiento de una pila


LIFO. - Last input, first output (último dato en entrar es el primero en salir).

10
Aguilar – Barrezueta – Carbo – Vilela – Cando
Proyecto Final de Estructura de Datos

Operaciones básicas de una pila

Existen 2 operaciones básicas en una pila: Apilar(push) y Desapilar(pop).

Apilar(push)

Apilar en una pila vacía

Se inicia con un nodo a insertar y, por supuesto un puntero que apunte a él,
además el puntero a la pila valdrá null, luego el nodo que apunte a null y la pila
apunte a nodo.

Apilar en una pila no vacía:

Figuras 1 Apilar

Fuente: https://sites.google.com/a/espe.edu.ec/programacion-ii/home/pila

En Figura1, se muestra el proceso de apilar que se realiza en una estructura de


datos Pila, en la cual se ingresa el dato en la cima, tomando en cuenta de que a
su vez es la única entrada y salida de la estructura.
Desapilar(pop)
Primero se comprueba que la Pila no este vacía, si la pila está con uno o más nodos,
se usa un puntero auxiliar nodo, se hace que el nodo apunte al primer elemento de
la pila, se asigna a Pila la dirección del segundo nodo de la misma, se guarda el
contenido del nodo para devolverlo como retorno y se libera la memoria asignada
al primer nodo.

11
Aguilar – Barrezueta – Carbo – Vilela – Cando
Proyecto Final de Estructura de Datos

Si la Pila solo tiene un nodo al utilizar la operación desapilar quedaría una Pila
vacía.

Si por el contrario se comprueba que la Pila está vacía se lanzará una excepción
(PilaVacia) y en este caso la operación desapilar no tendrá ningún efecto

Figuras 2 Desapilar

Fuente: https://sites.google.com/a/espe.edu.ec/programacion-ii/home/pila

En la Figura2 se aprecia el funcionamiento de la operación desapilar, en la cual se


obtiene el dato colocado en la cima por lo cual ya no forma parte de la Pila creada.
TAD Pila
El tipo de Dato PILA (stack) es una estructura de datos que organiza los datos a
partir de una dirección de memoria, los datos se almacenan como si fueran una
colección ordenada de elementos (platos, libros, camisas, etc). [1]
Operaciones

Crear Pila Inicializa una pila.

Apilar (push) Añade un elemento en la cima de la pila.

Desapilar (pop) Elimina el elemento situado en la cima de


la pila.

Pila vacía Comprueba si la pila no tiene elementos.

12
Aguilar – Barrezueta – Carbo – Vilela – Cando
Proyecto Final de Estructura de Datos

Limpiar pila Quita todos sus elementos y deja la pila


vacía.

Cima Pila Obtiene el elemento situado en la cima


de la pila.

Tamaño de la pila Número de elementos de la pila.

Tabla 1 Operaciones de pila

Si se intenta utilizar una de estas operaciones en una pila vacía se lanzará una
excepción (Pila Vacía), y estas operaciones no tendrían ningún efecto.

Recursividad
El profesor John McCarthy del Massachusetts Institute of Technology, y
posteriormente de la Stanford University [2], conlleva el reconocimiento como ser
pionero en darse cuenta de la importancia de la recursión en los lenguajes de
programación.
La recursión (recursividad) es una herramienta muy potente en algunas
aplicaciones, sobre todo de cálculo, ésta a su vez es una alternativa a la repetición
o estructura repetitiva. La razón de que existan lenguajes que admiten la
recursividad se debe a la existencia de estructuras específicas tipo pilas (stack, en
inglés) para este tipo de procesos y memorias dinámicas [1]. Las direcciones de
retorno y el estado de cada subprograma se guardan en estructuras tipo pilas.
Se denomina la recursividad como un algoritmo que se puede implementar en la
codificación cumpliendo con el rol de que sus funciones logren invocarse a sí
mismas y se ejecuta las veces que sea necesaria para poder concluir el problema,
además la recursividad es una alternativa a las estructuras iterativas. Se deben
realizar las invocaciones necesarias y no sobrepasarse de esto, donde se logre
evitar que se genere una secuencia infinita de llamadas a sí misma, para que el
programa lo realice de una manera efectiva y cuando éste logre finalizar indicará
que la recursividad se encuentra correctamente definida.

13
Aguilar – Barrezueta – Carbo – Vilela – Cando
Proyecto Final de Estructura de Datos

Tipos de recursividad
La recursividad está clasificada en dependencia de características dentro del
método, por ende, existen los siguientes tipos:

o Recursividad simple: se presenta cuando una función incluye un llamado a sí


misma con un argumento diferente [4]
o Recursividad múltiple: Es aquella que el cuerpo una función incluye más de
una llamado hacia la misma función [4], la misma que se puede dar en cualquier
parte del código.
o Recursividad anidada: se dice que una función recursiva es anidada cuando
entre los parámetros que se pasan a la función se incluye una invocación a la
misma. [4], es decir, la llamada está en el “return” del método.
o Recursividad cruzada o indirecta: en este tipo de recursividad, el cuerpo de
la función no contiene un llamado a sí misma, sino a otra función; pero, la
segunda incluye un llamado a la primera. [4]
o Recursividad de cola: Se da cuando la llamada recursiva es la última
instrucción de la función, una de las ventajas de la recursividad por cola es que
se puede evitar la sobrecarga de cada llamada a la función y se evita el gasto
de memoria de pila. [5]
o Recursividad de cabeza: La llamada se hace al principio del subprograma, de
tal manera que el resto de instrucciones se realizan después de todas las
llamadas recursivas [5]
o Recursividad intermedia: Sus instrucciones aparecerán tanto o antes como
después de las llamadas. [5]
Una función recursiva debe de cumplir las dos condiciones siguientes:
1. Debe existir un criterio base cuya solución se conoce y que no implica una
llamada recursiva.
2. Cada vez que la función se invoque a sí misma, directa o indirectamente,
debe hacerlo con un valor más cercano al criterio base. [4]
Cuando la función se invoque a sí misma, directa o indirectamente con estas 2
condiciones mencionadas anteriormente, ayuda al algoritmo a saber cuándo
autoinvocarse y cuando dejar de invocarse, para una mejor resolución del
programa.

14
Aguilar – Barrezueta – Carbo – Vilela – Cando
Proyecto Final de Estructura de Datos

Por otro lado, es necesario mencionar una de las técnicas de resolución de


problemas con la recursividad la cual es “divide y vencerás” estos constan de dos
partes:
o Dividir: Se resuelven recursivamente problemas más pequeños/ instancias
menores del mismo problema
o Vencer: La solución al problema original se consigue a partir de las soluciones
a los subproblemas, si los subproblemas son suficientemente pequeños la
solución a este es simple
Entonces podemos decir que la recursividad es aquella que es fácil de comprender
y depurar, siendo un patrón que nos ayuda a resolver una tarea, en este caso
pueden dividirse en varias del mismo tipo haciéndolo de una manera mucho más
simple, construyendo la solución en términos de sí misma y terminando cuando se
reconoce el caso base, por esto se la denomina recursiva.

Lenguaje de programación.

En Java podemos observar que para poder crear una pila es necesario obtener el
conocimiento teórico básico y para ello se debe hablar de su uso e implementación.

En Java es un lenguaje de programación, creado con el fin de poder funcionar en


distintos tipos de procesadores y manejarlos a nuestro gusto, dándonos a estas
algunas características que en otros lenguajes son extensiones: gestión de hilos,
ejecución remota, etc. [5] Además, Java fue creado para desarrollar programas y
procesos en gran expansión de dispositivos y conexión. También se pueden
realizar operaciones y métodos que ya están empaquetados en el mismo Java
como el “stack”, sin embargo, en este proyecto se realizará implementación de
métodos de las operaciones en pila sin usar el paquete ya hecho por java.

Con ello en mente, existen en las pilas operaciones primitivas o fundamentales


definidas sobre una pila, de la cual es el ingreso de un elemento (push) y la
devolución de un elemento (pop). El comportamiento de estas operaciones como
el push o apilar, consiste en insertar un nuevo dato en la pila, mismo que constituirá́
el nuevo tope de la pila; en el comportamiento de la operación pop o desapilar,
realiza la operación de quitar el elemento que está en el tope de la pila, cambiando

15
Aguilar – Barrezueta – Carbo – Vilela – Cando
Proyecto Final de Estructura de Datos

en consecuencia el que está en la cima, estas simples operaciones son métodos


ya implementados en Java y con el simple hecho de importar el stack se puede
usar esto en código Java realizando programas que requieran del uso de las pilas.

Existen otras operaciones útiles al usar pilas, como, por ejemplo, antes de apilar
una pila, lo más conveniente sería saber y verificar si es que la pila no esté vacía,
en Java esta operación se la conoce como empti, dándonos un pequeño vistazo a
la pila. Otra operación que es importante es peek, y esta se encarga de ver al
elemento que se encuentra en la cima de la pila, sin haber cambios en esta. Las
operaciones push, pop y peek, son muy comunes para la estructura de datos pila,
por lo que se conservarán dichos nombres en la implementación del código.

Entorno IDE

Para la respectiva codificación del simulador gráfico se seleccionó el IDE NetBeans,


puesto que se considera una herramienta con variedad de mecanismos respecto a
la interfaz gráfica.

NetBeans es un entorno de desarrollo integrado libre, el cual permite el desarrollo


de aplicaciones, teniendo como objetivo principal permitir el desarrollo de funciones
de forma independiente y reutilizables.

Por ello se considera que es fiable la utilización como herramienta para la


realización del simulador gráfico de la estructura de datos Pila.

16
Aguilar – Barrezueta – Carbo – Vilela – Cando
Proyecto Final de Estructura de Datos

REFERENCIAS

[1] L. J. Aguilar, Fundamentos de Programación. Algoritmos, estructura de datos


y objetos, Madrid: McGRAW-HILL/INTERAMERICANA DE ESPAÑA, S. A. U,
2008.
[2] S. Baase y A. Van Gelder, «Computer Algorithms: Introduction to Design and
Analysis,» Addison-Wesley Longman, Inc, Massachusetts, 2000.
[3] L. Jiméne Paniagua, J. Marcos Barrio y R. Fuentes Iglesias, «Universidad
Complutense Madrid,» 2010. [En línea]. Available:
https://eprints.ucm.es/id/eprint/11264/1/Memoria.pdf.
[4] A. C. Torres, Aprende a diseñar algoritmos, Bogotá: Sello Editorial UNAD,
2017.
[5] L. Joyanes, L. Rodríguez y M. Fernández, Fundamentos de programación
Libro de problemas, Madrid: McGraw-Hill, 2003.
[6] «Estructura de Datos en Java,» [En línea]. Available:
https://sites.google.com/a/espe.edu.ec/programacion-ii/home/pila.
[7] A. Aho, J. Hopcroft y J. Ullman, Estructura de datos y algoritmos, México:
Addison-Wesley, 1998.
[8] M. Escardó y M. Kerber, Data Structures and Algotithms, United Kingdom:
School of Computer Science, University of Birmingham, 2019.

17
Aguilar – Barrezueta – Carbo – Vilela – Cando
Proyecto Final de Estructura de Datos

ANEXOS

UNIVERSIDAD TÉCNICA DE MACHALA


FACULTAD DE INGENIERÍA CIVIL
CARRERA DE INGENIERÍA EN TECNOLOGÍAS DE LA INFORMACIÓN

TERCER SEMESTRE

ESTRUCTURAS DE DATOS

ACUERDO DE COMPROMISO PARA EL CUMPLIMIENTO DE


REQUERIMIENTOS DEL PROYECTO

TEMA

“Simulación gráfica de las operaciones básicas de Pilas”

AUTORES

Aguilar Gavilanes Kevin Alexander


Barrezueta Ramón Carlos Isaac
Cando Machuca Madelayne Cristina
Carbo Valarezo Gislaine Tatiana
Vilela Amaya Angels Kristine

MAYO, 2022

18
Aguilar – Barrezueta – Carbo – Vilela – Cando
Proyecto Final de Estructura de Datos

REQUERIMIENTOS
1. Los entregables cumplirán las fechas asignadas y que constan en el aula virtual.
2. El lenguaje de programación de la aplicación es Java.
3. El programa contará con una interfaz gráfica de usuario con las opciones de
menú necesarias para simular gráficamente las operaciones de las estructuras
de datos tipo Pilas. Se garantizará la visualización completa de la estructura de
datos. Las opciones de menú son:
3.1. Crear Pila
3.2. Apilar un dato.
3.3. Desapilar
3.4. Decapitar
3.5. Pila Vacía
3.6. Limpiar Pila
3.7. Cima Pila
3.8. Tamaño Pila
3.9. Salir
4. Elaboración de un programa basado en código eficiente y limpio, siguiendo las
convenciones de Java.

Los aquí firmantes nos comprometemos a cumplir con todos los requerimientos
descritos bajo las condiciones del cronograma de actividades del proyecto. El
incumplimiento de este acuerdo afectará la calificación del proyecto y sus avances,
sin que esté sujeto a apelación alguna.

f………………………………. f……………………………….
Aguilar Gavilanes Kevin Alexander Barrezueta Ramón Carlos Isaac
C.I.: 0704013374 C.I.: 0750573719

19
Aguilar – Barrezueta – Carbo – Vilela – Cando
Proyecto Final de Estructura de Datos

f………………………………. f……………………………….
Cando Machuca Madelayne Cristina Carbo Valarezo Gislaine Tatiana
C.I.: 0706199593 C.I.: 0705887909

f……………………………….
Vilela Amaya Angels Kristine
C.I.: 0750604753

20
Aguilar – Barrezueta – Carbo – Vilela – Cando

También podría gustarte