Este documento resume el capítulo 8 de un libro sobre informática básica. El capítulo cubre temas como estructuras de datos básicas como arreglos, listas, pilas y colas, árboles, conceptos relacionados como estructuras estáticas y dinámicas y punteros. También describe la implementación de estructuras de datos en memoria principal y presenta un pequeño caso de estudio sobre el almacenamiento de una lista de nombres en orden alfabético usando un árbol binario. Finalmente, introduce los tipos de datos personalizados y los tip
KELA Presentacion Costa Rica 2024 - evento Protégeles
Abstracciones de datos
1. IFE 115: INFORMÁTICA BÁSICA
0319199200025 Ariel Amilcar Medina
PTEG-I-12-Ariel Amilcar Medina-VISITA 2-EXPO Abstracciones de datos
Lic. Marcio Rodas
Capitulo
8
2. 8.1 Estructuras de datos básicas.
8.2 Conceptos relacionados.
8.3 Implementación de estructuras de datos.
8.4 Un pequeño caso de estudio
8.5 Tipos de datos personalizados
8.6 Clases y objetos
8.7 Punteros en el lenguaje maquina.
Capitulo
8
3. Introducción
En este capitulo vamos a explorar técnicas para la construcción y manipulación
de estructuras de datos distintas de las primitivas de un lenguaje, un análisis que
nos llevara desde las estructuras de datos tradicionales hasta el paradigma
orientado a objetos. Un tema subyacente a lo largo de toda esta progresión es la
de construcción de herramientas abstractas.
Capitulo
8
4. 8.1 Estructura de datos básicas
1.- Arrays
Es un bloque de datos “rectangular” cuyas entradas son todas del mismo tipo. En
particular, un array bidimensional esta compuesto por filas y columnas en las que las
distintas posiciones se identifican mediante una pareja de índices, el primer índice
identifica la fila asociada con la posición, mientras que el segundo índice identifica la
columna.
A diferencia de un array, recuerde que un tipo agregado o estructura es un conjunto
de datos que pueden ser de diferentes tipos. Los elementos del conjunto suele
denominar componentes o campos.
Capitulo
8
5. 2.- Listas, pilas y colas
-La lista es un conjunto cuyas entradas están ordenadas de manera secuencial. El
inicio de una lista se denomina principio de lista, el otro extremo final.
Capitulo
8
6. -Una pila es una lista en la que las entradas se insertan y se eliminan únicamente
al principio de la lista. Terminología coloquial el principio se denomina cima, el
final fondo o base. Cuando se inserta una nueva entrada se dice que se apila
(pushing), si se elimina se desapila (popping). La ultima entrada colocada en la
pila, será siempre la primera en ser extraída, se le conoce como estructura LIFO
(Last-IN, First-Out; ultimo en entrar, primero en salir). Suelen utilizarse pilas para
implementar mecanismos para deshacer actividades, se conocen como vuelta
atrás (backtracking).
Capitulo
8
2.- Listas, pilas y colas
7. Capitulo
8
• -Una cola es una lista en la que las entradas se extraen
únicamente por el principio y se insertan únicamente por el
final.
2.- Listas, pilas y colas
8. Capitulo
8
Un árbol es un conjunto cuyas entradas tienen una organización jerárquica similar a la del
organigrama de cualquier empresa. Cada posición de un árbol se denomina nodo. El nodo
situado en la parte superior es el nodo raíz. Los nodos situados en el otro extremo se
denominan nodos terminales (en ocasiones nodos hoja). Se le denomina profundidad del
árbol al numero de nodos existente en la ruta mas larga desde la raíz a una de las hojas.
Llamaremos hijos a sus descendientes inmediatos y padre a su antecesor. Nodos con un
mismo padre diremos que son hermanos. Un árbol en el que cada padre no tenga mas de
dos se denomina árbol binario.
Los nodos situados por debajo de el tiene también estructura de un árbol las llamaremos
subárbol. Cada subárbol se dice que es una rama del padre.
3.- Árboles
9. Capitulo
8
8.2 Conceptos relacionados
Otra vez la abstracción.
La memoria principal de una computadora no esta organizada como
arrays, lista, pilas colas y arboles, sino como una secuencia de celdas de
memoria direccionales. Por tanto, todos los demás tipos de estructuras
deberán se simulados. Matrices, listas, pilas, colas y arboles son
organizaciones abstractas de los datos que se crean para ocultar a ojos
de los usuarios los datos los detalles del almacenamiento real de esos
datos y para que estos usuarios puedan acceder a la información como
si esta estuviera almacenada de una forma mas conveniente.
10. Capitulo
8
Estructuras de estáticas y dinámicas.
Una diferencia importante a la hora de construir estructuras de
abstractas es si la estructura que se esta simulando es estática o
dinámica; es decir, si la forma o el tamaño de la estructura varia a lo
largo del tiempo.
Como regla general, las estructuras de datos estáticas se manipulan mas
fácilmente que las dinámicas. Si una estructura es estática, simplemente
necesitamos proporcionar un medio para acceder a los distintos
elementos de datos de la estructura, y quizá también un medio de
modificar los valores almacenados en ciertas ubicaciones.
11. Capitulo
8
Punteros
Un puntero es un área de almacenamiento que contiene una
de esas direcciones codificadas. En el caso de las estructuras
de datos, se utilizan punteros para anotar la ubicación en la
que están almacenados los campos de datos. Al contador de
programa se le denomina también en ocasiones puntero de
instrucciones.
12. Capitulo
8
8.3 Implementación de estructuras de datos.
Maneras en las que pueden almacenarse en la memoria principal de una
computadora una estructura de datos de las que hemos hablado en la sección
anterior.
*Almacenamiento de arrays: -Matrices
-Estructuras
*Almacenamiento de lista.
*Almacenamiento de pilas y colas.
*Almacenamiento de arboles binarios.
*Manipulación de Estructuras de datos.
20. 8.4 Un pequeño caso de estudio.
Vamos a considerar la tarea de almacenar una lista de nombres en orden alfabético. Vamos a
asumir que las operaciones que hay que realizar con esta lista son las siguientes:
-Buscar si existe una cierta entrada.
-Imprimir la lista en orden alfabético e
-Insertar una nueva entrada.
Para efectuar búsquedas en la lista teniéndola almacenada de esta manera comparamos el
valor buscado con el nodo raíz. Si los dos son iguales, la búsqueda habrá tenido éxito. Si son
distintitos, nos moveremos al hijo izquierdo o al hijo derecho de la raíz dependiendo de si el
valor buscado es menor o mayor que la raíz, respectivamente.
Capitulo
8
21. La Figura 8.21 muestra como podría expresarse este proceso de
búsqueda en el caso de una estructura de árbol enlazado.
Capitulo
8
22. Capitulo
8
Este esbozo incluye las tareas de
imprimir el subárbol izquierdo y el
subárbol derecho en orden
alfabético, siendo ambas tareas
básicamente versiones reducidas de
la tarea origina.
23. Capitulo
8
Podemos concluir que un paquete
software compuesto por una
estructura de árbol binario enlazado y
por nuestros procedimientos para
buscar, imprimir e insertar
proporciona un paquete completo
que una hipotética aplicación podría
utilizar como herramienta abstracta.
24. 8.5 Tipos de datos personalizados.
Vamos a ver de que manera pueden los programadores definir sus propios tipos de datos,
para ajustarse, mejor a las necesidades de una aplicación concreta.
Tipo de datos definidos por el usuario.
Expresar un algoritmo suele ser mas fácil si hay disponibles tipos de datos distintos que los
proporcionados como primitivos en los lenguajes de programación. Por esta razón, muchos
lenguajes de programación modernos permiten a los programadores definir tipos
adicionales, utilizando los tipos primitivos como componentes básicos.
Para implementa esta idea, podríamos utilizar una instrucción de pseudo-código de la
forma:
Capitulo
8
25. Tipos abstractos de datos
Aunque el concepto de tipo de datos definido por el usuario es muy útil, no termina de
resolver completamente la necesidad de creación de nuevos tipos de datos. Un tipo de
datos completo esta compuesto por dos partes:
1) Un sistema de almacenamiento predeterminado (como un sistema en complemento a
dos en el caso del tipo entero y un sistema de punto flotante en el caso del tipo real)
2) Una colección de operaciones predefinidas (como la suma y la resta)
Si un programador declara una variable como de tipo primitivo, puede comenzar a aplicar
de inmediato operaciones primitivas a esa variable, sin necesidad de efectuar definiciones
adicionales.
Los tipos de datos definidos por el usuario que incluyen también definiciones de
operaciones se denominan tipos abstractos de datos.
Capitulo
8