Documente Academic
Documente Profesional
Documente Cultură
Codigo: 160345.
LISTAS
INTRODUCCION
En esta monografía se vera la estructura de datos lista sus variantes como: lista ordenada y lista
doble; así como también su implementación recursiva. Se hace énfasis en la forma de
implementación recursiva para este tema ya que los mecanismos de abstracción son mucho
mejores y sencillos a la hora de su entendimiento, diseño, implementación y aplicación.
Conceptos básicos
Para representar colecciones de objetos en el mundo real se utilizan las listas ya que son las
estructuras más generales para representar estas colecciones. Las aplicaciones van desde lo
más básico como modelar listas de personas a aplicaciones más técnicas y específicas como
traducción de lenguajes de programación, simulación, etc.
Es conveniente modelar un TAD lista se utiliza el enfoque dinámico que posibilita un TAD flexible
ya que este puede crecer o acortarse según se requiera y los elementos pueden añadirse o
suprimirse en cualquier posición y no necesariamente como en el caso de las listas estáticas en
una memoria contigua.
L = {a1, a2,…, an}, donde a1 es el i-esimo elemento de la lista, entendiéndose que un elemento de
una lista representa la información de un objeto. Con ser una lista “dinámica” quiere decir a que
los elementos pueden cambiar con el tiempo.
Lista Homogénea.- Cuando los elemento de la lista son del mismo tipo.
Lista heterogénea.- Cuando los elementos almacenados de una lista son de diferente tipo;
algunos números otros texto.
Representación de Listas
Existen varias formas una de las cuales es mediante nodos un nodo esta constituido por 2 partes
la primera almacena información la segunda es un puntero que almacena dirección del siguiente
elemento
Las listas son una secuencia de nodos enlazados. Por ejemplo una lista de nombre puede ser
Una desventaja seria que esta forma requiere dos implementaciones. Por ejemplo, si se utiliza
lenguaje orientado a objetos primero se necesita implementar una clase para el nodo y otra para
la lista.
Enfoque Recursivo
Con los nuevos paradigmas y el avance tecnológico frecuente es conveniente replantar enfoques
de mayor y mejor abstracción. Se representara las listas en un mayor nivel recursivo.
A su vez:
La representación de una lista es mucha más clara y simple y solo se necesita una
única clase.
Lista Ordenada
- Visión del conceptor
Extiende a: CLista
Conjunto de Operaciones
- Operaciones primitivas: Los mismos del TAD lista
- Operaciones derivadas: Además de las del TAD Lista, se tiene
Agregar: Objeto x Lista Lista
Se debe modificar el comportamiento de las siguientes operaciones
Axiomas
Definición de variables:
Lista: CListaOrdenada
Lista doble
Visión del conceptor: Diseño del TAD Lista Doble
Una lista con la propiedad de que se pueda recurrir de inicio a fin y de fin a inicio. Esto
hace que cada nodo tenga 2 apuntadores uno anterior y otro posterior. Gráficamente
se puede representar como:
Puntero al Puntero al
Primer nodo ultimo nodo
Una lista doble necesita guardar la dirección del primer nodo y del último nodo, esto
dará la propiedad de ir de inicio a final de final a inicio. Al hacer esto se necesita
metidos que permitan acceder del anterior nodo al posterior nodo. Luego será
necesario guardar la dirección del nodo actual.
EJEMPLO COLA
package
tech.alvarez;
import java.util.PriorityQueue;
import java.util.Queue;
public class Main {
package
tech.alvarez;
public class Persona implements
Comparable<Persona> {
private String nombre;
private int tipo; // 1 normal, 2 tercera edad,
3 embarazada
public Persona(String nombre, int tipo) {
this.nombre = nombre;
this.tipo = tipo;
}
public String getNombre() {
return nombre;
}
public void setNombre(String nombre) {
this.nombre = nombre;
}
public int getTipo() {
return tipo;
}
public void setTipo(int tipo) {
this.tipo = tipo;
}
@Override
public int compareTo(Persona o) {
if (tipo < o.getTipo()) {
return 1;
} else if (tipo > o.getTipo()) {
return -1;
} else {
return 0;
}
}
}
EJEMPLO PILA
public Pila() {
inicio =null;
}
if(!vacio()){
int tope=inicio.getDato();
return tope;
}else{
while(aux!=null){
System.out.println(aux.getDato());
aux = aux.getSiguiente();
}
}
}