SlideShare una empresa de Scribd logo
1 de 97
Descargar para leer sin conexión
Estructuras de datos
lineales
Universidad Rafael Landívar
Ing. Álvaro Enrique Ruano
Estructura de Datos I
Unidad 2
Estructuras de datos lineales
•Listas
•Listas Enlazadas
•Listas Circulares
•Listas Doblemente Enlazadas
•Pilas
•Colas
Listas
• Una lista lineal es un conjunto de elementos de
un tipo dado que pueden variar en cantidad.
• Cada elemento tiene un único predecesor y un
único sucesor (excepto el primero y el último).
• En la implementación, los elementos de una lista
se almacenan contiguos.
Listas
• La implementación se realiza por medio de arrays
(deben dimensionarse con un tamaño suficiente).
• El acceso a cualquier elemento de la lista y la
adición de nuevos elementos es fácil.
• El borrado o inserción de un elemento requiere un
desplazamiento de los demás elementos, para lo
cual se deben implementar algoritmos
específicos.
Listas
• Las operaciones que se implementan comúnmente son las siguientes:
• Localizar un elemento
• Insertar un elemento
• Eliminar un elemento
• Ordenar los elementos
• Copiar la lista
• Unir varias listas
• Dividir en sublistas
Listas Enlazadas
• Los elementos se almacenan en posiciones de
memoria que no son contiguas.
• Son un conjunto de elementos en los que cada
elemento contiene la posición (dirección de
memoria) del siguiente elemento de la lista.
• Eliminan los inconvenientes de las listas
tradicionales.
Listas Enlazadas
• Las listas enlazadas deben contar con por lo
menos tres elementos:
• Estructura especial para almacenar el
contenido de los elementos.
• Un apuntador al primer elemento de la lista
llamado cabecera.
• Un medio para detectar el último elemento de la
lista.
Listas Enlazadas
• Cada elemento de una lista enlazada tiene por
lo menos dos campos: el valor y el enlace (link)
Listas Enlazadas
• El último nodo, que no cuenta con un enlace a
otro elemento, se puede representar de las
siguientes maneras:
Listas vs. Listas Enlazadas
Listas Enlazadas
• La implementación de una lista enlazada dependerá
del lenguaje de programación:
• En lenguajes como C, C++, Pascal o Ada se utiliza
un puntero como enlace.
• En lenguajes como Java o C# se almacena una
referencia al siguiente objeto nodo.
• En otros lenguajes de programación que no
soportan ninguna de estas opciones se realiza la
implementación mediante arreglos.
Procesamiento de Listas
Enlazadas
• Eliminación: Es más sencilla que en una lista
normal, no requiere corrimientos.
Procesamiento de Listas
Enlazadas
• Se debe verificar que la lista no esté vacía.
• Existen dos casos particulares:
• El elemento a eliminar está al principio de la
lista
• El elemento a eliminar está en cualquier otro
lugar de la lista.
Procesamiento de Listas
Enlazadas
• Inserción: También más sencilla que en una lista
normal.
Procesamiento de Listas
Enlazadas
• Se debe reservar el espacio de memoria para el
nuevo elemento.
• Al igual que la eliminación, se deben considerar
dos casos:
• Insertar un elemento al frente de la lista.
• Insertar un elemento en cualquier otro lugar
Procesamiento de Listas
Enlazadas
• Para poder recorrer una lista enlazada,
necesitaremos empezar por la cabecera.
• Se deben recorrer uno a uno los elementos
hasta encontrar el elemento deseado.
• Si no se encuentra el elemento, el recorrido
termina al encontrar el valor nulo en el apuntado
a la siguiente posición.
Listas Circulares
• Son similares a las listas enlazadas con la
diferencia que el último elemento apunta al
primero, creando un círculo.
• También se les conoce como listas enlazadas
circulares o listas en anillo.
Listas Circulares
Listas Circulares vs. Listas
Enlazadas
• Ventajas
• Cada nodo es accesible desde cualquier otro nodo
de la lista.
• Las operaciones de concatenación y división son
más eficaces.
• Desventajas:
• Se pueden producir ciclos infinitos al recorrerla
(utilizar bandera para cabecera).
Listas Doblemente
Enlazadas
• Son una mejora de las listas enlazadas (a partir
de ahora, listas simplemente enlazadas).
• Permiten recorrer las listas en ambas
direcciones.
• Cada nodo tiene dos enlaces, uno al elemento
anterior y otro al elemento siguiente.
Listas Doblemente
Enlazadas
Procesamiento de Listas
Doblemente Enlazadas
• Inserción:
Procesamiento de Listas
Doblemente Enlazadas
• Inserción:
Procesamiento de Listas
Doblemente Enlazadas
• Eliminación:
Pila
• Es un tipo especial de lista lineal en la que la
inserción y borrado de los elementos se realiza
únicamente por un extremo.
• El extremo utilizado se llama cima o tope (top).
• Los elementos se quitan en orden inverso al
orden en que entran.
Pila
• El modo de acceso a sus elementos de
denomina LIFO (Last In, First Out).
• En español se les conoce como UEPS (Ultimo
en entrar, primero en salir)
• Cuenta con operaciones básicas: apilar y
desapilar.
Pila
Representaciones gráficas
de la Pila
Operaciones de la Pila
• Push:
• Operación de insertar un elemento en la pila.
• También se conoce como meter, poner o apilar.
• Pop:
• Operación de eliminar un elemento en la pila.
• También se conoce como sacar, quitar o desapilar.
Operaciones de la Pila
Operaciones de la Pila
• Push
Operaciones de la Pila
• Push
Operaciones de la Pila
• Pop
Operaciones de la Pila
• Pop
Utilidades de la Pila
• En el área de ciencias de la computación las
pilas son utilizadas para solucionar un amplia
variedad de problemas.
• Se utilizan en compiladores, sistemas operativos
y en programas de aplicación.
Utilidades de la Pila
• Ejemplo:
Utilidades de la Pila
• Ejemplo:
Cola
• Son un tipo especial de lista lineal donde los objetos
son insertados por un extremo y removidos por el otro
únicamente.
• Los elementos se quitan en orden inverso al orden en
que entran.
• El modo de acceso a sus elementos de denomina
FIFO (First In, First Out).
• Cuenta con operaciones básicas: encolar (Enqueue),
desencolar (Dequeue) y consulta (Peek).
Cola
Clasificación Big-O
Plantillas y Genéricos
•Estructuras Similares
•Programación Genérica
•Plantillas
•Generics
•Delegados y Predicados
Estructuras Similares
•Mientras más se adentra una persona en el
mundo de las ciencias de la computación, más
se da cuenta de que puede utilizar las mismas
estructuras para resolver problemas similares.
Estructuras Similares
•Por ejemplo, una estructura lineal como la “cola”
se puede aplicar para:
•Manejo de procesos en el sistema operativo
•Manejo del orden de atención de solicitudes en
un hospital
•Manejo de solicitude hechas a un Web Service
Estructuras Similares
•En todos los casos mencionados, el código es
muy similar.
•Debemos hacer variaciones según el tipo del
“dato” que queremos almacenar en el nodo.
•Esto nos obliga a tener código muy similar y
repetido.
Programación Genérica
•Es un paradigma de programación centrado en
los algoritmos y no en los datos.
•Su postulado fundamental puede sintetizarse en
una palabra: generalización.
Programación Genérica
•Se busca que los algoritmos:
•Sean parametrizados al máximo
•Sean expresados de una forma independiente
de detalles concretos de un tipo
•Sirvan a la mayor variedad posible de tipos y
estructuras de datos
Plantillas
•Son uno de los aportes del lenguaje C++ al
lenguaje C.
•Permiten pasar “tipos de dato” como
parámetros a un determinado programa
•Permiten la creación de funciones, clases o
estructuras genéricas
Plantillas
•Ventajas:
• Generalización: Luego de generar un
algoritmo no deberemos realizar
modificaciones para utilizarlo con otros
varios tipos de datos.
• Simplicidad: Permiten un fácil mantenimiento
del código
Plantillas
•Desventajas:
• Precauciones: Requiere tomar algunas
precauciones para evitar que el código falle
con algunos tipos de datos.
• El programa demora más en ser compilado.
Plantillas
• Las plantillas generan automáticamente el
código de manejo para todas las clases
utilizadas dentro del programa.
• Este trabajo se realiza en tiempo de
compilación.
Plantillas
• Algunas plantillas conocidas son:
• STL: Standard Template Library proporciona
implementaciones de arrays y listas
genéricas.
• BGL: Boost Graph Library implementa
algoritmos y objetos de grafos genéricos.
Plantillas
• Normalmente el nombre del parámetro de tipo
inicia con una T.
• El All-in-one code framework nos sugiere utilizar
PascalCasing con el prefijo T.
Plantillas (Ejemplo C++)
Plantillas (Ejemplo C++)
Plantillas (Ejemplo C++)
Plantillas (Ejemplo C++)
Generics
• .NET provee una funcionalidad similar a las
plantillas, esta es llamada “Generics”.
• Funciona de forma muy parecida a las plantillas
con algunas diferencias.
Generics
• Principales diferencias:
• El manejo genérico es realizado en tiempo de
ejecución y no en tiempo de compilación.
• No permite implementaciones personalizadas
o parciales para algunos tipos de datos.
• No permite tipos de datos default
Generics
• Principales diferencias:
• El código de las plantillas siempre debe ser
válido, no se pueden hacer chequeos por
tipo.
• No se pueden utilizar parámetros de tipo
plantilla.
Generics (Ejemplo C#)
Generics (Ejemplo C#)
Generics (Ejemplo C#)
Generics (Ejemplo C#)
Generics (Ejemplo C#)
Generics (Ejemplo C#)
Más Información
• Si desean ampliar la información sobre Generics
dirigirse a:
• https://msdn.microsoft.com/en-us/library/
0x6a29h6.aspx
Delegado
• Un delegado es un tipo de dato que representa
un referencia a un método con una determinada
lista de parámetros y tipo de retorno (firma del
método).
• Al instanciar un delegado, puede ser asociado a
cualquier método con la misma firma y se
puede ejecutar dicho método a través de la
instancia del delegado.
Delegado (Ejemplo C#)
Delegado (Ejemplo C#)
Delegado (Ejemplo C#)
Delegado (Ejemplo C#)
Expresión Lambda
• Es una función anónima que puede ser usada
para crear delegados. Al utilizar expresiones
lambda, es posible escribir funciones locales
que pueden ser pasadas como parámetros o
retornadas como resultado de funciones.
• Estas expresiones tienen dos segmentos, el
izquierdo para declarar parámetros y el derecho
con la expresión.
Predicado
• Es un delegado que representa un método que
define un conjunto de criterios y determina
cuando un objeto (recibido como parámetro)
cumple dichos criterios.
• Normalmente es utilizado en listas para realizar
búsquedas dentro de sus elementos.
Predicado (Ejemplo)
Predicado (Ejemplo)
Clases Preexistentes
•Listas
•Listas Enlazadas
•Pilas
•Colas
Listas .NET Framework
• List<T> (Clase)
• .NET Framework (current version)
• Representa una lista de objetos fuertemente tipados a
la que se puede obtener acceso por índice.
Proporciona métodos para buscar, ordenar y
manipular listas.
• Espacio de nombres:   System.Collections.Generic
• Ensamblado:  mscorlib (en mscorlib.dll)
Listas
• Para los ejemplos presentados a continuación,
estaremos apoyándonos en las siguiente
sección de código:
Listas (tipos nativos)
Listas
• Para los ejemplos presentados a continuación,
estaremos apoyándonos en las siguiente
sección de código:
Listas
• Para los ejemplos presentados a continuación,
estaremos apoyándonos en las siguiente
sección de código:
Listas (búsqueda y eliminación)
Listas (ordenamiento explícito)
Listas
• Para los ejemplos presentados a continuación,
estaremos apoyándonos en las siguiente
sección de código, la cual se agrega a la clase
Carro:
Listas (ordenamiento default)
Listas (ejemplo Python)
• Para los ejemplos presentados a continuación,
estaremos apoyándonos en las siguiente
sección de código:
Listas (ejemplo Python)
Listas Enlazadas .NET Framework
• LinkedList<T> Clase
• .NET Framework (current version)
• Representa una lista doblemente enlazada.
• Espacio de nombres:  
System.Collections.Generic
• Ensamblado:  System (in System.dll)
Listas Enlazadas (añadir datos)
Listas Enlazadas (eliminación)
Pilas .NET Framework
• Stack<T> (Clase)
• .NET Framework (current version) 
• Representa una colección último en entrar,
primero en salir (LIFO) de tamaño variable con
instancias del mismo tipo especificado.
• Espacio de nombres:   System.Collections.Generic
• Ensamblado:  System (en System.dll)
Pilas
Pilas (Python)
• Append: Se utiliza
como operación
equivalente a push.
• Pop: Es la operación
desapilar a la que
estamos
acostumbrados.
Colas .NET Framework
• Queue<T> (Clase)
• .NET Framework (current version)
• Representa una colección de objetos de tipo
primero en entrar, primero en salir.
• Espacio de nombres:  
System.Collections.Generic
• Ensamblado:  System (en System.dll)
Colas
Colas (Python)
• Append: Se utiliza
como operación
equivalente a encolar.
• Popleft: Se utiliza
como la operación
desencolar.
Gracias por su
atención

Más contenido relacionado

La actualidad más candente

La actualidad más candente (20)

Estructura de Datos - Unidad 5 metodos de ordenamiento
Estructura de Datos - Unidad 5 metodos de ordenamientoEstructura de Datos - Unidad 5 metodos de ordenamiento
Estructura de Datos - Unidad 5 metodos de ordenamiento
 
Estructura de Datos - Unidad 6 Metodos de busqueda
Estructura de Datos - Unidad 6 Metodos de busquedaEstructura de Datos - Unidad 6 Metodos de busqueda
Estructura de Datos - Unidad 6 Metodos de busqueda
 
Estructura de datos - Unidad 1: Introducción a las estructuras de datos
Estructura de datos - Unidad 1: Introducción a las estructuras de datosEstructura de datos - Unidad 1: Introducción a las estructuras de datos
Estructura de datos - Unidad 1: Introducción a las estructuras de datos
 
Colas
ColasColas
Colas
 
Listas
ListasListas
Listas
 
Colas en programacion
Colas en programacionColas en programacion
Colas en programacion
 
Estructura de Datos - Unidad 4 Estructuras no lineales
Estructura de Datos - Unidad 4 Estructuras no linealesEstructura de Datos - Unidad 4 Estructuras no lineales
Estructura de Datos - Unidad 4 Estructuras no lineales
 
Flujos y archivo en java
Flujos y archivo en javaFlujos y archivo en java
Flujos y archivo en java
 
Unidad 3 estructura lineales
Unidad 3 estructura linealesUnidad 3 estructura lineales
Unidad 3 estructura lineales
 
Estructura de Datos: Pila
Estructura de Datos: PilaEstructura de Datos: Pila
Estructura de Datos: Pila
 
Metodos de ordenamiento
Metodos de ordenamientoMetodos de ordenamiento
Metodos de ordenamiento
 
COLAS
COLASCOLAS
COLAS
 
Arboles M-Way, 2-3 y 2-3-4
Arboles M-Way, 2-3 y 2-3-4Arboles M-Way, 2-3 y 2-3-4
Arboles M-Way, 2-3 y 2-3-4
 
Listas como estructura de datos..
Listas como estructura de datos..Listas como estructura de datos..
Listas como estructura de datos..
 
Reporte metodos de busqueda y ordenamiento
Reporte metodos de busqueda y ordenamientoReporte metodos de busqueda y ordenamiento
Reporte metodos de busqueda y ordenamiento
 
Pilas y colas
Pilas y colasPilas y colas
Pilas y colas
 
Estructuras lineales unidad 3
Estructuras lineales unidad 3Estructuras lineales unidad 3
Estructuras lineales unidad 3
 
Listas, pilas y colas
Listas, pilas y colasListas, pilas y colas
Listas, pilas y colas
 
Árboles binarios, ABB y AVL
Árboles binarios, ABB y AVLÁrboles binarios, ABB y AVL
Árboles binarios, ABB y AVL
 
Cuadro sinóptico estructuras de datos y su clasificación
Cuadro sinóptico   estructuras de datos y su clasificaciónCuadro sinóptico   estructuras de datos y su clasificación
Cuadro sinóptico estructuras de datos y su clasificación
 

Similar a Estructuras de datos lineales

Lista,pilas y columnas
Lista,pilas y columnasLista,pilas y columnas
Lista,pilas y columnas
kety24
 
1- Introduccion- clasificacindelasestructurasdedatos.pptx
1- Introduccion- clasificacindelasestructurasdedatos.pptx1- Introduccion- clasificacindelasestructurasdedatos.pptx
1- Introduccion- clasificacindelasestructurasdedatos.pptx
aulasdigitales24
 
Listas pilascolas edward.mejia-10-1314
Listas pilascolas edward.mejia-10-1314Listas pilascolas edward.mejia-10-1314
Listas pilascolas edward.mejia-10-1314
Edward Mejia Gomez
 
Presentaciones base de datos , fundamentos de base de datos
Presentaciones base de datos , fundamentos de base de datosPresentaciones base de datos , fundamentos de base de datos
Presentaciones base de datos , fundamentos de base de datos
BryanSotalin1
 

Similar a Estructuras de datos lineales (20)

Tipos de estructuras de datos en la asignatura de analisis y diseño
Tipos de estructuras de datos en la asignatura de analisis y diseñoTipos de estructuras de datos en la asignatura de analisis y diseño
Tipos de estructuras de datos en la asignatura de analisis y diseño
 
Centro de estudios_tecnologicos_industrial_y_de_servicios
Centro de estudios_tecnologicos_industrial_y_de_serviciosCentro de estudios_tecnologicos_industrial_y_de_servicios
Centro de estudios_tecnologicos_industrial_y_de_servicios
 
Centro de estudios_tecnologicos_industrial_y_de_servicios
Centro de estudios_tecnologicos_industrial_y_de_serviciosCentro de estudios_tecnologicos_industrial_y_de_servicios
Centro de estudios_tecnologicos_industrial_y_de_servicios
 
Pilas y colas
Pilas y colasPilas y colas
Pilas y colas
 
Estructura de Datos - Unidad III Estructuras Lineales
Estructura de Datos - Unidad III Estructuras LinealesEstructura de Datos - Unidad III Estructuras Lineales
Estructura de Datos - Unidad III Estructuras Lineales
 
Lista,pilas y columnas
Lista,pilas y columnasLista,pilas y columnas
Lista,pilas y columnas
 
1- Introduccion- clasificacindelasestructurasdedatos.pptx
1- Introduccion- clasificacindelasestructurasdedatos.pptx1- Introduccion- clasificacindelasestructurasdedatos.pptx
1- Introduccion- clasificacindelasestructurasdedatos.pptx
 
Presentación1
Presentación1Presentación1
Presentación1
 
Sql3
Sql3Sql3
Sql3
 
Listas pilascolas edward.mejia-10-1314
Listas pilascolas edward.mejia-10-1314Listas pilascolas edward.mejia-10-1314
Listas pilascolas edward.mejia-10-1314
 
DECLARACION DE LISTAS 1.pdf
DECLARACION DE LISTAS 1.pdfDECLARACION DE LISTAS 1.pdf
DECLARACION DE LISTAS 1.pdf
 
Trabajo de estructura de datos
Trabajo de estructura de datosTrabajo de estructura de datos
Trabajo de estructura de datos
 
Trabajo de estructura de datos
Trabajo de estructura de datosTrabajo de estructura de datos
Trabajo de estructura de datos
 
Presentación1
Presentación1Presentación1
Presentación1
 
Presentaciones base de datos , fundamentos de base de datos
Presentaciones base de datos , fundamentos de base de datosPresentaciones base de datos , fundamentos de base de datos
Presentaciones base de datos , fundamentos de base de datos
 
Material adicional c sharp
Material adicional c sharpMaterial adicional c sharp
Material adicional c sharp
 
Estructura de datos - Unidad 3 Estructuras Lineales (POO)
Estructura de datos - Unidad 3 Estructuras Lineales (POO)Estructura de datos - Unidad 3 Estructuras Lineales (POO)
Estructura de datos - Unidad 3 Estructuras Lineales (POO)
 
Normalización
NormalizaciónNormalización
Normalización
 
Listas, pilas y colas
Listas, pilas y colasListas, pilas y colas
Listas, pilas y colas
 
Listas, pilas y colas
Listas, pilas y colasListas, pilas y colas
Listas, pilas y colas
 

Más de Alvaro Enrique Ruano

Más de Alvaro Enrique Ruano (17)

Resumen caso Enron
Resumen caso EnronResumen caso Enron
Resumen caso Enron
 
Otras estructuras de datos (heap, tablas hash y diccionarios)
Otras estructuras de datos (heap, tablas hash y diccionarios)Otras estructuras de datos (heap, tablas hash y diccionarios)
Otras estructuras de datos (heap, tablas hash y diccionarios)
 
Árboles Multicamino, B y B+
Árboles Multicamino, B y B+Árboles Multicamino, B y B+
Árboles Multicamino, B y B+
 
Introducción al análisis de algoritmos
Introducción al  análisis de algoritmosIntroducción al  análisis de algoritmos
Introducción al análisis de algoritmos
 
Ordenamientos rápido y mezcla
Ordenamientos rápido y mezclaOrdenamientos rápido y mezcla
Ordenamientos rápido y mezcla
 
Ordenamientos por selección y Shell
Ordenamientos por selección y ShellOrdenamientos por selección y Shell
Ordenamientos por selección y Shell
 
Búsqueda secuencial y binaria
Búsqueda secuencial y binariaBúsqueda secuencial y binaria
Búsqueda secuencial y binaria
 
Recursividad directa e indirecta
Recursividad directa e indirectaRecursividad directa e indirecta
Recursividad directa e indirecta
 
Programación Orientada a Objetos - constructores y destructores
Programación Orientada a Objetos - constructores y destructoresProgramación Orientada a Objetos - constructores y destructores
Programación Orientada a Objetos - constructores y destructores
 
Ordenamientos burbuja e inserción
Ordenamientos burbuja e inserciónOrdenamientos burbuja e inserción
Ordenamientos burbuja e inserción
 
Programación Orientada a Objetos - Otras relaciones entre clases
Programación Orientada a Objetos - Otras relaciones entre clasesProgramación Orientada a Objetos - Otras relaciones entre clases
Programación Orientada a Objetos - Otras relaciones entre clases
 
Programación Orientada a Objetos - herencia y polimorfismo
Programación Orientada a Objetos - herencia y polimorfismoProgramación Orientada a Objetos - herencia y polimorfismo
Programación Orientada a Objetos - herencia y polimorfismo
 
Programación Orientada a Objetos - atributos y métodos
Programación Orientada a Objetos - atributos y métodosProgramación Orientada a Objetos - atributos y métodos
Programación Orientada a Objetos - atributos y métodos
 
Paradigmas de programación
Paradigmas de programaciónParadigmas de programación
Paradigmas de programación
 
Técnicas de programación
Técnicas de programaciónTécnicas de programación
Técnicas de programación
 
Análisis de una inversión en activos financieros negociados por medio de la B...
Análisis de una inversión en activos financieros negociados por medio de la B...Análisis de una inversión en activos financieros negociados por medio de la B...
Análisis de una inversión en activos financieros negociados por medio de la B...
 
Solución de problemas y ciclo de vida del desarrollo de software
Solución de problemas y ciclo de vida del desarrollo de softwareSolución de problemas y ciclo de vida del desarrollo de software
Solución de problemas y ciclo de vida del desarrollo de software
 

Estructuras de datos lineales

  • 1. Estructuras de datos lineales Universidad Rafael Landívar Ing. Álvaro Enrique Ruano Estructura de Datos I Unidad 2
  • 2. Estructuras de datos lineales •Listas •Listas Enlazadas •Listas Circulares •Listas Doblemente Enlazadas •Pilas •Colas
  • 3. Listas • Una lista lineal es un conjunto de elementos de un tipo dado que pueden variar en cantidad. • Cada elemento tiene un único predecesor y un único sucesor (excepto el primero y el último). • En la implementación, los elementos de una lista se almacenan contiguos.
  • 4. Listas • La implementación se realiza por medio de arrays (deben dimensionarse con un tamaño suficiente). • El acceso a cualquier elemento de la lista y la adición de nuevos elementos es fácil. • El borrado o inserción de un elemento requiere un desplazamiento de los demás elementos, para lo cual se deben implementar algoritmos específicos.
  • 5. Listas • Las operaciones que se implementan comúnmente son las siguientes: • Localizar un elemento • Insertar un elemento • Eliminar un elemento • Ordenar los elementos • Copiar la lista • Unir varias listas • Dividir en sublistas
  • 6. Listas Enlazadas • Los elementos se almacenan en posiciones de memoria que no son contiguas. • Son un conjunto de elementos en los que cada elemento contiene la posición (dirección de memoria) del siguiente elemento de la lista. • Eliminan los inconvenientes de las listas tradicionales.
  • 7. Listas Enlazadas • Las listas enlazadas deben contar con por lo menos tres elementos: • Estructura especial para almacenar el contenido de los elementos. • Un apuntador al primer elemento de la lista llamado cabecera. • Un medio para detectar el último elemento de la lista.
  • 8. Listas Enlazadas • Cada elemento de una lista enlazada tiene por lo menos dos campos: el valor y el enlace (link)
  • 9. Listas Enlazadas • El último nodo, que no cuenta con un enlace a otro elemento, se puede representar de las siguientes maneras:
  • 10. Listas vs. Listas Enlazadas
  • 11. Listas Enlazadas • La implementación de una lista enlazada dependerá del lenguaje de programación: • En lenguajes como C, C++, Pascal o Ada se utiliza un puntero como enlace. • En lenguajes como Java o C# se almacena una referencia al siguiente objeto nodo. • En otros lenguajes de programación que no soportan ninguna de estas opciones se realiza la implementación mediante arreglos.
  • 12. Procesamiento de Listas Enlazadas • Eliminación: Es más sencilla que en una lista normal, no requiere corrimientos.
  • 13. Procesamiento de Listas Enlazadas • Se debe verificar que la lista no esté vacía. • Existen dos casos particulares: • El elemento a eliminar está al principio de la lista • El elemento a eliminar está en cualquier otro lugar de la lista.
  • 14. Procesamiento de Listas Enlazadas • Inserción: También más sencilla que en una lista normal.
  • 15. Procesamiento de Listas Enlazadas • Se debe reservar el espacio de memoria para el nuevo elemento. • Al igual que la eliminación, se deben considerar dos casos: • Insertar un elemento al frente de la lista. • Insertar un elemento en cualquier otro lugar
  • 16. Procesamiento de Listas Enlazadas • Para poder recorrer una lista enlazada, necesitaremos empezar por la cabecera. • Se deben recorrer uno a uno los elementos hasta encontrar el elemento deseado. • Si no se encuentra el elemento, el recorrido termina al encontrar el valor nulo en el apuntado a la siguiente posición.
  • 17. Listas Circulares • Son similares a las listas enlazadas con la diferencia que el último elemento apunta al primero, creando un círculo. • También se les conoce como listas enlazadas circulares o listas en anillo.
  • 19. Listas Circulares vs. Listas Enlazadas • Ventajas • Cada nodo es accesible desde cualquier otro nodo de la lista. • Las operaciones de concatenación y división son más eficaces. • Desventajas: • Se pueden producir ciclos infinitos al recorrerla (utilizar bandera para cabecera).
  • 20. Listas Doblemente Enlazadas • Son una mejora de las listas enlazadas (a partir de ahora, listas simplemente enlazadas). • Permiten recorrer las listas en ambas direcciones. • Cada nodo tiene dos enlaces, uno al elemento anterior y otro al elemento siguiente.
  • 22. Procesamiento de Listas Doblemente Enlazadas • Inserción:
  • 23. Procesamiento de Listas Doblemente Enlazadas • Inserción:
  • 24. Procesamiento de Listas Doblemente Enlazadas • Eliminación:
  • 25. Pila • Es un tipo especial de lista lineal en la que la inserción y borrado de los elementos se realiza únicamente por un extremo. • El extremo utilizado se llama cima o tope (top). • Los elementos se quitan en orden inverso al orden en que entran.
  • 26. Pila • El modo de acceso a sus elementos de denomina LIFO (Last In, First Out). • En español se les conoce como UEPS (Ultimo en entrar, primero en salir) • Cuenta con operaciones básicas: apilar y desapilar.
  • 27. Pila
  • 29. Operaciones de la Pila • Push: • Operación de insertar un elemento en la pila. • También se conoce como meter, poner o apilar. • Pop: • Operación de eliminar un elemento en la pila. • También se conoce como sacar, quitar o desapilar.
  • 31. Operaciones de la Pila • Push
  • 32. Operaciones de la Pila • Push
  • 33. Operaciones de la Pila • Pop
  • 34. Operaciones de la Pila • Pop
  • 35. Utilidades de la Pila • En el área de ciencias de la computación las pilas son utilizadas para solucionar un amplia variedad de problemas. • Se utilizan en compiladores, sistemas operativos y en programas de aplicación.
  • 36. Utilidades de la Pila • Ejemplo:
  • 37. Utilidades de la Pila • Ejemplo:
  • 38. Cola • Son un tipo especial de lista lineal donde los objetos son insertados por un extremo y removidos por el otro únicamente. • Los elementos se quitan en orden inverso al orden en que entran. • El modo de acceso a sus elementos de denomina FIFO (First In, First Out). • Cuenta con operaciones básicas: encolar (Enqueue), desencolar (Dequeue) y consulta (Peek).
  • 39. Cola
  • 41. Plantillas y Genéricos •Estructuras Similares •Programación Genérica •Plantillas •Generics •Delegados y Predicados
  • 42. Estructuras Similares •Mientras más se adentra una persona en el mundo de las ciencias de la computación, más se da cuenta de que puede utilizar las mismas estructuras para resolver problemas similares.
  • 43. Estructuras Similares •Por ejemplo, una estructura lineal como la “cola” se puede aplicar para: •Manejo de procesos en el sistema operativo •Manejo del orden de atención de solicitudes en un hospital •Manejo de solicitude hechas a un Web Service
  • 44. Estructuras Similares •En todos los casos mencionados, el código es muy similar. •Debemos hacer variaciones según el tipo del “dato” que queremos almacenar en el nodo. •Esto nos obliga a tener código muy similar y repetido.
  • 45. Programación Genérica •Es un paradigma de programación centrado en los algoritmos y no en los datos. •Su postulado fundamental puede sintetizarse en una palabra: generalización.
  • 46. Programación Genérica •Se busca que los algoritmos: •Sean parametrizados al máximo •Sean expresados de una forma independiente de detalles concretos de un tipo •Sirvan a la mayor variedad posible de tipos y estructuras de datos
  • 47. Plantillas •Son uno de los aportes del lenguaje C++ al lenguaje C. •Permiten pasar “tipos de dato” como parámetros a un determinado programa •Permiten la creación de funciones, clases o estructuras genéricas
  • 48. Plantillas •Ventajas: • Generalización: Luego de generar un algoritmo no deberemos realizar modificaciones para utilizarlo con otros varios tipos de datos. • Simplicidad: Permiten un fácil mantenimiento del código
  • 49. Plantillas •Desventajas: • Precauciones: Requiere tomar algunas precauciones para evitar que el código falle con algunos tipos de datos. • El programa demora más en ser compilado.
  • 50. Plantillas • Las plantillas generan automáticamente el código de manejo para todas las clases utilizadas dentro del programa. • Este trabajo se realiza en tiempo de compilación.
  • 51. Plantillas • Algunas plantillas conocidas son: • STL: Standard Template Library proporciona implementaciones de arrays y listas genéricas. • BGL: Boost Graph Library implementa algoritmos y objetos de grafos genéricos.
  • 52. Plantillas • Normalmente el nombre del parámetro de tipo inicia con una T. • El All-in-one code framework nos sugiere utilizar PascalCasing con el prefijo T.
  • 57. Generics • .NET provee una funcionalidad similar a las plantillas, esta es llamada “Generics”. • Funciona de forma muy parecida a las plantillas con algunas diferencias.
  • 58. Generics • Principales diferencias: • El manejo genérico es realizado en tiempo de ejecución y no en tiempo de compilación. • No permite implementaciones personalizadas o parciales para algunos tipos de datos. • No permite tipos de datos default
  • 59. Generics • Principales diferencias: • El código de las plantillas siempre debe ser válido, no se pueden hacer chequeos por tipo. • No se pueden utilizar parámetros de tipo plantilla.
  • 66. Más Información • Si desean ampliar la información sobre Generics dirigirse a: • https://msdn.microsoft.com/en-us/library/ 0x6a29h6.aspx
  • 67. Delegado • Un delegado es un tipo de dato que representa un referencia a un método con una determinada lista de parámetros y tipo de retorno (firma del método). • Al instanciar un delegado, puede ser asociado a cualquier método con la misma firma y se puede ejecutar dicho método a través de la instancia del delegado.
  • 72. Expresión Lambda • Es una función anónima que puede ser usada para crear delegados. Al utilizar expresiones lambda, es posible escribir funciones locales que pueden ser pasadas como parámetros o retornadas como resultado de funciones. • Estas expresiones tienen dos segmentos, el izquierdo para declarar parámetros y el derecho con la expresión.
  • 73. Predicado • Es un delegado que representa un método que define un conjunto de criterios y determina cuando un objeto (recibido como parámetro) cumple dichos criterios. • Normalmente es utilizado en listas para realizar búsquedas dentro de sus elementos.
  • 77. Listas .NET Framework • List<T> (Clase) • .NET Framework (current version) • Representa una lista de objetos fuertemente tipados a la que se puede obtener acceso por índice. Proporciona métodos para buscar, ordenar y manipular listas. • Espacio de nombres:   System.Collections.Generic • Ensamblado:  mscorlib (en mscorlib.dll)
  • 78. Listas • Para los ejemplos presentados a continuación, estaremos apoyándonos en las siguiente sección de código:
  • 80. Listas • Para los ejemplos presentados a continuación, estaremos apoyándonos en las siguiente sección de código:
  • 81. Listas • Para los ejemplos presentados a continuación, estaremos apoyándonos en las siguiente sección de código:
  • 82. Listas (búsqueda y eliminación)
  • 84. Listas • Para los ejemplos presentados a continuación, estaremos apoyándonos en las siguiente sección de código, la cual se agrega a la clase Carro:
  • 86. Listas (ejemplo Python) • Para los ejemplos presentados a continuación, estaremos apoyándonos en las siguiente sección de código:
  • 88. Listas Enlazadas .NET Framework • LinkedList<T> Clase • .NET Framework (current version) • Representa una lista doblemente enlazada. • Espacio de nombres:   System.Collections.Generic • Ensamblado:  System (in System.dll)
  • 91. Pilas .NET Framework • Stack<T> (Clase) • .NET Framework (current version)  • Representa una colección último en entrar, primero en salir (LIFO) de tamaño variable con instancias del mismo tipo especificado. • Espacio de nombres:   System.Collections.Generic • Ensamblado:  System (en System.dll)
  • 92. Pilas
  • 93. Pilas (Python) • Append: Se utiliza como operación equivalente a push. • Pop: Es la operación desapilar a la que estamos acostumbrados.
  • 94. Colas .NET Framework • Queue<T> (Clase) • .NET Framework (current version) • Representa una colección de objetos de tipo primero en entrar, primero en salir. • Espacio de nombres:   System.Collections.Generic • Ensamblado:  System (en System.dll)
  • 95. Colas
  • 96. Colas (Python) • Append: Se utiliza como operación equivalente a encolar. • Popleft: Se utiliza como la operación desencolar.