Vous êtes sur la page 1sur 9

Estructura de Datos Dinámicas

No tienen las limitaciones o restricciones en el tamaño de memoria


ocupada que son propias de las estructuras estáticas.

Mediante el uso de un tipo de datos especifico, denominado puntero,


es posible construir estructuras de datos dinámicas que no son
soportadas por la mayoría de los lenguajes, pero que en aquellos que si
tienen estas características ofrecen soluciones eficaces y efectivas en la
solución de problemas complejos.

Se caracteriza por el hecho de que con un nombre se hace referencia


a un grupo de casillas de memoria.

Es decir un dato estructurado tiene varios componentes.

CLASIFICACIÓN DE LAS ESTRUCTURAS DE DATOS:


ESTRUCTURAS DE DATOS ESTÁTICAS
1.- Simples o primíticas
a) Boolean
b) Char
c) Integer
d) Real
2.- Compuestas
a) Arreglos
b) Conjuntos
c) Strings
d) Registros
e) Archivos
ESTRUCTURA DE DATOS DINÁMICAS
1.- Lineales
a) Pila
b) Cola
c) Lista
2.- No lineales
a) Árboles
b) Grafos
PUNTERO

Un puntero es un objeto del lenguaje de programación, cuyo valor se


refiere a (o "apunta a") otro valor almacenado en otra parte de la
memoria del ordenador utilizando su dirección. Un puntero referencia a
una ubicación en memoria, y a la obtención del valor almacenado en
esa ubicación se la conoce como desreferenciación del puntero. A
modo de analogía, un número de página en el índice de un libro podría
considerarse un puntero a la página correspondiente; desreferenciar un
puntero sería como voltear a la página con el número de página
determinada.

[ Memoria ]
| · |
| · |
| · |
+---+ |---------|
| p |---->| v |
+---+ |---------|
| · |
| · |
| · |

Los punteros a datos mejoran significativamente el rendimiento de las


operaciones repetitivas tales como cadenas de desplazamiento, tablas
de búsqueda, tablas de control y estructuras árbol. En particular,
muchas veces es mucho más barato en tiempo y espacio copiar y des
referenciar punteros que copiar y acceder a los datos a los cuales
apunta el puntero.

Los punteros también se utilizan para mantener las direcciones de los


puntos de entrada para las subrutinas para llamadas en programación
por procedimientos y enlaces para vincular a las bibliotecas de enlace
dinámico (DLL) en tiempo de ejecución. En la programación orientada
a objetos, los punteros a funciones se utilizan para métodos de unión,
muchas veces utilizando lo que se llama tablas de métodos virtuales.

Un puntero es una implementación más concreta y simple del tipo de


datos de referencia más abstracto. Varios lenguajes soportan algún tipo
de puntero, aunque algunos tengan más restricciones en su uso que
otros. Mientras que se utilice un "puntero" para referirse a referencias en
general, se aplica más propiamente a las estructuras de datos cuya
interfaz permita explícitamente que el puntero sea manipulado
(aritméticamente vía aritmética de punteros) como una dirección de
memoria, en oposición a una cookie u opción dónde esto no sea
posible.[cita requerida] Debido a que los punteros permiten tanto proteger
como permitir el acceso a direcciones de memoria, hay riesgos
asociados con su uso, sobre todo en este último caso. Generalmente, los
punteros primitivas son almacenados en un formato similar a un entero;
no obstante, intentar eliminar la referencia o "mirar hacia arriba" hacia
un puntero cuyo valor no fue nunca una dirección de memoria válida
conllevaría provocar que un programa se bloquee. Para aliviar este
potencial problema, como una cuestión de seguridad de tipos, los
punteros son considerados un tipo separado parametrizado por un tipo
de datos que apuntan a, incluso si la representación subyacente es un
número entero. También se pueden tomar otras medidas (como la
validación y comprobación de los límites, para verificar el contenido de
la variable de puntero contenga un valor que es a la vez una dirección
de memoria válida y dentro del rango numérico que el procesador sea
capaz de abordar).
LISTAS

Las listas son una sucesión de cero o más elementos.

Esta es una definición muy simple y que no aclara demasiado en


términos informáticos, así que profundizaremos un poco más.

Hay varios tipos de listas, las hay enlazadas, no enlazadas, ordenadas y


no ordenadas. Nosotros vamos a estudiar las listas enlazadas, tanto
ordenadas como no ordenadas. La diferencia que existe entre las listas
enlazadas y las no enlazadas es que las enlazadas utilizan punteros, es
decir, asignación dinámica de memoria, lo que optimiza la gestión de la
misma. Una lista no enlazada es un simple array, y por lo tanto es un
bloque contiguo de memoria, mientras que una lista enlazada es un
conjunto de nodos que no tienen por qué ocupar posiciones contiguas
de memoria.

La diferencia entre listas ordenadas y no ordenadas es obvia, las


ordenadas mantienen cierto orden entre sus elementos. A partir de
ahora nos centraremos en las listas enlazadas no ordenadas. Una lista es
una sucesión de nodos en la que a partir de un nodo se puede acceder
al que ocupa la siguiente posición en la lista. Esta característica nos
indica que el acceso a las listas es secuencial y no indexado, por lo que
para acceder al último elemento de la lista hay que recorrer los n-1
elementos previos ( n es el tamaño de la lista).

Para que un nodo pueda acceder al siguiente y la lista no se rompa en


varias listas cada nodo tiene que tener un puntero que guarde la
dirección de memoria que ocupa el siguiente elemento. De esta forma
un nodo se podría representar esquemáticamente así:

En el campo información se almacena el objeto a guardar y el puntero


mantendrá la conexión con el nodo siguiente. De esta forma al ir
añadiendo nodos se iría formando una sucesión de nodos
encadenados mediante punteros.
COLAS

Las colas son unas listas con una política especial de inserción y de
eliminación de elementos, por ello, si aún no tienes claro el concepto de
listas te recomiendo visitar su página.

Las colas están formadas por nodos de la misma forma que las listas. Los
nodos de las colas también están enlazados entre sí como las listas. Las
colas no guardan ningún orden, como tampoco lo guardan las listas no
ordenadas. ¿Qué es entonces lo que diferencia a una lista de una
cola?. Pues lo que diferencia estas dos estructuras de datos es la forma
de añadir y de eliminar elementos de una cola.

Una cola es una estructura de datos FIFO, acrónimo de First In First Out, o
lo que es lo mismo, el primero en entrar es el primero en salir. Esto implica
que en las colas siempre se inserta elementos por el final ( cola) y
siempre se extraen elementos por el principio( cabeza).

Los ejemplos típicos de colas son las colas de personas para, por
ejemplo, compra de entradas. En esta cola humana el primero en llegar
es el primero en marcharse. Pues así se comportan las colas
informáticas.

Operaciones básicas de las colas

Pues en las colas como en toda estructura de datos las operaciones


principales son insertar y eliminar, aunque en varias implementaciones
de colas puedan recibir nombres diferentes.

Insertar

La inserción en las colas se realiza por la cola de las mismas, es decir, se


inserta al final de la estructura.

Para llevar a cabo esta operación únicamente hay que reestructurar un


par de punteros, el último nodo debe pasar a apuntar al nuevo nodo
(que pasará a ser el último) y el nuevo nodo pasa a ser la nueva cola de
la cola.

Vamos a verlo gráficamente sobre la siguiente cola:

Si a esta cola le añadimos el elemento 0, la cola resultante sería:


Borrar

El borrado es una operación muy simple en las colas. Esta operación


supone extraer la cabeza de la cola, ya que es el elemento que más
tiempo lleva en la estructura. Para llevar a cabo esta operación
únicamente hay que extraer el elemento situado en la cabeza de la
cola y avanzar el puntero cabeza una posición, para que de esta forma
la nueva cabeza sea el segundo elemento que más tiempo lleva en la
cola.

Si realizamos la operación eliminar sobre la colas de 4 elementos del


último gráfico el resultado sería el siguiente:

Una diferencia importante entre las colas y las listas, es que en las colas
no se puede borrar un elemento cualquiera, se borra siempre el que
está en la cabeza de la cola.
PILAS

Las pilas son listas con una política de inserción y borrado de elementos
especial, por esta razón si no tienes claro el concepto de lista, visita su
página.

Como en el caso de las colas, las pilas se diferencian de las listas en la


forma de insertar y de eliminar los elementos. Las pilas son estructuras de
datos LIFO, Last In Fisrt Out ( último en entrar, primero en salir). Esto quiere
decir que en una pila siempre se extrae el elemento que menos tiempo
lleva en la estructura.

Como ejemplos de pilas se puede citar algunos de los más típicos, como
la pila de platos, donde para añadir un nuevo plato se coloca en la
cima y para quitar uno de la pila se coge el de la cima también. Otro
ejemplo es el de la vía de tren muerta a la que van llegando vagones,
el primero en salir (volver hacia atrás) siempre tiene que ser el último que
ha llegado.

Operaciones básicas de las pilas

Vamos a estudiar las principales operaciones a realizar sobre una pila,


insertar y borrar.

Insertar

En primer lugar hay que decir que esta operación es muy comúnmente
denominada push.

La inserción en una pila se realiza en su cima, considerando la cima


como el último elemento insertado. Esta es una de las particularidades
de las pilas, mientras el resto de estructuras de datos lineales se
representan gráficamente en horizontal, las pilas se representan
verticalmente. Por esta razón es por lo que se habla de cima de la pila y
no de cola de la cima. Aunque en el fondo sea lo mismo, el último
elemento de la estructura de datos. Las operaciones a realizar para
realizar la inserción en la pila son muy simples, hacer que el nuevo nodo
apunte a la cima anterior, y definir el nuevo nodo como cima de la pila.

Vamos a ver un ejemplo de una inserción:


Al insertar sobre esta pila el elemento 0, la pila resultante sería:

Borrar

Esta operación es normalmente conocida como pop.

Cuando se elimina un elemento de la pila, el elemento que se borra es


el elemento situado en la cima de la pila, el que menos tiempo lleva en
la estructura.

Las operaciones a realizar son muy simples, avanzar el puntero que


apunta a la cima y extraer la cima anterior.

Si aplicamos la operación pop a la pila de 4 elementos representada


arriba el resultado sería:
ARBOLES

Un árbol es una colección de nodos que puede estar vacía o no. Si no


está vacía, el árbol estará formado por un nodo raíz y cero o más
(sub)árboles que están unidos a la raíz por otras tantas aristas.

Para que un árbol sea binario es requisito indispensable el que el número


máximo de hijos que tenga cada nodo sea 2. Por lo tanto el árbol
anterior no es un árbol binario, ya que el nodo A tiene 3 hijos.

Por último, un árbol será de búsqueda si todos sus nodos cumplen las
siguientes condiciones:

1. Todos los nodos situados a su izquierda son menores que él.


2. Todos los nodos situados a su derecha son mayores que él.

Resumiendo, se puede decir que un árbol binario de búsqueda es un


árbol en el que cada nodo tiene a lo sumo dos hijos, y en el que para
cada nodo todos los nodos a su izquierda son menores que él y todos los
nodos a su derecha son mayores que él.

El siguiente árbol es un ejemplo de árbol de búsqueda:

En cambio este árbol viola la condición de orden en el nodo 2, ya que


un nodo a su derecha, 1, no es mayor que él.

Vous aimerez peut-être aussi