Proyecto estructura
Transcript of Proyecto estructura
FACILITADOR:ING: ROCIO MENDOZA
FACULTAD:4TO SISTEMAS
ESTUDIANTES:oMERLY ZAMBRANO PALACIOSoMERCY ZAMBRANO VERA
ESTRUCTURA DE DATOS
TEMA:
LISTAS ABIERTASLISTAS CIRCULARESPILASCOLASMEMORIA ESTATICAMEMORIA DINAMICAARBOLTIPOS DE NODOSTIPOS DE RECORRIDOSARBOLES BINARIOSBALANCE DE ARBOL
LISTAS ABIERTASLa forma más simple de estructura dinámica es la lista abierta. En esta forma los nodos se organizan de modo que cada uno apunta al siguiente, y el último no apunta a nada, es decir, el puntero del nodo siguiente vale NULL.
INSERCIONInsertar un elemento en una lista vacía.Este es, evidentemente, el caso más sencillo. Partiremos de que ya tenemos el nodo a insertar y, por supuesto un puntero que apunte a él, además el puntero a la lista valdrá NULL:
LISTAS CIRCULARESUna lista circular es una lineal, en la que el ultimo elemento enlaza con el primero. Entonces es posible acceder a cualquier elemento de la lista desde cualquier punto dado. Las operaciones sobre una lista circular resultan mas sencillas, ya que se evitan casos especiales.Cuando recorremos una lista circular, diremos que hemos llegado al final de la misma, cuando nos encontramos de nuevo en el punto de partida; suponiendo, desde luego, que el punto de partida se guarda de alguna manera en la lista, por ejemploCon un puntero fijo al mismo.Otra posible solución al problema anterior sería poner en cada lista circular, un elemento especial identificable como lugar de parada. Este elemento especial recibe el nombre de elemento de cabecera de la lista. Esto presenta la ventaja de que la lista circular no estará nunca vacía.Una lista circular con un puntero al último elemento, es equivalentemente a una lista lineal recta con dos punteros, una al principio y otra al final
+2
+ 3 1 0 + 1 3 0
+++4+
+ 0 4 0 - 0 0 1
00 +4 -1 0
Listas CircularComo ejemplo de utilización de listas circulares, realizaremos la suma de ecuaciones algebraicas o polinómicas de las variables x, y, z.. Por ejemplo:
2x³y + 4xy³- y⁴ más 2xy³-xy
Cada polinomio será representado como una lista en la que cada elemento representa un término nulo, como se indica a continuación:
± A B C SIGUIENTE
COEFICIENTE
FUNCIONES
1.Leer PolinomioLeer_ polinomio(&polP);Leer_ polinomio(&polQ);2. InicializarInicializar(&polP);Inicializar(&polQ);3. CompararComparar(&polP ,&polQ);4. Eliminar TérminosEliminar_Término(PolQ);5. Escribir Polinomios Escribir_polinomio(polQ);
PILASUna pila cuenta con 2 operaciones imprescindibles, apilar y desapilar, a las que en las implementaciones modernas de las pilas se suelen añadir mas de uso habitual
CREAR: Se crea la pila vacíaAPILAR: Se añade un elemento a la pila (push)DESAPILAR: Se elimina el elemento frontal de la pila(pop)CIMA: Devuelve el elemento que esta en la cima de la pila(top o peek)VACIA: Devuelve cierto si la pila esta vacía o falso en caso contrario
co
las
La particularidad de una estructura de datos de cola es el hecho de que sólo podemos acceder al primer y al último elemento de la estructura. Así mismo, los elementos sólo se pueden eliminar por el principio y sólo se pueden añadir por el final de la cola.Ejemplos de colas en la vida real serían: personas comprando en un supermercado, esperando para entrar a ver un partido de béisbol, esperando en el cine para ver una película, una pequeña peluquería, etc. La idea esencial es que son todos líneas de espera.
15 20 9 18 19
15 20 9 18 19 13
20 9 18 19 13
1.- Ejemplo de la cola
2.-vamos a insertar el 13 en la cola
3.-Sacamos al frente de la cola
#ifndef COLA #define COLA // Define la cola template <class T> class Cola{ private: struct Nodo{ T elemento; struct Nodo* siguiente; // coloca el nodo en la segunda posición }* primero; struct Nodo* ultimo; unsigned int elementos; public: Cola(){ elementos = 0; } ~Cola(){ while (elementos != 0) pop(); } void push(const T& elem){ Nodo* aux = new Nodo; aux->elemento = elem; if (elementos == 0) primero = aux; else ultimo->siguiente = aux; ultimo = aux; ++elementos; } void pop(){ Nodo* aux = primero; primero = primero->siguiente; delete aux; --elementos; } T consultar() const{ return primero ->elemento; } bool vacia() const{ return elementos == 0; } unsigned int size() const{ return elementos; } }; #endif
COLAS
GRAFICO DE LISTAS ENLAZADAS
MEMORIA ESTATICA
Es la forma más fácil de almacenar
el contenido de una variable
Para que un objeto puedaser almacenado en memoria estática su tamaño ( numerode Bytes necesario para su almacenamiento)ha de ser conocido en tiempo de compilación
La asignaciocion dememoria puede hacerseen tiempo de compilacióny los objetos están vigentesdesde que comienza la ejecucion del programa hastaque termina
ALMACENAMIENTO
ASIGNACION
MANEJO DE MEMORIADINAMICA
Es aquella que se reserva en tiempo de ejecución después de
leer los datos y de conocer el tamaño exacto del problema a
resolver.
ALMACENAMIENTO
ASIGNACION
a medida que el proceso va necesitando espacio
para más líneas, va solicitando más memoria al sistema operativo para
guardarlas.
Primer ajusteMejor ajustePeor ajuste
LIBERACION DE MEMORIADINAMICA
EL espacio de memoria se va llenando con diferentes “representando colores”, también pueden destruirse alguno de ellos, dejando “huecos” en el espacio de memoria, cuándo ya no quede espacio disponible o cuando decida la memoria
“compacta”, colocando todos los objetos que se están usando al principio y consolidando todos los huecos de memoria al final quedando una gran área de
memoria disponible para la creación de objetos
20
14
8
4
20
14
8
4
20
8
68
4
208
68
4
MEMORIA ESTATICA
VENTAJAS
Memoria fija, asignada en el momento de compilación.
Fácil y rápido de almacenar datos.
Es una sola casilla secuencial
DESVENTAJAS
En algunos casos se puede desperdiciar
memoria. En otros casos puede
ser que los datos sean mas grandes que el espacio asignado
Desperdicia espacio liberado
No se puede modificar su tamaño en la
ejecución
MEMORIA DINAMICA
VENTAJAS
No hay desperdicio de memoria.
Asigna el espacio correspondiente
Modifica el tamaño No es secuencial Utiliza un puntero
para la ejecución
DESVENTAJAS
Es más difícil de programar
Cuando tenemos un archivo mas grande que el espacio en memoria quedan inutilizados los espacios pequeños
ARBOL
• CONCEPTO
• Un árbol es una estructura de datos ampliamente usada que imita la forma de un árbol (un conjunto de nodos conectados).
DEFINICION DE NODOS:Un nodo, en informática, es un componente que forma parte de una red. En Internet, cada servidor constituye un nodo. Las computadoras que forman parte de una red también son nodos
TIPOS DE NODO
Nodo: Un nodo es la unidad sobre la que se construye el árbol y puede tener cero o más nodos hijos conectados a él.
Nodo hijo: cualquiera de los nodos apuntados por uno de los nodos del árbol. En el ejemplo, 'L' y 'M' son hijos de 'G'.
Nodo padre: nodo que contiene un puntero al nodo actual. En el ejemplo, el nodo 'A' es padre de 'B', 'C' y 'D'.
Nodo raíz: nodo que no tiene padre. Este es el nodo que usaremos para referirnos al árbol. En el ejemplo, ese nodo es el 'A'.
Nodo hoja: nodo que no tiene hijos. En el ejemplo hay varios: 'F', 'H', 'I', 'K', 'L', 'M', 'N' y 'O'.
Nodo rama: aunque esta definición apenas la usaremos, estos son los nodos que no pertenecen a ninguna de las dos categorías anteriores. En el ejemplo: 'B', 'C', 'D', 'E', 'G' y 'J'.
Existen otros conceptos que definen las características del árbol, en relación a su
tamaño:
• Orden: es el número potencial de hijos que puede tener cada elemento de árbol. De este modo, diremos que un árbol en el que cada nodo puede apuntar a otros dos es de orden dos, si puede apuntar a tres será de orden tres, etc.
• Grado: el número de hijos que tiene el elemento con más hijos dentro del árbol. En el árbol del ejemplo, el grado es tres, ya que tanto 'A' como 'D' tienen tres hijos, y no existen elementos con más de tres hijos.
• Nivel: se define para cada elemento del árbol como la distancia a la raíz, medida en nodos. El nivel de la raíz es cero y el de sus hijos uno. Así sucesivamente. En el ejemplo, el nodo 'D' tiene nivel 1, el nodo 'G' tiene nivel 2, y el nodo 'N', nivel 3.
• Altura: la altura de un árbol se define como el nivel del nodo de mayor nivel. Como cada nodo de un árbol puede considerarse a su vez como la raíz de un árbol, también podemos hablar de altura de ramas. El árbol del ejemplo tiene altura 3, la rama 'B' tiene altura 2, la rama 'G' tiene altura 1, la 'H' cero, etc.
GRAFICO DE NODOS
Eliminación de entradas en un árbol B:
Nodo interno (no hoja): Sustituirla por la siguiente (o la anterior) en el orden. Es decir, por la mayor de la rama izquierda, o la menor de la rama derecha.Nodo hoja: Eliminar la entrada de la hoja.
Casos de eliminación en nodo hoja. d = (p-1)/2 Nodo con más de d entradas: suprimir la entrada.Nodo con d entradas (el mínimo posible): reequilibrar el árbol.
3.4. Árboles B.• Eliminación en nodo con d entradas:
– Nodo hermano con más de d entradas: Se produce un proceso de préstamo de entradas:Se suprime la entrada, la entrada del padre pasa a la hoja de supresión y la vecina cede una entrada al nodo padre.
20 30 45 6235 67
70
73 82
Árbol B, p=5d= 2
• Ejemplo. Eliminar 67, 45.
39
3.4. Árboles B.• Eliminación en nodo con d entradas:
– Nodo hermano con más de d entradas: Se produce un proceso de préstamo de entradas:Se suprime la entrada, la entrada del padre pasa a la hoja de supresión y la vecina cede una entrada al nodo padre.
20 30 39 62
35 70
73 82
Árbol B, p=5d= 2
• Ejemplo. Eliminar 67, 45.
3.4. Árboles B.– Ningún hermano con más de d entradas:
Con la hoja donde se hace la supresión (d-1 entradas) más una hoja hermana (d entradas) más la entrada del padre, se crea una nueva hoja con 2d entradas.
20 30 39 62
35 70
73 82
Árbol B, p=5d= 2
• Ejemplo. Eliminar 39.
3.4. Árboles B.– Ningún hermano con más de d entradas: Con la
hoja donde se hace la supresión (d-1 entradas) más una hoja hermana (d entradas) más la entrada del padre, se crea una nueva hoja con 2d entradas.
20 30 62 70
35
73 82
Árbol B, p=5d= 2
• Ejemplo. Eliminar 39.• Ojo: Se suprime una entrada en el padre. Se debe
repetir el proceso de eliminación en el nivel superior.
3.4. Árboles B.Conclusiones
• El orden de complejidad es proporcional a la altura del árbol, ~ logp/2 n en el peor caso.
• Normalmente, el orden p del árbol se ajusta para hacer que cada nodo esté en un bloque de disco, minimizando el número de operaciones de E/S.
• Representación en memoria: mejor usar AVL.• Representación en disco: mejor usar árboles B.
Recorrido Preorden
consiste en visitar el nodo actual (visitar puede ser simplemente mostrar la clave del nodo por pantalla), y después visitar el subárbol izquierdo y una vez visitado, visitar el subárbol derecho. Es un proceso recursivo por naturaleza.
RECORRIDO INORDEN
se visita el subárbol izquierdo, el nodo actual, y después se visita el subárbol derecho.El recorrido en inorden, también llamado orden simétrico (aunque este nombre sólo cobra significado en los árboles binarios) consiste en recorrer en primer lugar A1, luego la raíz y luego cada uno de los hijos en orden simétrico.
RECORRIDO POSTORDEN
se visitan primero el subárbol izquierdo, después el subárbol derecho, y por último el nodo actual.El recorrido en postorden, también llamado orden posterior consiste en recorrer e primer lugar cada uno de los hijos en orden posterior y por último la raíz.
GRAFICO DE TIPOS DE RECORRIDOSHay tres formas de recorrido: Preorden,
orden central y postorden.Preorden: Raiz, subárbol izquierdo y subárbol derecho.Orden central: Subarbol izquierdo, raiz, subárbol derecho.Postorden: Subarbol izquierdo, subárbol derecho, raiz.
Ejemplo:Preorden: 20 - 12 - 5 - 2 - 7 - 13 - 15 - 40 - 30 - 35 - 47Orden central: 2 - 5 - 7 - 12 - 13 - 15 - 20 - 30 - 35 - 40 - 47Postorden: 2 - 7 - 5 - 15 - 13 - 12 - 35 - 30 - 47 - 40 - 20
20
12
513
72 15
40
35
47
30
ARBOLES BINARIOS
Un árbol binario de búsqueda es un tipo particular de árbol binario que presenta una estructura de datos en forma de árbol usada en informática.
INSERCIONLa inserción es similar a la búsqueda y se puede dar una solución tanto iterativa como recursiva. Si tenemos inicialmente como parámetro un árbol vacío se crea un nuevo nodo como único contenido el elemento a insertar. Si no lo está, se comprueba si el elemento dado es menor que la raíz del árbol inicial con lo que se inserta en el subárbol izquierdo y si es mayor se inserta en el subárbol derecho. De esta forma las inserciones se hacen en las hojas.
Borrado
BORRAR UN NODO SIN HIJOS Ó NODO HOJA: simplemente se borra y se establece a nulo el
apuntador de su padre.
BORRAR UN NODO CON UN SUBÁRBOL HIJO:
se borra el nodo y se asigna su subárbol hijo como subárbol de su padre.
CONCEPTO
Árbol AVL es un tipo especial de árbol binario ideado por los matemáticos rusos Adelson-Velskii y Landis. Fue el primer árbol de búsqueda binario auto-balanceable que se ideó
OPERACIONESLas operaciones básicas de un árbol AVL implican generalmente el realizar los mismos algoritmos que serían realizados en un árbol binario de búsqueda desequilibrado, pero precedido o seguido por una o más de las llamadas "rotaciones AVL".
RotacionesEl reequilibrado se produce de abajo hacia arriba sobre los nodos en los que se produce el desequilibrio. Pueden darse dos casos: rotación simple o rotación doble; a su vez ambos casos pueden ser hacia la derecha o hacia la izquierda.
ROTACIÓN SIMPLE A LA DERECHA.
ROTACIÓN DOBLE A LA DERECHA.
RO
TA
CIÓ
N D
OB
LE A
LA
IZ
QU
IER
DA
.
BALANCE DE ARBOLLas operaciones de insertar y remover claves modifican la forma del árbol.
La garantía del tiempo de acceso o (long n) ésta solamente valida a arboles balanceados.
ROTACIONES
Necesitamos operaciones para “recuperar” la forma balanceada después de inserciones y eliminaciones de elementos, aunque no cada operación causa una falta de balance en el árbol. Estas operaciones se llaman rotaciones.