P. 1
Resume n List as Enl Azad As

Resume n List as Enl Azad As

|Views: 1|Likes:

More info:

Published by: Reynaldo Gonzalo Coca Rojas on Apr 10, 2013
Copyright:Attribution Non-commercial

Availability:

Read on Scribd mobile: iPhone, iPad and Android.
download as PDF, TXT or read online from Scribd
See more
See less

04/10/2013

pdf

text

original

Resumen Listas Enlazadas

Estructuras Dinámicas de Datos
Las estructuras dinámicas de datos son estructuras que crecen a medida que se ejecuta un programa. Al contrario de un arreglo que contiene un espacio de memoria determinado para almacenar un número fijo de elementos, asignado al inicio de un programa, una estructura dinámica de datos se elementos. amplia y contrae durante la ejecución de un programa según sea la necesidad de agregar o eliminar Una estructura dinámica de datos es una colección de elementos llamados nodos que están

objeto) y otro campo denominado enlace que almacena la referencia al próximo nodo.

conectados entre sí por enlaces de apuntador (referencias a objetos). Un nodo (Figura 1) es una estructura de datos que contiene dos campos, un campo que almacena el dato (dato primitivo u

dato

enlace

Figura 1. Estructura de un nodo Implementación de una clase Nodo Con campo de dato primitivo int public class Nodo { public int dato; public Nodo enlace; public Nodo(int d) { dato = d; enlace = null; } public Nodo(int d, Nodo e) { dato = d; enlace = e; } } } Con campo de dato genérico Object public class Nodo { public Object dato; public Nodo enlace; public Nodo(Object d) { dato = d; enlace = null; } public Nodo(Object d, Nodo e) { dato = d; enlace = e; }

Listas enlazadas
Una lista enlazada (Figura 2) es un conjunto lineal de objetos de una clase llamada Nodo. Una lista enlazada se accesa por medio de una referencia al primer nodo de la lista, generalmente llamado cab. Los nodos subsiguientes se accesan por medio del campo de enlace que esta almacenado en cada nodo. Por convención el enlace del último nodo de la lista se establece a null para marcar el final de la lista. cab Referencia al primer nodo dato enlace dato enlace dato null enlace

Figura 2. Lista enlazada
Universidad de Carabobo. Facultad de Ingeniería. Departamento de Computación. Computación Avanzada. 1-2006.

Listas Enlazadas 2 En una lista enlazada. while (aux != null){ s+= aux. A cab se le asigna la referencia al nuevo Universidad de Carabobo. Las listas enlazadas tienen la desventaja que por cada dato de la lista requiere almacenar en la estructura. return this.cab). } public boolean vacia(){ return cab == null. los datos se almacenan dinámicamente y cada nodo se crea conforme se necesita. 1-2006. } return s.println("Lista\n"+this). Facultad de Ingeniería. } public void visualizar(){ System. Nodo aux = cab. Implementación de una clase Lista public class Lista { private Nodo cab. . Una lista enlazada es adecuada cuando es impredecible el número de datos a insertando cada nuevo dato en el punto adecuado de la lista sin necesidad de mover los elementos existentes en la lista. que se realiza directamente calculando la posición del elemento con respecto a la dirección de inicio del arreglo. Clasificación Las listas enlazadas se clasifican en: Listas enlazadas simples.dato+"\t".out. doblemente enlazadas. } public Nodo getCab(){ return cab. Departamento de Computación. circulares simplemente enlazadas y circulares doblemente enlazadas. } Operaciones básicas en una lista enlazada: ƒ Insertar un nodo en la cabecera de la lista public Lista insertarCab(int d){ cab = new Nodo(d. } Se crea un nuevo nodo con el enlace apuntando al elemento apuntado por cab (el primero de la nodo creado. } public String toString(){ String s = "".enlace. Computación Avanzada. public Lista() { cab = null. Las listas enlazadas pueden mantenerse de forma ordenada simplemente de un espacio de memoria para el enlace al próximo dato. adicionalmente la asignación dinámica de memoria incurre en la sobrecarga de llamadas a función a diferencia del acceso a un elemento de un arreglo. Las listas de datos pueden almacenarse en arreglos. pero las listas enlazadas proporcionan varias ventajas. lista). aux = aux.

ultimo. Retorna null si la lista esta vacía. Si la lista esta vacía lanza una excepción. while (aux != null){ ultimo = aux. retorna null. } ƒ Insertar un nuevo nodo al final de la lista. Si la lista esta vacía inserta el dato d en la cabecera de la lista. } return ultimo. } ƒ Accesar un dato almacenado en un nodo específico. else{ Nodo aux = cab.dato!= d)) aux = aux.Listas Enlazadas 3 ƒ Determinar la referencia al último nodo de la lista aux se utiliza para recorrer la lista y ultimo se utiliza para guardar la referencia al nodo anterior al referenciado por aux. Sino crea un nuevo nodo con enlace a null y lo enlaza con el último nodo de la lista. /* Busca y retorna la referencia al nodo que almacena un valor d */ public Nodo buscarDato(int d) throws Exception{ if (vacia()) throw new Exception("Lista vacía"). /* Inserta un nodo al final de la lista */ public Lista insertarFinal(int d){ if (vacia()) insertarCab(d).enlace. aux se utiliza para recorrer la lista e ir accesando cada campo dato para compararlo con d. } return this. Departamento de Computación. Facultad de Ingeniería. else{ Nodo ultimo = ultimoNodo(). return aux. .enlace = new Nodo(d). /* Busca y retorna la referencia al último nodo de la lista. Nodo ultimo = null.enlace. si la lista esta vacía retorna null*/ public Nodo ultimoNodo(){ Nodo aux = cab. Universidad de Carabobo. } } Sino encuentra el dato d. 1-2006. Computación Avanzada. while((aux != null) && (aux. aux = aux.

retorna la referencia del nodo anterior a d. aux = aux. Facultad de Ingeniería. Nodo aux = cab. } }} De este modo si retorna null.dato!= d)){ anterior = aux. determina la referencia al nodo anterior a d. aux = aux.enlace. Sino. else{ if (buscarDato(d)==null) throw new Exception(d + "no encontrado"). Si encuentra el dato d.Listas Enlazadas 4 ƒ Eliminar un nodo existente que contiene una información en particular.dato!= d)){ anterior = aux. a se utiliza para almacenar la referencia al nodo anterior y b para almacenar la referencia al nodo que almacena d. es porque el dato d esta en el primer nodo de la lista. } } Si d se encuentra en el Si d no existe retorna la referencia al último nodo de la lista. public Nodo nodoAnterior(int d) throws Exception{ if (vacia()) throw new Exception("Lista vacía"). /* Busca y retorna la referencia al nodo anterior al nodo que almacena un valor d*/ public Nodo nodoAnterior(int d) throws Exception{ if (vacia()) throw new Exception("Lista vacía"). Si la lista esta vacía lanza una excepción. Este método se puede modificar para que retorne una excepción cuando d no se encuentre en la lista. else{ Nodo anterior = null. 1-2006. Nodo aux = cab. else a. .enlace.enlace. } } Si d no existe (b == null) ƒ Obtener la referencia al nodo anterior a un nodo que almacena un valor d. Universidad de Carabobo. si la referencia al anterior es null significa que d esta en el primer nodo de la lista. } return anterior.enlace. else{ Nodo anterior = null.enlace = b. Si la lista esta vacía lanza una excepción. Computación Avanzada. else{ Nodo b = buscarDato(d). /* Elimina el nodo cuyo dato sea igual a un valor d que recibe como parámetro*/ public Lista eliminarDato(int d) throws Exception{ if (vacia()) throw new Exception("Lista vacía"). } return anterior. aux se utiliza para recorrer la lista y anterior se utiliza para guardar la referencia al nodo anterior al referenciado por aux. if (a == null) cab = cab. no hace nada. if (b != null){ Nodo a = nodoAnterior(d). } return this. Departamento de Computación. while((aux != null) && (aux. primer nodo retorna null. while((aux != null) && (aux.

Facultad de Ingeniería. . else anterior. else a. } } return this. } a se utiliza para almacenar la referencia al nodo anterior y b para almacenar la referencia al nodo que almacena d. inserta v en la cabecera.enlace). Sino crea un nuevo nodo con d y lo enlaza Universidad de Carabobo. es porque d es el primero de la lista.enlace. Departamento de Computación.anterior. para mantener el Para ello. aux = aux.enlace = new Nodo(v. if (b != null){ Nodo a = nodoAnterior(d). Si lo encuentra.Listas Enlazadas 5 ƒ Insertar un dato v en una posición anterior a un nodo que almacena un dato d. 1-2006.enlace). } return this. if (a == null) insertarCab(v).dato)){ anterior = aux. Sino crea un nuevo nodo y lo enlaza. Si d no existe no inserta v. Sino determina la posición donde debe insertar d orden. determina la referencia al donde debe nodo anterior a insertar.enlace = new Nodo(d. Nodo anterior = null. } if (anterior == null) insertarCab(d). /* * Inserta un dato d manteniendo la lista ordenada * en orden ascendente * si la lista esta vacía. Si d es menor que el dato del primer nodo (anterior == null) inserta d en la cabecera. Si a==null. lo inserta en la cabecera */ public Lista insertarOrd(int d){ if (vacia()) insertarCab(d). } Si la lista está vacía inserta d en la cabecera. /* Inserta un nodo con dato v antes de un nodo cuyo dato sea igual a un valor d que recibe como parámetro*/ public Lista insertarAntes(int v. entones lo inserta en la cabecera. Sino busca determina el valor de b. ƒ Insertar un dato d manteniendo la lista ordenada ascendentemente. determina el valor de a.a. Computación Avanzada. Si la lista esta vacía. while((aux != null) && (d > aux. int d) throws Exception{ if (vacia()) insertarCab(v). else{ Nodo aux = cab. else{ Nodo b = buscarDato(d).

} return s. }} Universidad de Carabobo.*. Last Input First Output). } /** agrega un dato en el tope de la pila*/ public Pila push(int d){ tope = new Nodo(d. return this. Una pila (stack) es un tipo especial de una lista enlazada.Listas Enlazadas 6 Pilas agregarse o eliminarse por la cabecera de la lista. } /** retira el dato del tope de la pila*/ public Pila pop() throws Exception{ if (vacia()) throw new Exception("Pila vacía"). generalmente llamado tope o cima de la pila. Implementación de una clase Pila import listasEnlazadas. 1-2006.enlace.dato + "\n". Nodo aux = tope. } public boolean vacia(){ return tope == null. } public Nodo getTope(){ return tope. public class Pila { private Nodo tope. Departamento de Computación. ya que los nuevos nodos sólo pueden //para usar Nodo de int Solo se permite el acceso al elemento ubicado en el tope de la Pila tanto para eliminarlo (pop) como para agregarlo (push). else return tope.enlace.dato. public Pila() { tope = null. tope). } /** retorna el dato ubicado en el tope de la pila*/ public int info() throws Exception{ if (vacia()) throw new Exception("Pila vacía"). Computación Avanzada. aux = aux. . return this. } public String toString(){ String s = "". Se caracteriza por ser una estructura LIFO (último en entrar primero en salir. while (aux != null){ s+= aux. Facultad de Ingeniería. else tope = tope. La referencia al primer Nodo es tope.

Implementación de una clase Cola import listasEnlazadas. Departamento de Computación.*. cada extraen elementos de una Cola. } public String toString(){ String s = "". } public boolean vacia(){ return primero == null. 1-2006. Computación Avanzada. . ultimo = primero. En una cola implementada con una lista enlazada. ultimo = ultimo. } } Universidad de Carabobo. Una cola (queue) es similar a una cola de personas para comprar entradas al cine.enlace. las nuevas personas que lleguen deben agregarse al final de la cola. acceso al primer elemento ultimo que referencia al ultimo nodo de la lista y facilita las operaciones de acceso al ultimo elemento de la cola. Nodo aux = primero. es la primera en ser atendida. } /* elimina un elemento ubicado al inicio de la cola*/ public Cola salir(int d) throws Exception{ if (vacia()) throw new Exception("Cola vacía"). Se caracteriza por ser una estructura FIFO (primero en entrar primero en salir. else{ primero = primero. First Input First Output).enlace = new Nodo(d). while (aux != null){ s+= aux. la primera persona //para usar Nodo de int Se utilizan dos apuntadores: primero que referencia el primer nodo de la lista y facilita las operaciones de de la cola. } return s.dato + "\t".Listas Enlazadas 7 Colas que está en la cola. if (primero == null) ultimo = null. }else{ ultimo. } return this.enlace. } /* agrega un elemento al final de la cola */ public Cola entrar(int d){ if (vacia()){ primero = new Nodo(d). los nodos de una cola se eliminan solamente desde el inicio de la lista y se insertan solamente al final de la lista. Facultad de Ingeniería. public Cola() { primero = null. private Nodo ultimo.enlace. aux = aux. ultimo = null. public class Cola { private Nodo primero. } return this. Es muy importante mantener actualizados vez que se agregan o estos apuntadores.

Determinar la frecuencia de aparición de cada una de las palabras en el texto. Facultad de Ingeniería. orden inverso. El primer nodo de la nueva Lista almacenará cero. 1-2006. Agregar un método a la clase Lista que modifique el campo dato del n-ésimo nodo de una lista enlazada por un valor dado x. Computación Avanzada. 5. porque es la distancia con respecto a sí mismo. Se tiene que la frecuencia de aparición de cada palabra es: los 3 nnn libros 1 nnn llevo 1 nnn mañana 2 nnn compro 1 null Universidad de Carabobo. Escriba un programa que dada una línea de texto utilice un objeto de pila para imprimir la pila en 3. nodo de una lista enlazada y un método que realice la inserción contigua a la derecha del n-ésimo 6. Agregar un método a la clase Lista que realice la inserción contigua a la izquierda del n-ésimo nodo. que contenga una copia de la primera lista. Utilice la clase Lista del package listaGenerica y utilice el método distance de la clase Point para calcular la distancia entre puntos.Listas Enlazadas 8 Ejercicios propuestos 1. Desarrollar un programa que cree una lista enlazada de 10 caracteres y luego cree un segundo objeto de lista. public Lista concatenar(Lista obj) Por ejemplo: Lista a cab 10 12 14 null Lista b cab 100 200 null Lista concatenada cab 10 12 14 100 200 null 4. Agregar un método concatenar a la clase Lista para concatenar dos Listas. Departamento de Computación. Dados un conjunto de puntos pertenecientes a un plano. para el texto: los libros los llevo mañana los compro mañana. Se tiene almacenada cada palabra de un texto en una lista enlazada. Desarrollar un programa que cree una lista de objetos Point y obtenga en una nueva Lista la distancia existente entre cada punto (Point) de la lista y el primer punto (Point) almacenado en la lista. 7. pero en orden inverso. . 2. Por ejemplo.

You're Reading a Free Preview

Download
scribd
/*********** DO NOT ALTER ANYTHING BELOW THIS LINE ! ************/ var s_code=s.t();if(s_code)document.write(s_code)//-->