estructura de datos - unidad 3 estructuras lineales (poo)

55
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

Upload: jose-antonio-sandoval-acosta

Post on 23-Jan-2018

386 views

Category:

Engineering


5 download

TRANSCRIPT

Page 1: Estructura de datos - Unidad 3 Estructuras Lineales (POO)

Instituto Tecnológico Superior de GuasaveIngeniería en Sistemas Computacionales

Estructura de DatosUnidad III: Estructuras Lineales

Mtro. José Antonio Sandoval AcostaRetícula ISIC-2010-224: Programa: AED-1026/2016

Itsguasave.edu.mx

Page 2: Estructura de datos - Unidad 3 Estructuras Lineales (POO)

Competencia de la Unidad

• Comprende y aplica estructuras de datos lineales para solución de problemas.

ESTRUCTURA DE DATOS

Page 3: Estructura de datos - Unidad 3 Estructuras Lineales (POO)

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 sutamaño en memoria se establece durante la compilación y permaneceinalterable durante la ejecución del programa, las estructuras de datosdinámicas crecen y se contraen a medida que se ejecuta el programa, por loque la cantidad de memoria que requieren para funcionar es muy variable.

• Las estructuras lineales de elementos homogéneos implementadas con arraysnecesitan fijar por adelantado el espacio a ocupar en memoria, de modo quecuando 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 haceineficiente el uso de los arrays en algunas aplicaciones.

ESTRUCTURA DE DATOS

Page 4: Estructura de datos - Unidad 3 Estructuras Lineales (POO)

PILAS

ESTRUCTURA DE DATOS

Page 5: Estructura de datos - Unidad 3 Estructuras Lineales (POO)

PILAS

PILA: Es un conjunto de elementos que solo pueden insertarse yeliminarse por un extremo. Se trata de una estructura de datos deacceso restrictivo a sus elementos.

Un ejemplo de pila es una torre de discos compactos, en la cual losdiscos se insertan y se extraen por el mismo extremo.

ESTRUCTURA DE DATOS

Page 6: Estructura de datos - Unidad 3 Estructuras Lineales (POO)

• En la computación estas estructuras suelen ser fundamentales. La recursividadse simula en un computador con la ayuda de una pila. Asimismo muchosalgoritmos emplean las pilas como estructura de datos fundamental, porejemplo para mantener una lista de tareas pendientes que se van acumulando.

• Las pilas ofrecen dos operaciones fundamentales, que son apilar y desapilarsobre la cima. El uso que se les de a las pilas es independiente de suimplementación interna. Es decir, se hace un encapsulamiento. Por eso seconsidera 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

Page 7: Estructura de datos - Unidad 3 Estructuras Lineales (POO)

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

Page 8: Estructura de datos - Unidad 3 Estructuras Lineales (POO)

• Pilas con Arreglos: Representar pilas usando arreglos es relativamente mássencillo que usando listas enlazadas, el único problema que existe es lalimitante de espacio en memoria, ya que al definir un tamaño máximo ya no esposible insertar más elementos.

ESTRUCTURA DE DATOS

Page 9: Estructura de datos - Unidad 3 Estructuras Lineales (POO)

• Pilas con Listas enlazadas: Son llamadas también estructuras dinámicas, yaque el espacio en memoria se crea hasta que se inserta el elemento.

ESTRUCTURA DE DATOS

Page 10: Estructura de datos - Unidad 3 Estructuras Lineales (POO)

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

Page 11: Estructura de datos - Unidad 3 Estructuras Lineales (POO)

Estatus de las PILAS

ESTRUCTURA DE DATOS

Page 12: Estructura de datos - Unidad 3 Estructuras Lineales (POO)

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

Page 13: Estructura de datos - Unidad 3 Estructuras Lineales (POO)

VERIFICAR SI LA PILA ESTA LLENA

AlgoritmoFUNCION boolena llena()

SI (tope == maximo – 1)regresar verdadero

SINOregresar falso

FINSIFINFUNCION

ESTRUCTURA DE DATOS

Page 14: Estructura de datos - Unidad 3 Estructuras Lineales (POO)

VERIFICAR SI LA PILA ESTA VACIA

AlgoritmoFUNCION boolena vacia()

SI (tope == – 1)regresar verdadero

SINOregresar falso

FINSIFINFUNCION

ESTRUCTURA DE DATOS

Page 15: Estructura de datos - Unidad 3 Estructuras Lineales (POO)

INSERTAR ELEMENTO EN LA PILA

AlgoritmoMODULO insertar() {

SI LA PILA ESTA LLENA MOSTRAR “Pila llena”

SINOCAPTURAR ELEMENTOINCREMENTAR tope EN 1pila[tope]=ELEMENTO;

FINSIFINMODULO

ESTRUCTURA DE DATOS

Page 16: Estructura de datos - Unidad 3 Estructuras Lineales (POO)

ELIMINAR ELEMENTO EN LA PILA

AlgoritmoMODULO eliminar() {

SI LA PILA ESTA VACIA MOSTRAR “Pila Vacia”

SINOMOSTRAR CONTENIDOELIMINAR ELEMENTODECREMENTAR TOPE EN 1

FINSIFINMODULO

ESTRUCTURA DE DATOS

Page 17: Estructura de datos - Unidad 3 Estructuras Lineales (POO)

RECORRIDO DE UNA PILA

AlgoritmoMODULO recorrer() {

DECLARAR var de trabajoSI LA PILA ESTA VACIA

MOSTRAR “Pila Vacia”SINO

MIENTRAS var<=topeMOSTRAR CONTENIDOINCREMENTAR var en 1

FINMIENTRASFINSI

FINMODULO

ESTRUCTURA DE DATOS

Page 18: Estructura de datos - Unidad 3 Estructuras Lineales (POO)

• Ejercicio: Desarrolle el programa correspondiente a la PILA que se ha visto enclase 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

Page 19: Estructura de datos - Unidad 3 Estructuras Lineales (POO)

COLAS

ESTRUCTURA DE DATOS

Page 20: Estructura de datos - Unidad 3 Estructuras Lineales (POO)

Definición de COLAS

Una COLA es un conjunto homogéneo de elementos, del cualpueden suprimirse elementos sólo desde un extremo llamadoparte delantera, asimismo, sólo pueden agregarse elementos enel extremo contrario llamado parte posterior.

• El primer elemento en ser agregado a una COLA esel primer elemento en ser eliminado.

• Por esta razón una COLA se denomina FIFO (FirstIn-First Out), que es justo el concepto contrario auna PILA o LIFO (Last In-First Out).

ESTRUCTURA DE DATOS

Page 21: Estructura de datos - Unidad 3 Estructuras Lineales (POO)

COLAS DINÁMICAS CON NODOS

Parte Delantera o

Salida

Parte Posterior o

Entrada

ESTRUCTURA DE DATOS

Page 22: Estructura de datos - Unidad 3 Estructuras Lineales (POO)

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

Page 23: Estructura de datos - Unidad 3 Estructuras Lineales (POO)

TRABAJANDO CON COLAS ESTÁTICAS

• Una cola estática utiliza un arreglo con un número limitado de elementos en elmismo, dicho arreglo requiere de una constante que controle el máximo deelementos que pueden ser cargados a la cola, y de una variable que controle elelemento 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

Page 24: Estructura de datos - Unidad 3 Estructuras Lineales (POO)

ALGORITMO PARA DETERMINAR SI LA COLA ESTÁ LLENA

FUNCION BOLEANA llena () SI (final >= maximo - 1 ) ENTONCES

REGRESAR verdaderoSINO

REGRESAR falsoFINSI

FINFUNCION

ALGORITMO

ESTRUCTURA DE DATOS

Page 25: Estructura de datos - Unidad 3 Estructuras Lineales (POO)

ALGORITMO PARA DETERMINAR SI LA COLA ESTÁ VACIA

FUNCION BOLEANA vacia () SI (final < 0) ENTONCES

REGRESAR verdaderoSINO

REGRESAR falsoFINSI

FINFUNCION

ALGORITMO

ESTRUCTURA DE DATOS

Page 26: Estructura de datos - Unidad 3 Estructuras Lineales (POO)

ALGORITMO PARA INSERTAR ELEMENTO EN LA COLA

MODULO insertar(DATO) SI (llena) ENTONCES

IMPRIME “cola llena”SINO

incrementar finalcola[final]=DATO

FINSIFINMODULO

ALGORITMO

ESTRUCTURA DE DATOS

Page 27: Estructura de datos - Unidad 3 Estructuras Lineales (POO)

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]

FINFORFINSIDECREMENTAR final

FINMODULO

ALGORITMO

ESTRUCTURA DE DATOS

Page 28: Estructura de datos - Unidad 3 Estructuras Lineales (POO)

ALGORITMO PARA HACER RECORRIDO DE COLA

MODULO recorrer () SI (vacia) ENTONCES

IMPRIME “cola vacia”SINO

FOR (J=0, J<=final, j++)imprime cola[j]

FINFORFINSI

FINMODULO

ALGORITMO

ESTRUCTURA DE DATOS

Page 29: Estructura de datos - Unidad 3 Estructuras Lineales (POO)

• Ejercicio: Desarrolle el programa correspondiente a la COLA que se ha visto enclase 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 cantidadque se desea eliminar: si es menor al valor del elemento en la parte delanterade la cola deberá restarse pero sin eliminar el elemento; si es mayor debeeliminarse y el faltante restarlo del siguiente elemento en la cola a manera deun inventario de almacén.

ESTRUCTURA DE DATOS

Page 30: Estructura de datos - Unidad 3 Estructuras Lineales (POO)

LISTAS ENLAZADAS

ESTRUCTURA DE DATOS

Page 31: Estructura de datos - Unidad 3 Estructuras Lineales (POO)

• Una lista enlazada es una colección o secuencia de elementos dispuestos unodetrás de otro, en la que cada elemento se conecta al siguiente elemento porun “enlace”.

• La idea básica consiste en construir una lista cuyos elementos, llamadosnodos, se componen de dos partes o campos:

La primera parte contiene la información y es, por consiguiente, un valorde 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

Page 32: Estructura de datos - Unidad 3 Estructuras Lineales (POO)

• La representación gráfica más extendida es aquella que utiliza una caja con dossecciones en su interior. En la primera sección se encuentra el elemento ovalor a almacenar y en la segunda sección el enlace o puntero, representadomediante una flecha que sale de la caja y apunta al siguiente nodo.

ESTRUCTURA DE DATOS

Page 33: Estructura de datos - Unidad 3 Estructuras Lineales (POO)

Clasificación de las listas enlazadas

LISTAS SIMPLEMENTE ENLAZADAS: Cada nodo (elemento)contiene un único enlace que conecta ese nodo al nodo siguienteo nodo sucesor. La lista es eficiente en recorridos directos(“adelante”).

ESTRUCTURA DE DATOS

Page 34: Estructura de datos - Unidad 3 Estructuras Lineales (POO)

Clasificación de las listas enlazadas

LISTAS DOBLEMENTE ENLAZADAS: Cada nodo contiene dosenlaces, uno a su nodo predecesor y el otro a su nodo sucesor. Lalista es eficiente tanto en recorrido directo (“adelante”) como enrecorrido inverso (“atrás”).

ESTRUCTURA DE DATOS

Page 35: Estructura de datos - Unidad 3 Estructuras Lineales (POO)

Clasificación de las listas enlazadas

LISTA CIRCULAR SIMPLEMENTE ENLAZADA: Una lista simplementeenlazada en la que el último elemento (cola) se enlaza al primerelemento (cabeza) de tal modo que la lista puede ser recorrida demodo circular (“en anillo”).

ESTRUCTURA DE DATOS

Page 36: Estructura de datos - Unidad 3 Estructuras Lineales (POO)

Clasificación de las listas enlazadas

LISTA CIRCULAR DOBLEMENTE ENLAZADA: Una lista doblementeenlazada en la que el último elemento se enlaza al primerelemento y viceversa. Esta lista se puede recorrer de modo circular(en anillo) tanto en dirección directa (“hacia adelante”) comoinversa (“hacia atrás”).

ESTRUCTURA DE DATOS

Page 37: Estructura de datos - Unidad 3 Estructuras Lineales (POO)

TRABAJANDO CON LISTAS SIMPLES POR MEDIO DE CLASES

• Para trabajar con una lista enlazada debemos crear una clase que refleje lainformación contenida en cada nodo de la misma y que contenga una variablede 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

Page 38: Estructura de datos - Unidad 3 Estructuras Lineales (POO)

• Después debemos definir una segunda clase que contendrá todos los métodospara 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.

Page 39: Estructura de datos - Unidad 3 Estructuras Lineales (POO)

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

Page 40: Estructura de datos - Unidad 3 Estructuras Lineales (POO)

• 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 DATOSINSERTAR NODO AL INICIO CUANDO LA LISTA YA TIENE ELEMENTOS

Page 41: Estructura de datos - Unidad 3 Estructuras Lineales (POO)

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

Page 42: Estructura de datos - Unidad 3 Estructuras Lineales (POO)

RECORRER LA LISTA DESDE EL INICIO

Igualar nodo de trabajo a nodo cabezaMIENTRAS sea VERDADERO

Imprimir datos del nodoNodo de trabajo = siguiente nodoSI nodo de trabajo es NULL salir

FIN-MIENTRAS

ESTRUCTURA DE DATOS

Page 43: Estructura de datos - Unidad 3 Estructuras Lineales (POO)

ALGORITMO DE INSERCIÓN DE NODOS AL INICIO DE LA LISTA O NODO CABEZA.

SI cabeza==NULLcrear nuevo nodo inicialasignar datos al campo correspondienteasignar NULL a la variable apuntador

SINOreservar memoria y crear nuevo nodoasignar datos al campo correspondienteenlazar el nodo actual con el nodo cabezaigualar nodo cabeza al nodo actual

FINSI

ESTRUCTURA DE DATOS

Page 44: Estructura de datos - Unidad 3 Estructuras Lineales (POO)

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

Page 45: Estructura de datos - Unidad 3 Estructuras Lineales (POO)

ESTR

UC

TUR

A D

E D

ATO

S

Page 46: Estructura de datos - Unidad 3 Estructuras Lineales (POO)

• 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 Colamostrando el promedio los elementos contenidos y el número de nodosde la lista;

• Entregar el programa

ESTRUCTURA DE DATOS

Page 47: Estructura de datos - Unidad 3 Estructuras Lineales (POO)

TRABAJANDO CON LISTAS DE DOBLE ENLACE-CIRCULARES CON CLASES

• Al utilizar clases para crear los nodos se elimina el uso “struct” y se hace usode 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

Page 48: Estructura de datos - Unidad 3 Estructuras Lineales (POO)

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

Page 49: Estructura de datos - Unidad 3 Estructuras Lineales (POO)

INSERTAR NODO INICIAL O CABECERA DE LA LISTA

• Cuando declaramos la variable NI utilizando un asterisco (*NI) lo que hicimosfue indicar que se trata de un apuntador, por lo que ahora solo tenemos quereservar 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

Page 50: Estructura de datos - Unidad 3 Estructuras Lineales (POO)

ALGORITMO DE INSERCIÓN DE NODOS AL INICIO DE LA LISTA

• Reservar memoria y crear nuevonodo.

• Asignar datos al campocorrespondiente.

• Crear circularidad del odo nuevocon nodo inicio.

• Crear circularidad del nodoinicio con nodo nuevo.

• Encadenar nodo cola con nodonuevo.

• Encadenar nodo nuevo connodo cola.

• Convertir nodo nuevo en nodoinicio.ESTR

UC

TUR

A D

E D

ATO

S

Page 51: Estructura de datos - Unidad 3 Estructuras Lineales (POO)

• Reservar memoria y crearnuevo 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.ES

TRU

CTU

RA

DE

DAT

OS

Page 52: Estructura de datos - Unidad 3 Estructuras Lineales (POO)

ALGORITMO PARA RECORRER LA LISTA DESDE EL INICIO

Igualar nodo de trabajo a nodo cabezaMIENTRAS SEA VERDADERO

Imprimir datos del nodoNodo de trabajo = siguiente nodoSi nodo de trabajo es igual a nodo inicio salir

FIN-MIENTRAS

ESTRUCTURA DE DATOS

Page 53: Estructura de datos - Unidad 3 Estructuras Lineales (POO)

ELIMINAR UN NODO DE LA LISTAEl algoritmo debe tomar en cuenta todos losmomentos en que puede eliminarse unnodo, ya se a al inicio, al final, o un nodointermedio de la lista.

ESTR

UC

TUR

A D

E D

ATO

S

Page 54: Estructura de datos - Unidad 3 Estructuras Lineales (POO)

• Ejercicio: Realizar el programa completo con listas enlazadas doble-circularincluyendo 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 Colamostrando el promedio de ventas de todos los vendedores en la lista.

• Entregar el programa

ESTRUCTURA DE DATOS

Page 55: Estructura de datos - Unidad 3 Estructuras Lineales (POO)

Bibliografía

• Joyanes, Zahonero. Estructura de Datos en C++. McGraw Hill. Madrid, España.2007. ISBN: 978-84-481-5645-9.

ESTRUCTURA DE DATOS