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

PDF
8b Curso de POO en java - paso de diagrama clases a java 1
PPTX
Estructura de datos: lista, pilas y colas
PDF
Estructuras de control
DOCX
ESTRUCTURAS ANIDADAS
PPTX
Programación 3: colas
DOCX
Taller modelo entidad relacion
PDF
Analizador Léxico en C++
PPT
Reglas de transformación
8b Curso de POO en java - paso de diagrama clases a java 1
Estructura de datos: lista, pilas y colas
Estructuras de control
ESTRUCTURAS ANIDADAS
Programación 3: colas
Taller modelo entidad relacion
Analizador Léxico en C++
Reglas de transformación

La actualidad más candente (20)

PPTX
Colas en programacion
DOCX
Unidad 6 Protección y seguridad.
PPTX
Estructura de Datos - Unidad 5 metodos de ordenamiento
PPTX
Bitácora de base de datos
PPTX
Pilas, colas, y listas estructura de datos
PPT
Fundamentos de POO
DOCX
Metodos de-ordenamiento
PDF
METODOS Y MODELOS POO
PDF
5. Ejercicios normalización
PPT
Arboles Binarios
PDF
Portafolio unidad 2 [Lenguajes y autómatas]- Expresiones y lenguajes regulares
PDF
Clases y objetos de java
PDF
Reporte metodos de busqueda y ordenamiento
PPTX
Programación Orientada a Objetos - atributos y métodos
PPTX
Listas,pilas y colas Estructura de Datos
PPT
Tablas hash en java
PPT
Ejercicios
PPTX
Programación 3: listas enlazadas
PPS
Pilas y colas
PDF
Programacion en WinCupl
Colas en programacion
Unidad 6 Protección y seguridad.
Estructura de Datos - Unidad 5 metodos de ordenamiento
Bitácora de base de datos
Pilas, colas, y listas estructura de datos
Fundamentos de POO
Metodos de-ordenamiento
METODOS Y MODELOS POO
5. Ejercicios normalización
Arboles Binarios
Portafolio unidad 2 [Lenguajes y autómatas]- Expresiones y lenguajes regulares
Clases y objetos de java
Reporte metodos de busqueda y ordenamiento
Programación Orientada a Objetos - atributos y métodos
Listas,pilas y colas Estructura de Datos
Tablas hash en java
Ejercicios
Programación 3: listas enlazadas
Pilas y colas
Programacion en WinCupl
Publicidad

Similar a Estructuras de datos lineales (20)

PPTX
Clasificación de las estructuras de datos .pptx
PPTX
Tipos de estructuras de datos en la asignatura de analisis y diseño
PPTX
Centro de estudios_tecnologicos_industrial_y_de_servicios
PPTX
Centro de estudios_tecnologicos_industrial_y_de_servicios
PPTX
Pilas y colas
PPTX
Estructura de Datos - Unidad III Estructuras Lineales
PPTX
Lista,pilas y columnas
PPTX
1- Introduccion- clasificacindelasestructurasdedatos.pptx
PPTX
Presentación1
PPTX
PPTX
Listas pilascolas edward.mejia-10-1314
PDF
Presentación estructuras de datos en python.pdf
PPTX
Pilas y colas-2024kuiuiui-apsti (2).pptx
PDF
DECLARACION DE LISTAS 1.pdf
PPTX
Trabajo de estructura de datos
PPTX
Trabajo de estructura de datos
PPTX
Presentación1
PPTX
Presentaciones base de datos , fundamentos de base de datos
PPTX
Material adicional c sharp
Clasificación de las estructuras de datos .pptx
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_servicios
Pilas y colas
Estructura de Datos - Unidad III Estructuras Lineales
Lista,pilas y columnas
1- Introduccion- clasificacindelasestructurasdedatos.pptx
Presentación1
Listas pilascolas edward.mejia-10-1314
Presentación estructuras de datos en python.pdf
Pilas y colas-2024kuiuiui-apsti (2).pptx
DECLARACION DE LISTAS 1.pdf
Trabajo de estructura de datos
Trabajo de estructura de datos
Presentación1
Presentaciones base de datos , fundamentos de base de datos
Material adicional c sharp
Publicidad

Más de Alvaro Enrique Ruano (17)

PDF
Resumen caso Enron
PDF
Otras estructuras de datos (heap, tablas hash y diccionarios)
PDF
Árboles Multicamino, B y B+
PDF
Árboles binarios, ABB y AVL
PDF
Introducción al análisis de algoritmos
PPTX
Ordenamientos rápido y mezcla
PPTX
Ordenamientos por selección y Shell
PPTX
Búsqueda secuencial y binaria
PPTX
Recursividad directa e indirecta
PPTX
Programación Orientada a Objetos - constructores y destructores
PPTX
Ordenamientos burbuja e inserción
PPTX
Programación Orientada a Objetos - Otras relaciones entre clases
PPTX
Programación Orientada a Objetos - herencia y polimorfismo
PPTX
Paradigmas de programación
PPTX
Técnicas de programación
DOCX
Análisis de una inversión en activos financieros negociados por medio de la B...
PPTX
Solución de problemas y ciclo de vida del desarrollo de software
Resumen caso Enron
Otras estructuras de datos (heap, tablas hash y diccionarios)
Árboles Multicamino, B y B+
Árboles binarios, ABB y AVL
Introducción al análisis de algoritmos
Ordenamientos rápido y mezcla
Ordenamientos por selección y Shell
Búsqueda secuencial y binaria
Recursividad directa e indirecta
Programación Orientada a Objetos - constructores y destructores
Ordenamientos burbuja e inserción
Programación Orientada a Objetos - Otras relaciones entre clases
Programación Orientada a Objetos - herencia y polimorfismo
Paradigmas de programación
Técnicas de programación
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

Último (9)

PPTX
Implementación equipo monitor12.08.25.pptx
PPTX
Control de seguridad en los sitios web.pptx
PPTX
PROPIEDADES Y METODOS DE PrOO CON PYTHON
PPTX
ORIGEN DE LA IA - GRADO 1102 INTELIGENCIA
PDF
Presentacion de compiladores e interpretes
PPTX
presentación de introducción a las metodologías agiles .pptx
PPTX
hojas_de_calculo_aplicado para microsoft office
PDF
Clase 3 - Presentación visual (Insertando objetos visuales) POWER POINT.pdf
PDF
DNS_SERVIDORES PARA ASER PRACTICAS EN REDES
Implementación equipo monitor12.08.25.pptx
Control de seguridad en los sitios web.pptx
PROPIEDADES Y METODOS DE PrOO CON PYTHON
ORIGEN DE LA IA - GRADO 1102 INTELIGENCIA
Presentacion de compiladores e interpretes
presentación de introducción a las metodologías agiles .pptx
hojas_de_calculo_aplicado para microsoft office
Clase 3 - Presentación visual (Insertando objetos visuales) POWER POINT.pdf
DNS_SERVIDORES PARA ASER PRACTICAS EN REDES

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.