You are on page 1of 49

ANTOLOGA DE ESTRUCTURA DE DATOS

LIC. INFORMTICA

LIC. OSCAR JIMNEZ AGUILAR

JULIO 2009

Mixquiahuala de Jurez, Julio 2009

INTRODUCCIN

El presente documento, es una recopilacin de informacin acerca de la materia de estructura de datos, con la ayuda de los alumnos de la licenciatura en informtica, fue posible lograr recabar informacin acorde al temario y apegado a cada uno los temas y subtema. Adems de contar con ejemplos orientados y apegados a la programacin orientada a objetos, donde es representada cada una de las estructuras con algn ejemplo, bajo el lenguaje de programacin, que actualmente los alumnos ocupan, JAVA. Esperando que este ejemplar, sea un manual que a los alumnos que cursen la materia de Estructura de Datos, sea de gran utilidad y ayuda para dicha materia.

ndice Unidad 1 Tipos de datos 1.1 Tipos de Datos 1.1.1 Tipos de Datos Simples 1.1.1.1 Definicin de Bit, Byte, Carcter y Palabra 1.1.1.2 Manipulacin de Bits 1.1.1.3 Representacin de Datos Simples 1.1.2 Tipos de Datos Abstractos 1.2 Definicin de Estructuras de Datos 1.2.2 Clasificacin de Estructuras de Datos 1.2.2.1 Estructuras de Datos Lineales y no Lineales 1.2.2.2 Estructura de Datos Dinmicas y Estticas Unidad 2 Estructuras lineales 2.1 Definicin de Arreglos 2.1.2 Arreglos Unidimensionales 2.1.3 Arreglos Bidimensionales 2.1.4 Arreglos Multidimensionales 2.1.5 Resolucin de problemas con arreglos 2.1.6 Clases para Implementacin de Arreglos 2.2 Definicin de Pilas 2.2.2 Operaciones con Pilas 2.2.3 Clases para Implementacin de Pilas

2.3 Definicin de Colas 2.3.2 Tipos 2.3.2.1 Colas Simples 2.3.2.2 Colas Circulares 2.3.2.3 Colas Dobles 2.3.3 Operaciones con Colas 2.3.4 Clases para Implementacin de Colas Unidad 3 Listas enlazadas 3.1 Listas Enlazadas Simples 3.1.2 Listas Enlazadas Dobles 3.1.3 Listas Enlazadas Circulares 3.1.4 Listas Enlazadas Multilistas 3.1.5 Clases para Implementacin de Listas Unidad 4 Estructuras no lineales 4.1 Definicin de Arboles 4.1.2 Representacin en Memoria de Arboles 4.1.2.1 Arboles Generales 4.1.2.2 Arboles Binarios 4.1.3 Recorridos en rbol Binario Pre orden 4.1.3.2 Recorridos en rbol Binario In orden 4.1.3.3 Recorridos en rbol Binario Pos orden 4.1.4 Balanceo Arboles Binarios

4.1.5 Clases para Implementacin Arboles 4.2 Definicin de Grafos 4.2.2 Tipos de Grafos 4.2.3 Representacin de Grafos en Memoria 4.2.4 Clases para Implementacin de Grafos

Estructura de Datos 2009


Unidad 1 Tipos de Datos

1.1 Tipos de Datos El tipo de un dato es el conjunto de valores que puede tomar durante el programa. Si se le intenta dar un valor fuera del conjunto se producir un error. La asignacin de tipos a los datos tiene dos objetivos principales: Detectar errores en las operaciones. Determinar cmo ejecutar estas operaciones.

1.1.1 Tipos de Datos Simples Un valor simple(o tipo de dato simple) es un valor que almacena en el nivel mas bajo de abstraccin, lo que significa que las operaciones con tipo de datos simples son generalmente mas rpidas y eficientes que las operaciones realizadas con los tipos de datos complejos.

Enteros Este cuadro sinptico aplica para cualquier lenguaje de programacin. Datos simples Numrico Reales

Lgicos o Bolanos Carcter Carcter Cadena

Estructura de Datos 2009


Tipo de variable boolean byte short Bytes ocupa 2 1 2 -32.768 a 32.767 int 4 -2.147.483.648 a 2.147.483.649 que Rango de valores true, false -128 a 127

long

8 -9 1018 a 9 1018

double

8 -1,79 10308 a 1,79 10308

float char String

4 2 2

-3,4 1038 a 3,4 1038 Caracteres(en Unicode) Cadena de caracteres Datos simples propios de java.

Enteros Los tipos byte, short, int y long sirven para almacenar datos enteros. Los enteros son nmeros sin decimales. Nmeros en coma flotante Los decimales se almacenan en los tipos float y double. Se les llama de coma flotante por como son almacenados por el ordenador. Los decimales no son almacenados de forma exacta por eso siempre hay un posible error. En los decimales de coma flotante se habla, por tanto de precisin. Es mucho ms preciso el tipo double que el tipo float. Booleanos Los valores booleanos (o lgicos) sirven para indicar si algo es verdadero (true) o falso (false). Caracteres Los valores de tipo carcter sirven para almacenar smbolos de escritura (en Java se puede almacenar cualquier cdigo Unicode).

Estructura de Datos 2009


1.1.1.1 Definicin de Bit, Byte, Carcter, Palabra. Bit: es una sntesis de dos trminos en ingles: Binary Digit, que en espaol significa digito binario, o lo que es lo mismo numero (digito). El trmino surge de usar las dos primeras letras de binary con la ltima de digit: bit. La unidad de informacin ms sencilla posible en el sistema binario. Byte: unidad de informacin que consta de 8 bits equivalente a un nico carcter, como una letra, numero o signo de puntuacin. Carcter: es un elemento tomado de un conjunto de smbolos. Un ejemplo de conjunto de smbolos es {0,1,2,3,4,5,6,7,8,9,A,B,CY,z,,-,+,*} en el cual se incluyen dgitos, los caracteres del alfabeto y algunos caracteres especiales. Palabra: Conjunto de bits que comunidad elemental pueden manipular una computadora. La longitud de de bits de una palabra en una computadora puede ser de 8, 16, 32, etc.

8 7 6

1
Bytes

2 3 4

bit valor

caracter

Este mapa mental demuestra la correlacin entre los conceptos antes mencionados.

Palabra

Estructura de Datos 2009


1.1.1.2 Manipulacin de Bits

Ahora el ser humano digitaliza su entorno. Pero, Que significa digitalizar? Digitalizar es traducir informacin como texto, imgenes, o sonidos, a un formato que puedan entender los microprocesadores, y estos solo estn capacitados para manejar los valores unos y ceros. En efecto, para tu microprocesador todo lo que vez en estos momentos en la pantalla se maneja con unos y ceros. Esto es por que la computadora maneja un sistema binario, que se llama as por que solo acepta dos valore (0 y1). Un bit puede representar 2 valores. Dos bits 4 posibles valores y ocho bits 256 posibles combinaciones de unos y ceros. Tal sencillez tiene su razn de ser: los microprocesadores son circuitos electrnicos plasmados en un material llamado silicio (algo parecido al vidrio) que procesan diminutos impulsos elctricos, el ms pequeo de los cuales es conocido por el nombre de bit . Como impulso elctrico, el microprocesador slo puede detectar cuando un bit tiene carga elctrica --su valor sera, en este caso, 1-- o cuando no la tienen --su valor sera 0 - En este ejemplo manejamos los valores unos y ceros de manera un tanto arbitraria, ya que la presencia o ausencia de carga elctrica en un bit puede ser interpretada como una gran diversidad de valores: cierto y falso, hombre o mujer, T o J, etc. La eficacia de las computadoras no se basa en la complejidad de su fundamento lgico, que como vimos se reduce a manejar dos posibles valores, sino de la velocidad con la que se aplica dicha lgica: los microprocesadores actuales pueden procesar varios millones de bits en un slo segundo.

Estructura de Datos 2009


Este cdigo muestra uno de los usos de la manipulacin de bits.

Estructura de Datos 2009

1.1.1.3 Representacin de Datos Simples Es uno de los conceptos fundamentales de cualquier lenguaje de programacin. Estos definen los mtodos de almacenamiento disponibles para representar informacin, junto con la manera en que dicha informacin ha de ser interpretada. Para crear una variable (de un tipo simple) en memoria debe declararse indicando su tipo de variable y su identificador que la identificar de forma nica. La sintaxis de declaracin de variables es la siguiente: TipoSimple Identificador1, Identificador2; En el siguiente cdigo se muestra como se declara un dato simple de tipo entero, en una pequea aplicacin que suma dos nmeros ingresados por el teclado.

Estructura de Datos 2009

Este cdigo muestra como se declara una variable de tipo simple.

1.1.2 Tipos de Datos Abstractos Algunos lenguajes de programacin tienen caractersticas que nos permiten ampliar el lenguaje aadiendo sus propios tipos de datos. Un tipo de dato definido por el programador que se pude manipular de un modo similar a los tipos de datos definidos por el sistema, se denomina tipo abstracto de dato (TDA), par diferenciarlo de los tipos fundamentales (predefinido) de datos. Por ejemplo en Java, el tipo Punto, que representa las coordenadas x e y de un sistema de coordenadas rectangulares, no existe. Sin embargo, es posible implementar el tipo abstracto de datos. Considerando los valores que se almacenan en sus variables y que operaciones estn disponibles para manipular estas variables. En esencia, un tipo abstracto es un tipo de dato que consta de datos (estructura de datos propias) y operaciones que se puedes realizar sobre ellos. Un TDA se compone de estructuras de datos y procedimientos o funciones que manipulan esas estructuras de datos. Se dividen en simples y contenedores. Un TDA es el elemento bsico de la abstraccin de datos. Su desarrollo es independiente del lenguaje de programacin utilizado, aunque este puede aportar mecanismos que faciliten su realizacin. Debe verse como una caja negra.

Estructura de Datos 2009


Los TDAs permiten la creacin de instancias con propiedades bien definidas y comportamiento bien definido. En orientacin a objetos, nos referimos a los TDAs como clases. Por lo tanto, una clase define las propiedades de objetos instancia en un ambiente orientado a objetos. Los TDAs definen la funcionalidad al poner especial nfasis en los datos involucrados, su estructura, operaciones, as como en axiomas y precondiciones. Consecuentemente, la programacin orientada a objetos es "programacin con TDAs: al combinar la funcionalidad de distintos TDAs para resolver un problema. Por lo tanto, instancias (objetos) de TDAs (clases) son creados dinmicamente, usados y destruidos. Para construir un tipo abstracto debemos: 1. Exponer una definicin del tipo. 2. Definir las operaciones (funciones y procedimientos) que permitan operar con instancias de ese tipo. 3. Ocultar la representacin de los elementos del tipo de modo que slo se pueda actuar sobre ellos con las operaciones proporcionadas. 4. Poder hacer instancias mltiples del tipo. Tipos bsicos de operaciones en un TDA Constructores: Crean una nueva instancia del tipo. Transformacin: Cambian el valor de uno o ms elementos de una instancia del tipo. Observacin: Nos permiten observar el valor de uno o varios elementos de una instancia sin modificarlos. Iteradores: Nos permiten procesar todos los componentes en un TDA de forma secuencial.

1.2 Definicin de Estructura de Datos Las estructuras de datos nos han estado rodeando desde la era de la programacin estructurada. Una definicin de esa era: una estructura de datos es un conjunto de tipos, un tipo diseado partiendo de ese conjunto de tipos, un conjunto de funciones, y un conjunto de axiomas. Esta definicin implica que una estructura de datos es un tipo con implementacin. En nuestra era de la programacin orientada a objetos, tipo con implementacin significa clase. Su definicin de una estructura de datos es una clase es demasiado amplia porque supone que Empleado, Vehculo, Cuenta, y otras muchas clases especficas de entidades del mundo real son estructuras de datos. Aunque esas clases estructuran varios tems de datos, describen entidades del mundo real (en la forma de objetos) en lugar de describir

Estructura de Datos 2009


contenedores de objetos para otras entidades objetos (y posiblemente otro contenedor). Esta idea de contenido da una definicin ms apropiada para una estructura de datos: una estructura de datos es una clase contenedora que proporciona almacenamiento para tems de datos, y capacidades para almacenar y recuperar estos datos. Algunos ejemplos de estructuras de datos son los arrays, las listas enlazadas, las pilas y las colas. Es una clase de datos, que se caracteriza por su organizacin y operaciones definidas sobre la misma. Cada estructura ofrece ventajas y desventajas en relacin a la simplicidad y eficiencia para la realizacin de cada operacin. Las operaciones que se pueden realizar son: Alta; adicionar un nuevo valor. Baja; borrar un valor. Bsqueda; encontrar un determinado valor en la estructura.

1.2.2 Clasificacin de Estructura de Datos Las estructuras de datos simples se pueden combinar de varias maneras para formar estructuras ms complejas. Los dos casos principales de estructuras de datos son las lineales y las no lineales, dependiendo de la complejidad de las relaciones lgicas que representan. Las estructura de datos son datos de tipo compuesto, es decir, que son datos que ocupan mas de un espacio de memoria y depende la implementacin pude crecer, si no se declara de un tamao especifico. Se clasifican en dos formas:

Arreglos Lineales Pilas Colas Estructura de Datos Listas

Este cuadro sinptico clasifica la estructura de datos.

Arboles No lineales Grafos

Estructura de Datos 2009

Lineales Son los que como su nombre lo dicen son lneas, no pueden tomar otra forma por que una precede a otra y de igual forma solo tiene un solo sucesor. No lineales Son los que toma forma relacin de uno a muchos y en otro caso de muchos a muchos, es decir que un elemento puede tener ramificaciones.

1.2.2.2 Estructura de Datos Estticas y Dinmicas

Estticas Son los que durante la ejecucin del programa, el tamao de la estructura no cambia. Su tamao y forma es constante durante la ejecucin de un programa y por tanto se determinan en tiempo de compilacin. El ejemplo tpico son los arrays. Tienen el problema de que hay que dimensionar la estructura de antemano, lo que puede conllevar desperdicio o falta de memoria. El tamao ocupado en memoria se define antes de que el programa se ejecute y no puede modificarse dicho tamao durante la ejecucin del programa. Ests estructuras estn implementadas en casi todos los lenguajes: arrays (vectores/tablas - matrices), registros, ficheros o archivos (los conjuntos son especficos del lenguaje Pascal). Dinmicas Son aquellos que durante la ejecucin del programa el tamao de la estructura puede cambiar (crecer). Su tamao y forma es variable (o puede serlo) a lo largo de un programa, por lo que se crean y destruyen en tiempo de ejecucin. Esto permite dimensionar la estructura de datos de una forma precisa: se va asignando memoria en tiempo de ejecucin segn se va necesitando. No tienen las limitaciones o restricciones en el tamao de memoria ocupada que son propias de las estructuras estticas. Mediante el uso de un tipo de datos especficos denominados puntero. Es posible construir estructuras de datos dinmicas que son soportados por la mayora de los lenguajes que ofrecen soluciones eficaces y efectivas en la solucin de problemas complejos. Las estructuras dinmicas son las listas - enlazadas, pilas, colas -, rboles - binarios, rbol-b, bsqueda binaria - y grafos.

10

Estructura de Datos 2009

La tabla muestra una clasificacin mas especifica de las estructuras de datos. De pendiendo del espacio en memoria que ocupa.

Estticas Arreglos Registros Ficheros Cadenas

Dinmicas Pilas Colas Listas Arboles Grafos

Unidad 2 Estructura lineales


2.1 Definicin de Arreglos Arrays

Un arreglo (array) es una coleccin de datos del mismo tipo, que se almacenan en posiciones consecutivas de memoria y reciben un nombre comn. Para referirse a un determinado elemento de un array se deber utilizar un ndice, que especifique su posicin relativa en el array. Un arreglo es una coleccin finita, homognea y ordenada de elementos. Finita: Todo arreglo tiene un lmite; es decir, debe determinarse cul ser el nmero mximo de elementos que podrn formar parte del arreglo. Homognea: Todos los elementos del arreglo deben ser del mismo tipo. Ordenada: Se puede determinar cul es el primer elemento, el segundo, el tercero,.... y el n-simo elemento. Para manejar un arreglo, las operaciones a efectuarse son: 1. 2. 3. 4. Declaracin del arreglo Creacin del arreglo Inicializacin de de los elementos del arreglo Acceso a los elementos del arreglo

11

Estructura de Datos 2009


Los arreglos se clasifican de acuerdo con el nmero de dimensiones que tienen. As se tienen los: Arreglos Unidimensionales Arreglos Bidimensionales Arreglos Multidimensionales

2.1.2 Arreglos Unidimensionales (vectores) Un arreglo unidimensional es un tipo de dato estructurado que est formado de una coleccin finita y ordenada de datos del mismo tipo. Es la estructura natural para modelar listas de elementos iguales. El tipo de acceso a los arreglos unidimensionales es el acceso directo, es decir, podemos acceder a cualquier elemento del arreglo sin tener que consultar a elementos anteriores o posteriores, esto mediante el uso de un ndice para cada elemento del arreglo que nos da su posicin relativa.
Diagrama representativo de un arreglo.

Declaracin La declaracin de un arreglo unidimensional consiste en establecer las caractersticas del arreglo y sus elementos, por medio de la siguiente sintaxis: Estndar: <tipo> [ ] < identificador> ;

En Java: int a[]=new int[]; Donde: Tipo indica el tipo correspondiente a los elementos del arreglo. Identificador es el nombre del arreglo.

16

Estructura de Datos 2009


El par de corchetes, [ ], representa la dimensin del arreglo y encierra un nmero entero que corresponde al nmero de elementos del arreglo.

Ejemplos: int [ ] a ; float [ ] distancia ; Artculo [ ] art = new Artculo [3]; Observe que, en la declaracin, el espacio entre los corchetes est vaco. Esto se debe a que, durante dicha operacin, no se reserva espacio en la memoria. Creacin La creacin de un arreglo unidimensional consiste en reservar espacio de memoria para todos sus elementos, utilizando la siguiente sintaxis: < identificador > = new <tipo> [ tamao ] ; Donde: New es el operador para gestionar espacio de memoria, en tiempo de ejecucin. Tamao es un nmero entero que representa el nmero de elementos del arreglo. Ejemplos: a = new int [10] ; // Se crea el arreglo a , con 10 elementos de tipo entero. distancia = new float[ 5] ; // Se crea el arreglo distancia , con 5 elementos de punto flotante y precisin sencilla .Artculo [] art = new Artculo[3]; Artculo [ ] art = new Artculo[ 3]; // Se crean 3 referencias a objetos de la clase Artculo art[0]= new Artculo(); // Se crea el primer objeto del arreglo art art[1]= new Artculo(); // Se crea el segundo objeto del arreglo art art[2]= new Artculo(); // Se crea el tercer objeto del arreglo art Inicializacin Un arreglo es un objeto que, cuando es creado por el compilador, se le asignan automticamente valores inciales predeterminados a cada uno de sus elementos, de acuerdo a los siguientes criterios: Si el tipo del arreglo es numrico, a sus elementos se les asigna el valor cero. Si el tipo del arreglo es char, a sus elementos se les asigna el valor '\u0000'. Si el tipo del arreglo es booleano, a sus elementos se les asigna el valor false. Si el tipo del arreglo es una clase, a sus elementos se les asigna el valor null.

17

Estructura de Datos 2009


Cuando se requiere asignar valores inciales diferentes de los predeterminados, es posible agrupar las operaciones de declaracin, creacin e inicializacin en una sola instruccin, por ejemplo: int [ ] a = { 1, 0,4,-6, 2,9, 23,455, 90,35 }; float [ ] distancia = { 2.50F, 286.45F, 46.75F, 30.62F, 93.00F }; string [ ] pato = { "Hugo", "Paco", "Lus" }; Acceso Se puede acceder a los valores de los elementos de un arreglo a travs del nombre del arreglo y un subndice. El subndice debe escribirse entre corchetes y representa la posicin del elemento en el arreglo. As, podemos referirnos a un elemento del arreglo escribiendo el nombre del arreglo y el subndice del elemento entre corchetes. Los valores de los subndices empiezan en cero para el primer elemento, hasta el tamao del arreglo menos uno.

Este un cdigo de un arreglo unidimensional.

18

Estructura de Datos 2009

2.1.3 Arreglos Bidimensionales (tablas o matrices) Este tipo de arreglos al igual que los anteriores es un tipo de dato estructurado, finito ordenado y homogneo. El acceso a ellos tambin es en forma directa por medio de un par de ndices. Los arreglos bidimensionales se usan para representar datos que pueden verse como una tabla con filas y columnas. La primera dimensin del arreglo representa las columnas, cada elemento contiene un valor y cada dimensin representa una relacin. La representacin en memoria se realiza de dos formas: almacenamiento por columnas o por renglones.
Diagrama representativo de un arreglo bidimensional.

Para determinar el nmero total de elementos en un arreglo bidimensional usaremos las siguientes frmulas: RANGO DE RENGLONES (R1) = Ls1 - (Li1+1) RANGO DE COLUMNAS (R2) = Ls2 - (Li2+1) No. TOTAL DE COMPONENTES = R1 * R2

19

Estructura de Datos 2009


Representacin en memoria por columnas

x : array [1..5,1..7] of integer Para calcular la direccin de memoria de un elemento se usan la siguiente formula: A[i,j] = base (A) + [((j - li2) R1 + (i + li1))*w]

Representacin en memoria por renglnes

x : array [1..5,1..7] of integer

Para calcular la direccin de memoria de un elemento se usan la siguiente formula: A[i,j] = base (A) + [((i - li1) R2 + (j + li2))*w]

20

Estructura de Datos 2009


Donde: i = ndice del rengln a calcular j = ndice de la columna a calcular li1 = Lmite inferior de renglones li2 = Lmite inferior de columnas w = Nmero de bytes tipo componente

Cdigo de un arreglo bidimensional.

21

Estructura de Datos 2009


2.1.4 Multidimensionales (tres o ms dimensiones) Este tambin es un tipo de dato estructurado, que est compuesto por n dimensiones. Para hacer referencia a cada componente del arreglo es necesario utilizar n ndice, uno para cada dimensin.

Diagrama representativo de un arreglo multidimensional.

Los arreglos multidimensionales son tratados como arreglos de arreglos. Esto implica que la creacin e inicializacin de arreglos de ms de una dimensin, necesariamente deber incluir llamados new para cada una de las dimensiones del arreglo, en la mayora de los casos. Ejemplo:

int matrixDos [ ][ ] = new int [4][ ]; for(int i = 0; i < matrixDos.length ; i++){ matrixDos[i] = new int [6]; }

22

Estructura de Datos 2009


El siguiente cdigo ms corto tiene el mismo efecto: int matrixDos [ ][ ] = new int [4][6]; La ventaja del primer mtodo es la posibilidad de crear arreglos de dos dimensiones no rectangulares.

Para determinar el nmero de elementos en este tipo de arreglos se usan las siguientes frmulas: RANGO (Ri) = lsi - (lii + 1) No. TOTAL DE ELEMENTOS = R1 * R2* R3 * ...* Rn Donde: i = 1 ... n n = No. total de dimensiones

Para determinar la direccin de memoria se usa la siguiente formula: LOC A[i1,i2,i3,...,in] = base(A) + [(i1-li1)*R3*R4*Rn + (i2-li2)*R3*R2*... (in - lin)*Rn]*w

23

Estructura de Datos 2009

2.2 Definicin de Pilas Una pila es un tipo de lista lineal en la que la insercin y borrado de nuevos elementos solo se pueden realizar por un extremo que se denomina tope o cima, es decir, el ultimo elemento insertado es el primero que podr eliminarse; debido a esta caracterstica, tambin se le conoce como estructura LIFO(por sus siglas en ingles: Last-In, First-Out: ltimo en entrar el primero en salir). La pila es una estructura con numerosas analogas en la vida real, una pila de platos, una pila de documentos, una pila de monedas. Dado que la operacin de insertar y eliminar se realiza por un solo extremo (superior) los elementos solo pueden eliminarse en un orden inverso al que se insertan en la pila.

Diagrama de una estructura tipo pila. El tope siempre debe apuntar a la posicin ms alta de la pila y cambiar de posicin segn se inserte o se retiren datos.

Tope

Palabra o numero

Palabra o numero

2.2.2 Operaciones con Pilas Poner un Elemento (Push). Quita un Elemento (Pop). Crear: se crea la pila vaca. Apilar: se aade 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) Vaca: devuelve cierto si la pila est vaca o falso en caso contrario.

24

Estructura de Datos 2009

2.2.3 Clases para Implementar las Pilas Arrays Un array (matriz o vector) es una zona de almacenamiento contiguo, que contiene una serie de elementos del mismo tipo, los elementos de la matriz. Desde el punto de vista lgico un array se puede ver como un conjunto de elementos ordenados en fila (o filas y columnas si tuviera dos dimensiones). Collection La interfaz ms importante es Collection. Una Collection es todo aquello que se puede recorrer (o iterar) y de lo que se puede saber el tamao. Muchas otras clases extendern Collection imponiendo ms restricciones y dando ms funcionalidades. Es de notar que el requisito de que se sepa el tamao hace inconveniente utilizar estas clases con colecciones de objetos de las que no se sepa a priori la cantidad (sto podra considerarse una limitacin de este framework). add(T) Aade un elemento. iterator() Obtiene un iterador que permite recorrer la coleccin visitando cada elemento una vez. size() Obtiene la cantidad de elementos que esta coleccin almacena. contains(t) Pregunta si el elemento t ya est dentro de la coleccin. List Un List, o simplemente lista, es una Collection. La diferencia que tiene una lista con una Collection es que la lista mantiene un orden arbitrario de los elementos y permite acceder a los elementos por orden. Podramos decir que en una lista, por lo general, el orden es dato. Es decir, el orden es informacin importante que la lista tambin nos est almacenando. No hay ningn mtodo en Collection para obtener el tercer elemento. No lo puede haber porque, como se dijo, a nivel Collection ni siquiera estamos seguros de que si volvemos a recorrer la coleccin los elementos aparecern en el mismo orden. Una lista s debe permitir acceder al tercer elemento, por eso se aaden los siguientes mtodos:

25

Estructura de Datos 2009


get(int i) Obtiene el elemento en la posicin i. set(int i, T t) Pone al elemento t en la posicin i.
Programa que demuestra el funcionamiento de una pila.

26

Estructura de Datos 2009

Programa prueba de pilas.

2.3 Definicin de Cola Una cola es una estructura de almacenamiento, donde la podemos considerar como una lista de elementos, en la que stos van a ser insertados por un extremo y sern extrados por otro. Las colas son estructuras de tipo FIFO (first-in, first-out), ya que el primer elemento en entrar a la cola ser el primero en salir de ella. Existen muchsimos ejemplos de colas en la vida real, como por ejemplo: personas esperando en un telfono pblico, nios esperando para subir a un juego mecnico, estudiantes esperando para subir a un camin escolar, etc.

Representacin en Memoria Podemos representar a las colas de dos formas: Como arreglos Como listas ordenadas

27

Estructura de Datos 2009


2.3.2 Tipos de Colas

2.3.2.1 Cola Simples La cola simple es un tipo de almacenamiento creado por el usuario que trabaja bajo la tcnica FIFO (primero en entrar primero en salir). Las colas lineales se representan grficamente de la siguiente manera: Las operaciones que podemos realizar en una cola son las de inicializacin, insercin y extraccin. Los algoritmos para llevar a cabo dichas operaciones se especifican ms adelante. Las condiciones a considerar en el tratamiento de colas lineales son las siguientes:

a) Cola llena, cuando se realice una insercin. b) Cola vaca, cuando se requiera de una extraccin en la cola. c) Vaco

28

Estructura de Datos 2009

Programa que muestra la funcionalidad de una cola simple.

29

Estructura de Datos 2009

30

Estructura de Datos 2009


2.3.2.2 Cola Circular Las colas lineales tienen un grave problema, como las extracciones slo pueden realizarse por un extremo, puede llegar un momento en que el apuntador A sea igual al mximo nmero de elementos en la cola, siendo que al frente de la misma existan lugares vacos, y al insertar un nuevo elemento nos mandar un error de (cola llena). Para solucionar el problema de desperdicio de memoria se implementaron las colas circulares, en las cuales existe un apuntador desde el ltimo elemento al primero de la cola. La representacin grfica de esta estructura es la siguiente: La condicin de vaco en este tipo de cola es que el apuntador F sea igual a cero. Las condiciones que debemos tener presentes al trabajar con este tipo de estructura son las siguientes: Cola llena, cuando se realice una insercin. Cola vaca, cuando se requiera de una extraccin en la cola. Vacio

2.3.3 Operaciones en Colas Las operaciones que nosotros podemos realizar sobre una cola son las siguientes: Insercin Extraccin

Las inserciones en la cola se llevarn a cabo por atrs de la cola, mientras que las eliminaciones se realizarn por el frente de la cola (hay que recordar que el primero en entrar es el primero en salir).

31

Estructura de Datos 2009

Programa que muestra la funcionalidad de una cola circular.

32

Estructura de Datos 2009


Clase prueba que muestra la funcionalidad de una cola circular.

33

Estructura de Datos 2009


2.3.2.3 Colas Dobles

Existe una variable de la cola simple que es la bicola (doble cola). Es una cola bidimensional en la que las inscripciones y eliminaciones se pueden realizar en cualquiera de los dos extremos de la cola. Insercin Eliminacin

2.3.4 Clases para Implementacin de Colas Java.util.Vector; En esta clase se simula un vector y puedes implementarle los metodos que se usan en las colas o bien si ya estan definidas en la clase solo usarlas. Java.util.linkedList La clase para implementar colas es la LinkedList que explicamos mas adelante, ya que es til para el manejo de listas enlazadas.

34

Estructura de Datos 2009

Unidad 3 Listas Enlazadas

Una lista se define como una coleccin de elementos donde cada uno de ellos, adems de almacenar informacin, almacena la direccin del siguiente elemento. Cada uno de los componentes tiene un sucesor y predecesor nico, con excepcin del ltimo y del primero, los cuales carecen de sucesor y de predecesor respectivamente.

3.1 Listas Enlazadas Simples Es una estructura lineal dinmica, formada por una coleccin de elementos llamados nodos donde cada nodo tiene un nico campo de enlace. Cada uno esta formado por dos partes: la primera de ella se utiliza para almacenar la informacin, y la segunda se usa para guardar la direccin del siguiente nodo. La lista esta formada por una coleccin de nodos, cada uno de los cuales apunta al siguiente nodo. Tiene un nico campo de enlace. Excepto el ltimo que en la posicin dedicada a la direccin de su vecino tiene el valor null para indicar el final de la lista. Adems, se pude observar que se requiere de un puntero al primer elemento de la lista. Como este no tiene predecesor, es indispensable que una variable tipo puntero almacene su direccin.
Primero

Null

Un algoritmo comn de las listas de enlace simple es la insercin de nodos. Este algoritmo est implicado de alguna forma por que tiene mucho que ver con cuatro casos: cuando el nodo se debe insertar antes del primer nodo; cuando el nodo se debe insertar despus del ltimo nodo; cuando el nodo se debe insertar entre dos nodos; y cuando la lista de enlace simple no existe. Antes de estudiar cada caso consideremos el siguiente pseudocdigo: DECLARE CLASS Node DECLARE STRING name DECLARE Node next END DECLARE

35

Estructura de Datos 2009


DECLARE Node top = NULL Operaciones en Listas Enlazadas Las operaciones que podemos realizar sobre una lista enlazada son las siguientes:

Recorrido. Esta operacin consiste en visitar cada uno de los nodos que forman la lista. Para recorrer todos los nodos de la lista, se comienza con el primero, se toma el valor del campo liga para avanzar al segundo nodo, el campo liga de este nodo nos dar la direccin del tercer nodo, y as sucesivamente. Insercin. Esta operacin consiste en agregar un nuevo nodo a la lista. Para esta operacin se pueden considerar tres casos: o Insertar un nodo al inicio. o Insertar un nodo antes o despus de cierto nodo. o Insertar un nodo al final. Borrado. La operacin de borrado consiste en quitar un nodo de la lista, redefiniendo las ligas que correspondan. Se pueden presentar cuatro casos: o Eliminar el primer nodo. o Eliminar el ltimo nodo. o Eliminar un nodo con cierta informacin. o Eliminar el nodo anterior o posterior al nodo cierta con informacin. Bsqueda. Esta operacin consiste en visitar cada uno de los nodos, tomando al campo liga como puntero al siguiente nodo a visitar.

3.1.2 Listas Dobles Una lista doble, doblemente ligada es una coleccin de nodos en la cual cada nodo tiene dos punteros, uno de ellos apuntando a su predecesor (li) y otro a su sucesor (ld). Por medio de estos punteros se podr avanzar o retroceder a travs de la lista, segn se tomen las direcciones de uno u otro puntero. La estructura de un nodo en una lista doble es la siguiente:

li

Dato

ld

Estructura de un nodo en una lista doble.

36

Estructura de Datos 2009


Existen dos tipos de listas doblemente ligadas:

Listas dobles lineales. En este tipo de lista doble, tanto el puntero izquierdo del primer nodo como el derecho del ltimo nodo apuntan a Null. Listas dobles circulares. En este tipo de lista doble, el puntero izquierdo del primer nodo apunta al ltimo nodo de la lista, y el puntero derecho del ltimo nodo apunta al primer nodo de la lista.

Null

Diagrama de una lista doblemente ligada lineal.

Diagrama de una

ligada circular.

Insercin en listas doblemente ligadas La operacin de insercin de un nuevo nodo a una lista consiste en tomar un espacio de memoria dinmicamente, asignarle la informacin correspondiente y ligarlo al o a los nodos que corresponda dentro de la lista. Los pasos varan dependiendo de la posicin que ocupara el nuevo elemento.

Insercin al principio de la lista Se crea un nodo, cuya direccin se guarda en una variable auxiliar, a su derecha se le asigna la direccin del primer nodo y a la izquierda el valor de NULL. Adems, se establece la liga entre el nodo que ocupaba la primera posicin de la lista con el nuevo nodo. Por ultimo, se define el primero con el valor de la variable auxiliar. El mtodo tambin considera si la lista esta vaca. En este caso, el puntero hasta el ltimo elemento se define con el valor de la direccin del nuevo nodo.

Insercin al final de la lista

37

Estructura de Datos 2009


Se crea un nuevo nodo (cuya direccin se guarda en la variable auxiliar) el cual se liga con el ultimo nodo de la lista. Por ultimo, se define el valor del puntero al ltimo elemento con la direccin del nuevo nodo. Eliminacin en listas doblemente ligadas Consiste en encontrar el valor a quitar, establecer las listas correspondientes entre el nodo que le precede y el que le sucede, y finalmente liberar la seccin de memoria ocupada por el nodo en cuestin. Se pueden presentar algunas variantes segn la pasin que el elemento tenga en la lista.

Eliminacin del primer elemento de la lista El nodo a eliminar debe ser eliminado por una variable auxiliar, luego se debe redefinir el primero con la direccin de su sucesor y finalmente se libera la porcin de memoria ocupado en el dato que se quito de la lista. El mtodo contempla el caso de que la lista tenga un solo elemento. Luego de la eliminacin la lista queda vaca.

Eliminacin del ltimo elemento de la lista El nodo a eliminar debe ser apuntado por la variable auxiliar, luego se debe redefinir el ltimo con la direccin de su predecesor y finalmente se libera la porcin de memoria ocupada por el nodo.

Eliminacin de un elemento en la lista Primero se debe buscar el nodo cuyo contenido sea igual al dato. Si se encuentra, se guarda su direccin en una variable auxiliar y se establecen las ligas correspondientes entre su nodo predecesor y su nodo sucesor, finalmente se libera la memoria ocupada por el nodo. El nodo a eliminar puede ocupar cualquier posicin de la lista.

Bsqueda de elementos en listas doblemente ligadas La operacin de bsqueda de un dato entre los elementos de una lista consiste en recorrer la lista de izquierda a derecha (a partir del elemento) o de derecha a izquierda(a

38

Estructura de Datos 2009


partir del ultimo elemento) hasta encontrar el dato buscado o hasta que ya no queden nodos por visitar.

3.1.3 Listas Enlazadas Circulares En una lista enlazada circular, el primer y el ltimo nodo estn unidos juntos. Esto se puede hacer tanto para listas enlazadas simples como para las doblemente enlazadas. Para recorrer un lista enlazada circular podemos empezar por cualquier nodo y seguir la lista en cualquier direccin hasta que se regrese hasta el nodo original. Desde otro punto de vista, las listas enlazadas circulares pueden ser vistas como listas sin comienzo ni fin. Este tipo de listas es el ms usado para dirigir buffers para ingerir datos, y para visitar todos los nodos de una lista a partir de uno dado.

Diagrama de una lista enlazada circular.

Listas enlazadas circulares simples Cada nodo tiene un enlace, similar al de las listas enlazadas simples, excepto que el siguiente nodo del ltimo apunta al primero. Como en una lista enlazada simple, los nuevos nodos pueden ser solo eficientemente insertados despus de uno que ya tengamos referenciado. Por esta razn, es usual quedarse con una referencia solamente al ltimo elemento en una lista enlazada circular simple, esto nos permite rpidas inserciones al principio, y tambin permite accesos al primer nodo desde el puntero del ltimo nodo.

Lista Enlazada Doblemente Circular En una lista enlazada doblemente circular, cada nodo tiene dos enlaces, similares a los de la lista doblemente enlazada, excepto que el enlace anterior del primer nodo apunta al ltimo y el enlace siguiente del ltimo nodo, apunta al primero. Como en una lista doblemente enlazada, las inserciones y eliminaciones pueden ser hechas desde cualquier punto con acceso a algn nodo cercano. Aunque estructuralmente una lista circular doblemente enlazada no tiene ni principio ni fin, un puntero de acceso externo puede

39

Estructura de Datos 2009


establecer el nodo apuntado que est en la cabeza o al nodo cola, y as mantener el orden tan bien como en una lista doblemente enlazada.

Listas Circulares Una lista circular es una lista lineal en la que el ltimo elemento apunta al primero. Entonces es posible acceder a cualquier elemento de la lista desde cualquier punto dado. Notar que el aadir en una lista circular se reduce a un solo caso, y no dos como era con las listas enlazadas, que eran insertar al comienzo e insertar a continuacin de un elemento. Los mtodos implementados son: tamao, devolviendo el n de elementos de la lista, aadir al principio, aadir al final, borrar y obtener.

Ventajas de usar listas: Ventajas de usar listas: Las listas son dinmicas, es decir, podemos almacenar en ellas tantos elementos como necesitemos, siempre y cuando haya espacio suficiente espacio en memoria. Al insertar un elemento en la lista, la operacin tiene un tiempo constante independientemente de la posicin en la que se inserte, solo se debe crear el nodo y modificar los enlaces. Esto no es as en los arreglos, ya que si el elemento lo insertamos al inicio o en medio, tenemos un tiempo lineal debido a que se tienen que mover todos los elementos que se encuentran a la derecha de la posicin donde lo vamos a insertar y despus insertar el elemento en dicha posicin; solo al insertar al final del arreglo se obtienen tiempos constantes. Al eliminar un elemento paso lo mismo que se menciono en el punto anterior.

Desventajas de usar listas: El acceso a un elemento es ms lento, debido a que la informacin no est en posiciones contiguas de memoria, por lo que no podemos acceder a un elemento con base en su posicin como se hace en los arreglos.

40

Estructura de Datos 2009


3.1.4 Lista enlazada Multilistas Conjunto de nodos en que algunos tienen ms de un puntero y pueden estar en ms de una lista simultneamente. Para cada tipo de nodo es importante distinguir el distinto campo puntero para realizar los recorridos adecuados y evitar confusiones. Estructura bsica para Sistemas de Bases de Datos en Red. Implementacin de Multilistas Dados dos tipos de entidades, TipoA y TipoB, se necesitan: Dos nuevos tipos correspondientes a los nodos para cada clase de entidad, que junto con la informacin propia de la entidad incluyen los punteros necesarios para mantener la estructura. typedef struct NodoTipoA { TipoA Info; NodoRelacion *PrimerB; } NodoTipoA; typedef struct NodoTipoB{ TipoB Info; NodoRelacion *PrimerA; } NodoTipoB;

Una estructura para agrupar los objetos de cada tipo de entidad (Array, Lista, rbol, Tabla Hash). Un TDA Nodo Relacin que incluye un puntero por cada lista as como informacin propia de la relacin. typedef struct NodoRelacion { NodoTipoA *SiguienteA; NodoTipoB *SiguienteB; <tipo1> campo1; ........ <tipon> campo_n; } NodoRelacion;

41

Estructura de Datos 2009

Un nodo Multilista que engloba los distintos tipos de nodos (entidad A, entidad B y relacin). El tipo de dato para construir esto es el registro variante: typedef enum {NODO_A, NODO_B, NODO_ML} TipoNodo; typedef struct NodoMultilista { TipoNodo tipo; union { NodoTipoA a; NodoTipoB b; NodoRelacion nr; } cont; } NodoMultilista;

Consultas Diagrama de una aplicacin utilizando multilistas y sus similares. Inversa Multilista Multianillo

Secuencial

Relativo

Directo

Secuencial indexado

Supervisor de E/S

Procesador de E/S

Base de datos

42

Estructura de Datos 2009


3.1.5 Clases para la Implementacin de Listas LinkedList es una lista vinculada de uso general. Admite los enumeradores e implementa la interfaz ICollection, de forma coherente con las dems clases de colecciones de .NET Framework. LinkedList es una lista verdaderamente vinculada con nodos independientes de tipo LinkedListNode, por lo que la insercin y la eliminacin son operaciones O (1). Las listas que contienen tipos de referencia tienen un rendimiento mejor si un nodo y su valor se crean al mismo tiempo. Como se exponen los nodos subyacentes, es posible quitar nodos y volverlos a insertarlos en la misma lista o en otra, como una operacin O(1) sin asignaciones en el montn GC. La lista tambin mantiene un contador interno de modo que la obtencin de la propiedad Count es una operacin O(1); el contador es coherente siempre y cuando la lista se utilice a partir de un nico subproceso. La clase LinkedList no admite el encadenamiento, las divisiones, los ciclos u otras caractersticas que puedan hacer que la lista pierda su coherencia. El diseo favorece el mantenimiento de la integridad de la lista, la cual conserva la coherencia en las operaciones con un solo subproceso. El nico escenario multiproceso que admite LinkedList son las operaciones de lectura multiproceso. En otros escenarios multiproceso, debe proporcionar su propia sincronizacin.

Nota Siempre es posible crear listas vinculadas que rindan mejor en circunstancias concretas o que hagan concesiones a la seguridad en la programacin en favor de las caractersticas adicionales.

Cada nodo de la coleccin LinkedList es del tipo LinkedListNode. Dado que la coleccin LinkedList est doblemente vinculada, cada nodo seala hacia delante al nodo Next y hacia atrs al nodo Previous. Los nodos estn vinculados a la lista, de modo que las operaciones no vlidas en la lista (por ejemplo, el intento de borrar un nodo que realmente se encuentre en otra lista) no provocan ningn estado de falta de coherencia.

43

Estructura de Datos 2009


LinkedList acepta referencia de objeto null (Nothing en Visual Basic) como Value vlido para los tipos de referencia y admite valores duplicados. Si la coleccin LinkedList est vaca, las propiedades First y Last contienen referencia de objeto null (Nothing en Visual Basic). Ejemplo En el ejemplo de cdigo siguiente se muestran muchas caractersticas de la clase LinkedList. En este ejemplo se crea una matriz de cadenas y, a continuacin, se crea y rellena una lista LinkedList de cadenas pasando la matriz de cadenas al constructor LinkedList(IEnumerable genrico). En el ejemplo de cdigo se manipula la lista vinculada resultante mediante las propiedades y mtodos de la clase LinkedList, mostrando los resultados que se producen entre las operaciones. 4.1 Definicin de rboles Un rbol (tree) es un T.D.A. que consta de un conjunto finito T de nodos y una relacin R (paternidad) entre los nodos tal que: Hay un nodo, especialmente designado, llamado la raz del rbol T. Los nodos restantes, excluyendo la raz, son particionados en m (m 0) conjuntos disjuntos T1, T2, Tm, cada uno de los cuales es, a su vez, un rbol, llamado subrbol de la raz del rbol T.

44

Estructura de Datos 2009


4.1.2.2 rboles binarios Los rboles binarios son el caso particular ms simple. Son usados para representar ciertos tipos de expresiones algebraicas, algoritmos, bsquedas y ordenamientos. En un rbol binario cada nodo puede tener como mximo dos subrboles y siempre es necesario distinguir entre el subrbol izquierdo y el subrbol derecho. Formalmente podemos definir un rbol binario de tipo T como una estructura homognea que es la concatenacin de un elemento de tipo T, llamada raz, con dos rboles binarios disjuntos. Una forma particular de rbol binario puede ser la estructura vaca. Los rboles binarios se clasifican en cuatro tipos que son: distintos, similares, equivalentes y completos. Cuando dos rboles binarios se dice que son similares si tiene la misma estructura y son equivalentes si son similares y contienen la misma informacin. En caso contrario se dice que estos rboles son distintos. Un rbol binario esta equilibrado si la altura de los dos subrboles de cada nodo del rbol se diferencia en una unidad como mximo.

4.1.3 Recorrido en rboles binarios Preorden Una vez construido un rbol binario surge la necesidad de recorrerlo, es decir una manera sistemtica de visitar cada nodo del rbol. La forma en la cual una lista lineal se recorre es (del primero al ltimo, o viceversa). Sin embargo, para recorrer un rbol, esta forma natural no puede aplicarse. A continuacin se visita subrbol derecho A, que es un rbol que contiene los nodos C, F y G. De nuevo siguiendo el orden NID, se visita primero el nodo C, a continuacin F y por ultimo G.

A B C

Recorrido de preorden en un rbol binario. Vista de nodos: A, B ,D, E, C, F, G.

45

Estructura de Datos 2009


Para recorrer un rbol, existen varias formas de lograrlo, las 3 ms comunes son preorden, inorden y postorden. Estos mtodos difieren en el orden en el cual los nodos son visitados. Siguiendo la costumbre de empezar a visitar antes lo que se encuentra a la izquierda que lo de la derecha, se tienen 3 posibilidades de visitar a la raz (antes, en medio o despus).

Considere el siguiente rbol para los ejemplos.


20

15

33

10

18

25

50

12

17

19

21

27

40

70

El resultado que se obtiene al recorrer el rbol en preorden: 20, 15 10, 5, 12, 18, 17, 19, 33, 25, 21, 27, 50, 40, 70 inorden: 5, 10, 12, 15, 17, 18, 19, 20, 21, 25, 27, 33, 40, 50, 70 postorden: 5, 12, 10, 17, 19, 18, 15, 21, 27, 25, 40, 70, 50, 33, 20 Aunque la recursividad resulta natural en los mtodos anteriores, es posible implementarlos por medio de una pila. A continuacin se presenta un mtodo para recorrer un rbol en preorden.

46

Estructura de Datos 2009


4.2 Definicin de Grafos Un grafo, en concreto un tipo abstracto de datos (TAD), que consiste en un conjunto de nodos (tambin llamados vrtices) y un conjunto de arcos (aristas) que establecen relaciones entre los nodos. El concepto de grafo TAD desciende directamente del concepto matemtico de grafo. Informalmente se define como G = (V, E), siendo los elementos de V los vrtices, y los elementos de E, las aristas. Formalmente, un grafo, G, se define como un par ordenado, G = (V, E), donde V es un conjunto finito y E es un conjunto que consta de dos elementos de V. Un grafo consta de vrtices (o nodos) y aristas. Los vrtices son objetos que contienen informacin y las aristas son conexiones entre vrtices. Para representarlos, se suelen utilizar puntos para los vrtices y lneas para las conexiones, aunque hay que recordar siempre que la definicin de un grafo no depende de su representacin. Un camino entre dos vrtices es una lista de vrtices en la que dos elementos sucesivos estn conectados por una arista del grafo. As, el camino AJLOE es un camino que comienza en el vrtice A y pasa por los vrtices J,L y O (en ese orden) y al final va del O al E. El grafo ser conexo si existe un camino desde cualquier nodo del grafo hasta cualquier otro. Si no es conexo constar de varias componentes conexas. Un camino simple es un camino desde un nodo a otro en el que ningn nodo se repite (no se pasa dos veces). Si el camino simple tiene como primer y ltimo elemento al mismo nodo se denomina ciclo. Segn el nmero de aristas que contiene, un grafo es completo si cuenta con todas las aristas posibles (es decir, todos los nodos estn conectados con todos), disperso si tiene relativamente pocas aristas y denso si le faltan pocas para ser completo.

4.2.2 Tipos de Grafos Grafo regular: Aquel con el mismo grado en todos los vrtices. Si ese grado es k lo llamaremos k-regular. Grafo bipartito: Es aquel con cuyos vrtices pueden formarse dos conjuntos disjuntos de modo que no haya adyacencias entre vrtices pertenecientes al mismo conjunto. Grafo completo: Aquel con una arista entre cada par de vrtices. Un grafo completo con n vrtices se denota Kn.

47

Estructura de Datos 2009


Las aristas son la mayor parte de las veces bidireccionales, es decir, si una arista conecta dos nodos A y B se puede recorrer tanto en sentido hacia B como en sentido hacia A: estos son llamados grafos no dirigidos. Sin embargo, en ocasiones tenemos que las uniones son unidireccionales. Estas uniones se suelen dibujar con una flecha y definen un grafo dirigido. Cuando las aristas llevan un coste asociado (un entero al que se denomina peso) el grafo es ponderado. Una red es un grafo dirigido y ponderado. 4.2.3 Representacin de Grafos en Memoria
Diagrama representativo de un grafo.

Referencias TDA http://www.ldc.usb.ve/~gabro/teaching/CI2126/TADPilaLista.pdf Estructura de Datos http://www.programacion.com/java/tutorial/jap_data_alg/2/ Estticas y Dinmicas http://www.lcc.uma.es/~jlleivao/algoritmos/t4.pdf http://plataforma.cbtis122.net/mod/resource/view.php?id=1191 Pilas http://www.reloco.com.ar/prog/java/collections.html

48

You might also like