Proyecto estructura

54
UNIVERSIDAD TECNICA DE MANABI PARALELO- EL CARMEN FACULTAD: INGENIERIA EN SISTEMAS

Transcript of Proyecto estructura

UNIVERSIDAD TECNICA DE MANABIPARALELO- EL CARMEN

FACULTAD:INGENIERIA EN SISTEMAS

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

ESTRUCTURA DE DATOS

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:

INSERCION UN ELEMENTO EN LA ÚLTIMA POSICIÓN DE UNA LISTA

EJEMPLO:

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

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).

GRAFICO DE ARBOL

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.

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.

Borrar un nodo con dos subárboles hijo

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.

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.

A

B

ROTACION SIMPLE A LA IZQUIERDA

A

t

u

B

v

u

t

v

A

u

t

vA

u

t

v

ROTACION SIMPLE A LA DERECHA

w

B

2

B

1

t

v

A

u

B

2

B

1

w

t

A

u

v

ROTACION DOBLE IZQUIERDA - DERECHA

BA2

A

1

B

w

vt

u

ROTACION DOBLE DERECHA - IZQUIERDA

GRACIAS