2: ESTRUCTURAS
DINÁMICAS DE DATOS
Las estructuras
dinámicas de datos son estructuras que
cuya dimensión puede crecer o disminuir durante la ejecución del programa. Una estructura dinámica
de datos es una coleccione de elementos
llamados nodos. Al contrario que un array, que contiene espacio para almacenar
un número fijo de elementos, una estructura dinámica de datos se amplía y
contrae durante la ejecución del programa. Las estructuras dinámicas de datos
se pueden dividir en dos grandes grupos: Lineales:
listas enlazadas, pilas, colas No
lineales: árboles , grafos Las
estructuras dinámicas de datos son de gran utilidad para almacenar datos
del mundo real, que están cambiando constantemente. Por ejemplo si tenemos
almacenados en un array los datos de los alumnos de un curso, los cuales están
ordenados de acuerdo al promedio, para insertar un nuevo alumno seria necesario
correr cada elemento un espacio: Si en su lugar se utilizara una estructura
dinámica de datos, los nuevos datos del alumno se pueden insertar fácilmente.
Una pila es un tipo especial de lista lineal en la cual un elemento sólo puede ser añadido o eliminado por un extremo llamado cima. Esto significa que los elementos se sacan de la pila en orden inverso al que se pusieron en ella. Las dos operaciones básicas asociadas a las pilas son:
-Poner: es añadir un elemento a la pila.
-Sacar: es extraer un elemento de la pila.
Una cola es una lista en las que las supresiones se realizan solamente solamente al principio de la lista y las inserciones al final de la misma. Al igual que en el caso de las pilas, hay que prever un vector para almacenar el máximo número de elementos que puedan presentarse en el programa. A diferencia de las pilas, no basta con añadir un simple contador, tal que indique el número de elementos válidos; sino hay que prever dos índices que indiquen la posición del comienzo y del final de la cola. Si la cola no está vacía, en CABEZA está el primer elemento, y si la cola no está llena, en FIN es el lugar donde se copia el siguiente elemento que se incorpora a la misma. Las colas se usan para almacenar datos que necesitan ser procesados según el orden de llegada. En la vida real se tienen ejemplos numerosos de colas: la cola de un cine, la cola de un banco, etc; en todas ellas el primer elemento que llega es el primero que sale.
2.1 LISTAS ENLAZADAS
Listas Enlazadas Una lista enlazada es
un conjunto de elementos llamados nodos en los que cada uno de ellos contiene
un dato y también la dirección del siguiente nodo. El primer elemento de la
lista es la cabecera, que sólo contiene un puntero que señala el primer elemento de la lista. El último nodo de la lista apunta a NULL (nulo) porque no hay más nodos en la lista. Se usará el término NULL para designar el final de la
lista.
2.
Encontrar el nodo que contiene una
información específica.
3.
Insertar un nuevo nodo en un lugar
específico.
4.
Insertar un nuevo nodo en relación a una
información particular.
5.
Borrar un nodo existente.
#include <iostream.h>
#include <conio.h>
#include <stdlib.h>
#include <stdio.h>
class nodo
{int num;
nodo *sgte;
public:
nodo(){sgte=NULL;}
void apns(nodo *n);
nodo *rpns();
void ingresar();
int mostrar();
};
void nodo::apns(nodo *n)
{sgte=n;}
nodo *nodo::rpns()
{return sgte;}
void nodo::ingresar()
{cin>>num;}
int nodo::mostrar()
{return num;}
#include <conio.h>
#include <stdlib.h>
#include <stdio.h>
class nodo
{int num;
nodo *sgte;
public:
nodo(){sgte=NULL;}
void apns(nodo *n);
nodo *rpns();
void ingresar();
int mostrar();
};
void nodo::apns(nodo *n)
{sgte=n;}
nodo *nodo::rpns()
{return sgte;}
void nodo::ingresar()
{cin>>num;}
int nodo::mostrar()
{return num;}
Ø
Listas Doblemente Enlazadas
Hasta
ahora se han manejado listas que se recorren en un asola dirección. En algunas
aplicaciones es práctico o hasta indispensable poder recorrer
una lista en ambas direcciones. Para estos casos se tienen las lista doblemente
enlazadas. Esta propiedad implica
que cada nodo debe tener dos apuntadores, uno al nodo predecesor y otro al nodo
sucesor.
2.2 PILAS
Una pila es un tipo especial de lista lineal en la cual un elemento sólo puede ser añadido o eliminado por un extremo llamado cima. Esto significa que los elementos se sacan de la pila en orden inverso al que se pusieron en ella. Las dos operaciones básicas asociadas a las pilas son:
-Poner: es añadir un elemento a la pila.
-Sacar: es extraer un elemento de la pila.
La
pila es una estructura con numerosas analogías en la vida real: una pila de
platos, una pila de monedas, una pila de bandejas, etc. La representación
consiste en un vector con espacio para un máximo de elementos y un contador que
indica el número de elementos válidos almacenados en el vector.
2.3 COLAS
Una cola es una lista en las que las supresiones se realizan solamente solamente al principio de la lista y las inserciones al final de la misma. Al igual que en el caso de las pilas, hay que prever un vector para almacenar el máximo número de elementos que puedan presentarse en el programa. A diferencia de las pilas, no basta con añadir un simple contador, tal que indique el número de elementos válidos; sino hay que prever dos índices que indiquen la posición del comienzo y del final de la cola. Si la cola no está vacía, en CABEZA está el primer elemento, y si la cola no está llena, en FIN es el lugar donde se copia el siguiente elemento que se incorpora a la misma. Las colas se usan para almacenar datos que necesitan ser procesados según el orden de llegada. En la vida real se tienen ejemplos numerosos de colas: la cola de un cine, la cola de un banco, etc; en todas ellas el primer elemento que llega es el primero que sale.
2.4 ARBOLES
·
Arboles: cada elemento dispone de dos o
más punteros, pero las referencias nunca son a elementos anteriores, de modo
que la estructura se ramifica y crece igual que un árbol.
·
Arboles binarios: son árboles donde cada
nodo sólo puede apuntar a dos nodos.
·
Arboles binarios de búsqueda (ABB): son
árboles binarios ordenados. Desde cada nodo todos los nodos de una rama serán
mayores, según la norma que se haya seguido para ordenar el árbol, y los de la
otra rama serán menores.
·
Arboles AVL: son también árboles de búsqueda,
pero su estructura está más optimizada para reducir los tiempos de búsqueda.
·
Arboles B: son estructuras más
complejas, aunque también se trata de árboles de búsqueda, están mucho más
optimizados que los anteriores.
No hay comentarios:
Publicar un comentario