Instituto Tecnológico Superior de Guasave
Ingeniería en Sistemas Computacionales
Estructura de Datos, AED-1026
Material desarrollado utilizando Programación orientada a objetos, clases y nodos.
CAP4-TEORIA EVALUACION DE CAUDALES - HIDROGRAMAS.pdf
Estructura de datos - Unidad 3 Estructuras Lineales (POO)
1. Instituto Tecnológico Superior de Guasave
Ingeniería en Sistemas Computacionales
Estructura de Datos
Unidad III: Estructuras Lineales
Mtro. José Antonio Sandoval Acosta
Retícula ISIC-2010-224: Programa: AED-1026/2016
Itsguasave.edu.mx
2. Competencia de la Unidad
• Comprende y aplica estructuras de datos lineales para solución de
problemas.
ESTRUCTURA DE DATOS
3. Estructuras Lineales
• En esta unidad se comienza el estudio de las estructuras de datos dinámicas.
Al contrario que las estructuras de datos estáticas (arrays) en las que su
tamaño en memoria se establece durante la compilación y permanece
inalterable durante la ejecución del programa, las estructuras de datos
dinámicas crecen y se contraen a medida que se ejecuta el programa, por lo
que la cantidad de memoria que requieren para funcionar es muy variable.
• Las estructuras lineales de elementos homogéneos implementadas con arrays
necesitan fijar por adelantado el espacio a ocupar en memoria, de modo que
cuando se desea añadir un nuevo elemento, que rebase el tamaño prefijado,
no será posible sin que se produzca un error en tiempo de ejecución. Esto hace
ineficiente el uso de los arrays en algunas aplicaciones.
ESTRUCTURA DE DATOS
5. PILAS
PILA: Es un conjunto de elementos que solo pueden insertarse y
eliminarse por un extremo. Se trata de una estructura de datos de
acceso restrictivo a sus elementos.
Un ejemplo de pila es una torre de discos compactos, en la cual los
discos se insertan y se extraen por el mismo extremo.
ESTRUCTURA DE DATOS
6. • En la computación estas estructuras suelen ser fundamentales. La recursividad
se simula en un computador con la ayuda de una pila. Asimismo muchos
algoritmos emplean las pilas como estructura de datos fundamental, por
ejemplo para mantener una lista de tareas pendientes que se van acumulando.
• Las pilas ofrecen dos operaciones fundamentales, que son apilar y desapilar
sobre la cima. El uso que se les de a las pilas es independiente de su
implementación interna. Es decir, se hace un encapsulamiento. Por eso se
considera a la pila como un tipo abstracto de datos.
• Es una estructura de tipo LIFO (Last In First Out), es decir, último en entrar,
primero en salir.
ESTRUCTURA DE DATOS
7. ELEMENTOS DE UNA PILA
• Tope o cima: Indica el último elemento insertado en la pila.
• Máximo: Se refiere al número de elementos que puede contener la pila.
ESTRUCTURA DE DATOS
8. • Pilas con Arreglos: Representar pilas usando arreglos es relativamente más
sencillo que usando listas enlazadas, el único problema que existe es la
limitante de espacio en memoria, ya que al definir un tamaño máximo ya no es
posible insertar más elementos.
ESTRUCTURA DE DATOS
9. • Pilas con Listas enlazadas: Son llamadas también estructuras dinámicas, ya
que el espacio en memoria se crea hasta que se inserta el elemento.
ESTRUCTURA DE DATOS
10. OPERACIONES CON PILAS
Operaciones Auxiliares con PILAS
• Pila llena (si el tope == Máximo-1)
• Pila vacía (si tope == -1)
• Recorrer pila (desde elemento 0 hasta tope)
Eliminar un elementoInsertar un elemento
ESTRUCTURA DE DATOS
12. TRABAJANDO CON PILAS POR MEDIO DE ARRAYS (ESTÁTICAS)
Crear las variables necesarias
int pila[5];
int maximo=5;
Int tope=-1;
Int dato=0;
Int opc=0;
Pila
Máximo de
elementos
Iniciar tope con
valor negativo
Variable para
captura de datos
Variable para menú
de opciones
ESTRUCTURA DE DATOS
13. VERIFICAR SI LA PILA ESTA LLENA
Algoritmo
FUNCION boolena llena()
SI (tope == maximo – 1)
regresar verdadero
SINO
regresar falso
FINSI
FINFUNCION
ESTRUCTURA DE DATOS
14. VERIFICAR SI LA PILA ESTA VACIA
Algoritmo
FUNCION boolena vacia()
SI (tope == – 1)
regresar verdadero
SINO
regresar falso
FINSI
FINFUNCION
ESTRUCTURA DE DATOS
15. INSERTAR ELEMENTO EN LA PILA
Algoritmo
MODULO insertar() {
SI LA PILA ESTA LLENA
MOSTRAR “Pila llena”
SINO
CAPTURAR ELEMENTO
INCREMENTAR tope EN 1
pila[tope]=ELEMENTO;
FINSI
FINMODULO
ESTRUCTURA DE DATOS
16. ELIMINAR ELEMENTO EN LA PILA
Algoritmo
MODULO eliminar() {
SI LA PILA ESTA VACIA
MOSTRAR “Pila Vacia”
SINO
MOSTRAR CONTENIDO
ELIMINAR ELEMENTO
DECREMENTAR TOPE EN 1
FINSI
FINMODULO
ESTRUCTURA DE DATOS
17. RECORRIDO DE UNA PILA
Algoritmo
MODULO recorrer() {
DECLARAR var de trabajo
SI LA PILA ESTA VACIA
MOSTRAR “Pila Vacia”
SINO
MIENTRAS var<=tope
MOSTRAR CONTENIDO
INCREMENTAR var en 1
FINMIENTRAS
FINSI
FINMODULO
ESTRUCTURA DE DATOS
18. • Ejercicio: Desarrolle el programa correspondiente a la PILA que se ha visto en
clase creando un menú que contemple las siguientes opciones:
1. Pila llena
2. Pila vacía
3. Insertar
4. Eliminar
5. Recorrido
6. Terminar
• Entregar el programa en código para revisión
ESTRUCTURA DE DATOS
20. Definición de COLAS
Una COLA es un conjunto homogéneo de elementos, del cual
pueden suprimirse elementos sólo desde un extremo llamado
parte delantera, asimismo, sólo pueden agregarse elementos en
el extremo contrario llamado parte posterior.
• El primer elemento en ser agregado a una COLA es
el primer elemento en ser eliminado.
• Por esta razón una COLA se denomina FIFO (First
In-First Out), que es justo el concepto contrario a
una PILA o LIFO (Last In-First Out).
ESTRUCTURA DE DATOS
21. COLAS DINÁMICAS CON NODOS
Parte
Delantera o
Salida
Parte
Posterior o
Entrada
ESTRUCTURA DE DATOS
22. COLAS ESTÁTICAS CON ARRAYS
Parte
Posterior o
Entrada
Parte
Delantera
o Salida
Operaciones Auxiliares con COLAS
• COLA llena (si el final == Máximo-1)
• COLA vacía (si final == -1)
• Recorrer COLA (desde elemento 0 hasta final)
ESTRUCTURA DE DATOS
23. TRABAJANDO CON COLAS ESTÁTICAS
• Una cola estática utiliza un arreglo con un número limitado de elementos en el
mismo, dicho arreglo requiere de una constante que controle el máximo de
elementos que pueden ser cargados a la cola, y de una variable que controle el
elemento final de la cola (último en ser insertado).
• Declaración de las variables de la COLA estática
int cola[5];
int final = -1;
int maximo = 5;
COLA
Último elemento
Máximo de elementos
ESTRUCTURA DE DATOS
24. ALGORITMO PARA DETERMINAR SI LA COLA ESTÁ LLENA
FUNCION BOLEANA llena ()
SI (final >= maximo - 1 ) ENTONCES
REGRESAR verdadero
SINO
REGRESAR falso
FINSI
FINFUNCION
ALGORITMO
ESTRUCTURA DE DATOS
25. ALGORITMO PARA DETERMINAR SI LA COLA ESTÁ VACIA
FUNCION BOLEANA vacia ()
SI (final < 0) ENTONCES
REGRESAR verdadero
SINO
REGRESAR falso
FINSI
FINFUNCION
ALGORITMO
ESTRUCTURA DE DATOS
26. ALGORITMO PARA INSERTAR ELEMENTO EN LA COLA
MODULO insertar(DATO)
SI (llena) ENTONCES
IMPRIME “cola llena”
SINO
incrementar final
cola[final]=DATO
FINSI
FINMODULO
ALGORITMO
ESTRUCTURA DE DATOS
27. ALGORITMO PARA ELIMINAR ELEMENTO EN LA COLA
MODULO eliminar ()
SI (vacia) ENTONCES
IMPRIME “cola vacia”
SINO
FOR (J=0, J<máximo, j++)
cola[j]=cola[j+1]
FINFOR
FINSI
DECREMENTAR final
FINMODULO
ALGORITMO
ESTRUCTURA DE DATOS
28. ALGORITMO PARA HACER RECORRIDO DE COLA
MODULO recorrer ()
SI (vacia) ENTONCES
IMPRIME “cola vacia”
SINO
FOR (J=0, J<=final, j++)
imprime cola[j]
FINFOR
FINSI
FINMODULO
ALGORITMO
ESTRUCTURA DE DATOS
29. • Ejercicio: Desarrolle el programa correspondiente a la COLA que se ha visto en
clase creando un menú que contemple las siguientes opciones:
1. Cola llena
2. Cola vacía
3. Insertar
4. Eliminar
5. Recorrido
6. Salir
• Nota: Cada vez que se desee eliminar un elemento debe verificarse la cantidad
que se desea eliminar: si es menor al valor del elemento en la parte delantera
de la cola deberá restarse pero sin eliminar el elemento; si es mayor debe
eliminarse y el faltante restarlo del siguiente elemento en la cola a manera de
un inventario de almacén.
ESTRUCTURA DE DATOS
31. • Una lista enlazada es una colección o secuencia de elementos dispuestos uno
detrás de otro, en la que cada elemento se conecta al siguiente elemento por
un “enlace”.
• La idea básica consiste en construir una lista cuyos elementos, llamados
nodos, se componen de dos partes o campos:
La primera parte contiene la información y es, por consiguiente, un valor
de un tipo genérico (denominado Dato, TipoElemento, Info, etc.);
La segunda parte es un enlace que apunta al siguiente nodo de la lista.
ESTRUCTURA DE DATOS
32. • La representación gráfica más extendida es aquella que utiliza una caja con dos
secciones en su interior. En la primera sección se encuentra el elemento o
valor a almacenar y en la segunda sección el enlace o puntero, representado
mediante una flecha que sale de la caja y apunta al siguiente nodo.
ESTRUCTURA DE DATOS
33. Clasificación de las listas enlazadas
LISTAS SIMPLEMENTE ENLAZADAS: Cada nodo (elemento)
contiene un único enlace que conecta ese nodo al nodo siguiente
o nodo sucesor. La lista es eficiente en recorridos directos
(“adelante”).
ESTRUCTURA DE DATOS
34. Clasificación de las listas enlazadas
LISTAS DOBLEMENTE ENLAZADAS: Cada nodo contiene dos
enlaces, uno a su nodo predecesor y el otro a su nodo sucesor. La
lista es eficiente tanto en recorrido directo (“adelante”) como en
recorrido inverso (“atrás”).
ESTRUCTURA DE DATOS
35. Clasificación de las listas enlazadas
LISTA CIRCULAR SIMPLEMENTE ENLAZADA: Una lista simplemente
enlazada en la que el último elemento (cola) se enlaza al primer
elemento (cabeza) de tal modo que la lista puede ser recorrida de
modo circular (“en anillo”).
ESTRUCTURA DE DATOS
36. Clasificación de las listas enlazadas
LISTA CIRCULAR DOBLEMENTE ENLAZADA: Una lista doblemente
enlazada en la que el último elemento se enlaza al primer
elemento y viceversa. Esta lista se puede recorrer de modo circular
(en anillo) tanto en dirección directa (“hacia adelante”) como
inversa (“hacia atrás”).
ESTRUCTURA DE DATOS
37. TRABAJANDO CON LISTAS SIMPLES POR MEDIO DE CLASES
• Para trabajar con una lista enlazada debemos crear una clase que refleje la
información contenida en cada nodo de la misma y que contenga una variable
de tipo apuntador que conecte cada nodo con el nodo siguiente.
La variable tipo apuntador
se define con un asterisco
y debe ser del mismo tipo
de la clase declarada.
ESTRUCTURA DE DATOS
38. • Después debemos definir una segunda clase que contendrá todos los métodos
para insertar, eliminar y recorrer la lista.
ESTRUCTURA DE DATOS
Las variables con un asterisco
indican que son apuntadores,
después en los métodos serán
creados los objetos de
memoria.
39. INSERTAR PRIMER NODO DE LA LISTA VACIA
Cando declaramos la variable NI utilizando un asterisco (*NI) lo que hicimos fue
indicar que se trata de un apuntador, ahora corresponde crear el nodo en
memoria por medio de la instrucción new, por lo que ya no es necesario
declarar de nuevo o utilizar el asterisco. Cabe mencionar que cuando creas el
nodo nuevo el campo sig es igualado a NULL en el constructor:
Algoritmo de inserción
Crear el nuevo nodo
Asignar la información
al campo
correspondiente
Asignar nodo cola
ESTRUCTURA DE DATOS
40. • Reservar memoria y crear nuevo
nodo
• Asignar información al nuevo nodo
• Encadenar nuevo nodo con el nodo
inicio actual
• Convertir nuevo nodo en nodo
inicio
ESTRUCTURA DE DATOS
INSERTAR NODO AL INICIO CUANDO LA LISTA YA TIENE ELEMENTOS
41. ALGORITMO DE INSERCIÓN DE
NODOS SUBSECUENTES EN LA LISTA
(INCLUYENDO NODO COLA O “TAIL”).
• Reservar memoria y crear nuevo
nodo
• Asignar datos al nuevo nodo
• Convertir el nodo nuevo en nodo
cola
ESTRUCTURA DE DATOS
42. RECORRER LA LISTA DESDE EL INICIO
Igualar nodo de trabajo a nodo cabeza
MIENTRAS sea VERDADERO
Imprimir datos del nodo
Nodo de trabajo = siguiente nodo
SI nodo de trabajo es NULL salir
FIN-MIENTRAS
ESTRUCTURA DE DATOS
43. ALGORITMO DE INSERCIÓN DE NODOS AL INICIO DE LA LISTA O NODO CABEZA.
SI cabeza==NULL
crear nuevo nodo inicial
asignar datos al campo correspondiente
asignar NULL a la variable apuntador
SINO
reservar memoria y crear nuevo nodo
asignar datos al campo correspondiente
enlazar el nodo actual con el nodo cabeza
igualar nodo cabeza al nodo actual
FINSI
ESTRUCTURA DE DATOS
44. ELIMINAR UN NODO DE LA LISTA
• Para eliminar un nodo de la lista debemos verificar primero si se trata del
nodo cabeza o de un nodo subsecuente, o del nodo cola.
• Para realizar esta eliminación son necesarios 3 variables auxiliares tipo nodo:
auxiliar, actual, anterior
• A continuación se presenta el algoritmo para hacer dicha verificación y la
posterior eliminación;
ESTRUCTURA DE DATOS
46. • Ejercicio: Realizar el programa completo con listas enlazadas simples.
Debe incluir menú de opciones;
Debe incluir módulo de captura de Nodo de Inicio o Nodo Cabeza;
Debe poder capturar Nodo Cola;
Debe poder insertar un nuevo Nodo Cabeza;
Debe poder eliminar un nodo seleccionado;
Debe incluir un recorrido desde el Nodo Cabeza hasta el Nodo Cola
mostrando el promedio los elementos contenidos y el número de nodos
de la lista;
• Entregar el programa
ESTRUCTURA DE DATOS
47. TRABAJANDO CON LISTAS DE DOBLE ENLACE-CIRCULARES CON CLASES
• Al utilizar clases para crear los nodos se elimina el uso “struct” y se hace uso
de la POO en todos sus aspectos.
Se crea una clase que
contiene únicamente las
variables del NODO,
también debemos crear el
respectivo constructor.
ESTRUCTURA DE DATOS
48. Creamos una clase LISTA con
sus métodos y constructor,
también agregamos la
declaración de los nodos NI
(inicio) y NT (cola)
ESTRUCTURA DE DATOS
49. INSERTAR NODO INICIAL O CABECERA DE LA LISTA
• Cuando declaramos la variable NI utilizando un asterisco (*NI) lo que hicimos
fue indicar que se trata de un apuntador, por lo que ahora solo tenemos que
reservar el espacio de memoria por medio de la instrucción new;
Algoritmo de inserción
• Crear el nuevo nodo
• Asignar la información al
campo correspondiente
• Crear circularidad en campo
siguiente
• Crear circularidad en campo
anterior
• Asignar nodo cola
ESTRUCTURA DE DATOS
50. ALGORITMO DE INSERCIÓN DE NODOS AL INICIO DE LA LISTA
• Reservar memoria y crear nuevo
nodo.
• Asignar datos al campo
correspondiente.
• Crear circularidad del odo nuevo
con nodo inicio.
• Crear circularidad del nodo
inicio con nodo nuevo.
• Encadenar nodo cola con nodo
nuevo.
• Encadenar nodo nuevo con
nodo cola.
• Convertir nodo nuevo en nodo
inicio.
ESTRUCTURADEDATOS
51. • Reservar memoria y crear
nuevo nodo
• Asignar al nodo actual datos
• Encadenar nodo nuevo con
nodo cola actual
• Encadenar nodo cola actual
con nodo nuevo
• Crear circularidad del nodo
nuevo con el inicio
• Crear circularidad del inicio
con nodo nuevo
• Convertir nodo nuevo en
nodo cola
ALGORITMO DE INSERCIÓN DE NODOS AL FINAL O NODO COLA.ESTRUCTURADEDATOS
52. ALGORITMO PARA RECORRER LA LISTA DESDE EL INICIO
Igualar nodo de trabajo a nodo cabeza
MIENTRAS SEA VERDADERO
Imprimir datos del nodo
Nodo de trabajo = siguiente nodo
Si nodo de trabajo es igual a nodo inicio salir
FIN-MIENTRAS
ESTRUCTURA DE DATOS
53. ELIMINAR UN NODO DE LA LISTA
El algoritmo debe tomar en cuenta todos los
momentos en que puede eliminarse un
nodo, ya se a al inicio, al final, o un nodo
intermedio de la lista.
ESTRUCTURADEDATOS
54. • Ejercicio: Realizar el programa completo con listas enlazadas doble-circular
incluyendo los campos numero de vendedor y total de ventas del mes.
Debe incluir menú de opciones;
Debe incluir módulo de captura de Nodo de Inicio o Nodo Cabeza;
Debe poder capturar Nodo Subsecuente o Nodo Cola;
Debe poder insertar un nuevo Nodo Cabeza;
Debe poder eliminar un nodo seleccionado;
Debe incluir un recorrido desde el Nodo Cabeza hasta el Nodo Cola
mostrando el promedio de ventas de todos los vendedores en la lista.
• Entregar el programa
ESTRUCTURA DE DATOS
55. Bibliografía
• Joyanes, Zahonero. Estructura de Datos en C++. McGraw Hill. Madrid, España.
2007. ISBN: 978-84-481-5645-9.
ESTRUCTURA DE DATOS