estructura de datos en c++

52
Estructura de Datos En C++ Dr. Romeo Sánchez Nigenda. E-mail: [email protected] http: //yalma.fime.uanl.mx/~ romeo / Oficina: 1er. Piso del CIDET. Oficina con Dr. Oscar Chacón Horas de Tutoría: 10am-11am Martes y Jueves, 3:30pm-4:30pm Miércoles, 2:00pm-4:00pm Viernes. Website: http://yalma.fime.uanl.mx/~romeo/ED/2011/ Sesiones: 48

Upload: oakley

Post on 16-Feb-2016

59 views

Category:

Documents


0 download

DESCRIPTION

Estructura de Datos En C++. Dr. Romeo S ánchez Nigenda . E-mail: romeo.sanchez @ gmail.com http: //yalma.fime.uanl.mx/~ romeo / Oficina: 1er. Piso del CIDET. Oficina con Dr. Oscar Chacón Horas de Tutoría: 10am-11am Martes y Jueves, 3:30pm-4:30pm Miércoles, 2:00pm-4:00pm Viernes. - PowerPoint PPT Presentation

TRANSCRIPT

Estructura de Datos

Estructura de Datos En C++Dr. Romeo Snchez Nigenda.E-mail: [email protected]://yalma.fime.uanl.mx/~romeo/Oficina: 1er. Piso del CIDET. Oficina con Dr. Oscar ChacnHoras de Tutora: 10am-11am Martes y Jueves, 3:30pm-4:30pm Mircoles, 2:00pm-4:00pm Viernes.

Website: http://yalma.fime.uanl.mx/~romeo/ED/2011/Sesiones: 48

Material de apoyo:Estructura de Datos con C y C++. Yedidyah Langsam, Moshe J. Augenstein, Aaron M. Tenenbaum, Brooklyn CollegeSegunda Edicin, Prentice-Hall.

Algorithms. Third Edition.Parts 1-4, Fundamentals Data Structures Sorting SearchingRobert Sedgewick.

Estructura de Datos. Romn Martnez, Elda Quiroga.Thomson Learning.

Cualquier libro de Estructura de Datos!Software:Compiladores GCC (GNU Compiler Collection)

IDEs (Integrated Development Environment):http://www.eclipse.org/downloads/http://kdevelop.org/ http://www.bloodshed.net/devcpp.html

6. rbolesObjetivo: El alumno entender y aprender las estructuras de datos no lineales y dinmicas ms importantes en computacin.

Temario: rboles en generalrboles binariosrboles balanceadosrboles multicaminos

rbolesEn Informtica, los rboles son abstracciones matemticas que juegan un rol central en el diseo y anlisis de algoritmos, porque: Los usamos para describir propiedades dinmicas de los algoritmosConstruimos estructuras de datos que son realizaciones concretas de rboles.

Podemos concluir que un rbol es entonces una estructura de datos que mantiene un conjunto de nodos conectados (imitando la forma de un rbol).

Encontramos muchos ejemplos de rboles en nuestra vida diaria:Organizacin de torneos deportivosrboles familiares (ascendientes y descendientes)Organigramas de corporaciones Procesamiento de lenguaje naturalOrganizacin de sistemas de archivos (directorios y archivos)4rbolesExisten diferentes tipos de rboles:rboles en generalrboles binarios (AVL, Rojo-Negro, AA)rboles balanceadosrboles multi-caminos (B, B+, B*)

En general un rbol es un conjunto de vrtices y aristas que satisfacen ciertos requisitos. Un vrtice es un objeto simple, tambin denominado nodo, que contiene informacin. Una arista (o arco) es una conexin entre dos vrticesUn camino (o ruta) en un rbol es una lista de vrtices distintos, en los que cada uno de ellos se encuentran conectados sucesivamente por aristas en el rbol.

La propiedad definitoria de un rbol es que existe solamente un camino o ruta conectando un par de nodos. Si hay ms de un camino entre dos nodos, o si no hay un camino entre un par de nodos, entonces lo que tenemos es un Grafo.5rboles: TerminologaUn nodo por lo tanto, es la unidad sobre la que se construye el rbol, y puede tener cero o ms nodos hijos conectados a l (por medio de aristas) esta propiedad se le denomina grado.

Se dice que un nodo a es padre de un nodo b (o b es hijo de a) si existe un enlace desde a hasta b.

Un rbol solo puede tener un nico nodo sin padres, al cual se le denomina raz. En un rbol con raz, cualquier nodo es la raz de un subrbol, el cual consiste de s mismo y de los nodos descendientes de l

Un nodo que no tiene hijos se le denomina hoja o terminal.

El resto de los nodos se les conoce como rama, ya que tienen padre y uno o varios hijos.6rbolesEn computacin, usualmente se usa el trmino rbol para referirse a un rbol con raz. Mientras que se asume el trmino rbol libre para referirse a la estructura ms general.

Las aristas en un rbol no tienen direccin, usualmente se menciona que se encuentran apuntando hacia la raz o fuera de ella. Y usualmente se coloca a la raz en la cima del rbol.

Un rbol ordenado es un rbol con raz en el cual el orden de los nodos descendientes (hijos) sigue un patrn determinado

Si cada nodo debe tener un nmero determinado de hijos en un orden especfico, entonces tenemos un rbol de M-aristas. El rbol de M-aristas ms simple es el rbol binario.

7rboles: Definicin GeneralCaso base: Un rbol con un solo nodo, el cual es a la vez la raz del rbol y una hoja.

Un rbol a partir de un nodo raz R y k rboles A1, A2, A3,, Ak con races n1, n2, n3, , nk respectivamente, y N1, N2, N3,, Nk nodos cada uno.

El rbol resultante de N = 1 + N1 + N2 + N3 ++Nk nodos tiene como raz al nodo R, por lo que los nodos n1, n2, n3, , nk son los hijos de R.

A cada uno de los rboles Ai se les denota como subrboles de la raz.

Un recorrido es una sucesin de nodos del rbol de tal forma que entre cada dos nodos consecutivos de la sucesin hay una relacin de parentesco.

8

rboles: Definicin GeneralExisten dos recorridos tpicos para listar los nodos de un rbol: en profundidad y en anchura.

En profundidad (depth-first) listamos los nodos expandiendo primero el hijo actual de cada nodo hasta llegar a una hoja, al llegar a una hoja regresamos al nodo anterior probando el siguiente hijo, y as sucesivamente.

En anchura (breadth-first), antes de recorrer los nodos del nivel d+1 (profundidad de d+1 aristas desde la raz), se listan todos los nodos del nivel d.

9rboles: Ejemplos

rboles BinariosUn rbol binario es un conjunto finito de elementos que est vaco o dividido en tres subconjuntos:El primer subconjunto contiene un elemento nico, la raz del rbol,Un subrbol binario izquierdo que puede o no estar vacoUn subrbol binario derecho equivalente al izquierdo

En otras palabras, un rbol binario es un nodo externo, o un nodo interno conectado a un par de rboles binarios, los subrboles izquierdo y derecho. izqderhojadescendienteancestrohermanosrazrboles BinariosNivel de un rbol binario: La raz del rbol tiene el nivel 0, y el nivel de cualquier otro nodo en el rbol es uno ms el nivel de su padre.

Nivel = 0Nivel = 1Nivel = 2Nivel = 3ProfundidadNivel = 0Nivel = 1Nivel = 2rbol binario completo: Es un rbol binario que tiene todos sus nodos completos en cada subrbol a una profundidad d. Si un rbol binario contiene m nodos en el nivel l, entonces contiene un mximo de 2m nodos en el nivel l+1. 421nodos2l nodos por nivel, por lo tanto la Cantidad de nodos en un rbol de Profundidad d es igual a la suma de Los nodos por nivel:N = 20 + 21 + + 2d = d 2j = 2d+1 - 1 j=0

drboles Binarios: OperacionesEntre las aplicaciones ms comunes tenemos: Dado un apuntador p a un nodo en un rbol binarioabcfedgpinfo(p) : Retorna el contenido del nodo, en este ejemplo es aright(p) : Retorna un apuntadoral hijo derecho del nodoleft(p) : Retorna un apuntadoral hijo izquierdo del nodofather(p) : Retorna un apuntador al padre del nodoNullbrother(p) : Retorna un apuntador al hermano del nodo.

Note que si no existe un nodo que satisfaga cualquiera de las funciones anteriores, se retorna un nulo (null) entonces.

Las funciones lgicas isLeft(p) y isRight(p) retornan true si p se encuentra en el lado izquierdo o derecho de algn otro nodo respectivamente, false sino es el caso. isLeft(d) = trueisLeft(e) = falseisRight(g) = trueLas funciones isLeft(p), isRight(p), y brother(p), se implementan usando la funcionalidad de left(p), right(p), y father(p). Ejemplo:

Bool isLeft(p)q = father(p)if(q == null)return false;if(left(q) == p)return true;return false;rboles Binarios: OperacionesabcfedgisLeft(a) ?isLeft(b) ?isLeft(c) ?Implementa isRight(p)!brother(p)if(father(p) == null)return null;if(isLeft(p))return right(father(p)) return left(father(p))rboles Binarios: Operacionesabcfedgbrother(c) ?fatherOperaciones adicionales:makeTree(p) : Crea un rbol binario con un nodo nico (raz) setLeft(p, x) : Establece un nodo x como hijo izquierdo de otro nodo p, siempre y cuando p no tenga un hijo del lado izquierdo ya establecido. - setRight(p, x) : Similar a la funcin anterior. Los rboles binarios son tiles cuando se toman decisiones en dos sentidos en cada punto del proceso. Ejemplo: Encontrar todos los duplicados en una lista de nmeros: {15,4,8, 7, 4, 3, 19, 5, 7, 9, 16, 5,17}Algoritmo: Primer elemento es la raz, subsecuentes elementos se colocan a la izquierda si son menores o a la derecha si son mayores. Si son duplicados no se insertan pero se reportan.

rboles Binarios: Aplicacin de Ejemplo151541548154874154873rboles Binarios: Aplicacin de Ejemplo{15,4,8, 7, 4, 3, 19, 5, 7, 9, 16, 5,17}1548731915487319515487319591617rboles Binarios: Aplicacin de Ejemplo15487319591617Pseudocdigo:

int numbers[13] = {15,4,8, 7, 4, 3, 19, 5, 7, 9, 16, 5,17};tree = makeTree(numbers[0]);for(int i=1;iright = NULL;return root;}

XNULLNULLNULLTNODEPTR father(TNODEPTR pNode) {return pNode->father;}

TNODEPTR leftChild(TNODEPTR pNode) {return pNode->left;}

TNODEPTR rightChild(TNODEPTR pNode) {return pNode->right;}Representacin bsica de un rbol binariovoid setLeftChild(TNODEPTR pNode, int x) {if (pNode == NULL) cout