Vous êtes sur la page 1sur 6

Nombre: Alfonso Alejandro Sevilla Hidalgo.

Curso: Programación Digital II.

Tema: Monografia Lista, ejemplo de cola y pila.

Facultad: Ing. Electronica, Sistemas, Electrica y Mecanica.

Carrera Prof.: Ingeniería Electronica.

Prof.: Henry Samuel Dueñas de la Cruz.

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.

Una lista puede representarse como una n-tupla dinámica ordenada:

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.

Se tendrá 2 clases de listas:

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

Parte de la Dirección del


información siguiente elemento
La “parte de la información” tiene una longitud (un numero de bytes) variable depende del tipo de
información que almacena. Puede almacenar información tipo texto, numérico, registro o
cualquier otro tipo. En cambio la “Dirección del siguiente elemento” siempre tiene un tamaño fijo
y es de tipo puntero esta almacenada dirección de memoria que es del siguiente elemento.

Las listas son una secuencia de nodos enlazados. Por ejemplo una lista de nombre puede ser

Cusco Ica Puno Tacna

Esta forma de representación es más adecuada para implementaciones iterativas. Ha sido


empleado en lenguajes orientados objetos y en lenguajes del paradigma estructurado. En
algunos lenguajes se ofrece incluso unidades adicionales bajo este enfoque como en el caso de
JAVA.

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.

La definición recursiva de una lista es:

Listan elementos = Primer elemento + Listan elementos

Gráficamente se puede representar como por ejemplo, una lista de 4 elementos:

Cusco Ica Tacna Puno nulo

Lista 4 elementos = Cusco + Lista 3 elementos

A su vez:

Lista 3 elementos = Ica + Lista 2 elementos y así sucesivamente…

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

Nombre del TAD: CLista Ordenada

Extiende a: CLista

Descripción genérica del TAD: Una lista ordenada ascendentemente es una


secuencia de elementos ordenados.

Lista = (elemento1, elemento2, … , elementoa)

Dónde: elemento1 <= elemento2 <= elementoa

Descripción formal del TAD

Nombre del TAD: CListaOrdenada

Elementos: Los mismos del TAD 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

Insertar: Objeto x Entero x Lista  Lista


Ubicación: Objeto x Lista  Entero

Axiomas

Definición de variables:

e1, e2, e3 : Objeto

Lista: CListaOrdenada

ubicación(e1, lista)<ubicación(e2,lista), para todo e1,e2/e1<e2

Lista doble
Visión del conceptor: Diseño del TAD Lista Doble

Nombre del TAD: CListaDoble

Descripción genérica del TAD

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:

Cusco Tacna Ica

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 {

public static void main(String[] args) {


Queue<Persona> cola = new PriorityQueue<Persona>();
cola.add(new Persona("Daniel", 1));
cola.add(new Persona("Katherine", 3));
cola.add(new Persona("Julio", 2));
cola.add(new Persona("Maria", 1));
while (!cola.isEmpty()) {
Persona a = cola.remove();
System.out.println(a.getNombre() + " " + a.getTipo());
}
}
}

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;
}

public void push(int dato){


Nodo nuevo= new Nodo(dato);
nuevo.setSiguiente(inicio);
inicio=nuevo;
}

public int pop(){


Nodo aux=inicio;
inicio=inicio.getSiguiente();
aux.setSiguiente(null);
return aux.getDato();
}

public boolean vacio(){


if(inicio==null){
System.out.println("Esta vacio");
return true;
}else{
System.out.println("No esta vacio");
return false;
}
}
public int size(){
Nodo aux = inicio;
int count = 0;
while(aux!=null){
aux = aux.getSiguiente();
count++;
}
return count;
}

public int tope()throws Exception{

if(!vacio()){
int tope=inicio.getDato();
return tope;
}else{

throw new Exception("La lista esta vacia");


}

public void imprimir(){


Nodo aux = inicio;

while(aux!=null){
System.out.println(aux.getDato());
aux = aux.getSiguiente();

}
}
}