You are on page 1of 17

TAD Lineales

TAD Listas Simples TAD Listas doblemente Enlazadas TAD Pilas TAD Colas

ED Estticas vs. ED Dinmicas


Estructuras de datos estticas:
Su caracterstica esencial es que la cantidad de memoria que ocupan se determina a priori en el momento de escribir el programa. Durante la ejecucin del programa no se puede incrementar la cantidad de memoria que utilizan. Conllevan una utilizacin ineficiente de la memoria.

Estructuras de datos dinmicas:


Pueden aumentar o reducir su tamao (ocupacin en memoria) durante la ejecucin del programa. Ocupan tanta memoria como utilizan realmente.
-2

TAD Listas Simples


LISTA = coleccin de elementos homogneos ordenada segn su posicin tal que: Cada elemento de la lista, a excepcin del primero, tiene un nico predecesor Cada elemento de la lista, a excepcin del ltimo, tiene un nico sucesor

nodos y enlaces
-3

TAD Listas: descripcin lgica


Orden de nodos afecta a la funcin de acceso Segn orden de insercin Segn clave

Ejemplo Lista de calificaciones ::= {Alumno1, Alimno2, ., Alumnon} Alumnoi ::= {DNI, NIA, Apellido1, Apellido2, Nombre, Calificacin}
-4

TAD Listas: descripcin lgica


Simples: las ms generales, no existe un criterio especfico para colocar cada elemento (relacin lineal dada por la posicin) Ordenadas: ordenacin por el valor de uno o ms campos (clave de ordenacin). Circulares: Listas donde el ltimo elemento es el primero y el antecesor del primero es el ltimo (principio y final estn unidos)
-5

TAD Listas: Implementacin Secuencial


Los elementos se almacenan en posiciones consecutivas de memoria (el sucesor de cada elemento est indicado implcitamente). No hace falta el campo enlace.
o

Usando Array (acceso directo, problemas al insertar y borrar tiempo )

tamao = 3 elem[i] = i= G min N +1 U +2 ... ... ... max

posicin = i

Ejemplos: Class ArrayOfStrings, Class ArrayOfObjects


-6

TAD Listas: Implementacin enlazada


El orden lgico no tiene por qu coincidir con el fsico (indicar explcitamente para cada elemento la ubicacin del siguiente en el campo enlace)
o

Usando referencias (memoria dinmica)

head

E1

next

E2

next

En

next

public class SNode<E> {} public interface ISList<E> {} public class SList<E> {}


-7

TAD Listas: Implementacin enlazada


public class SNode<E> { public E element; public Node<E> next;

next

public SNode(){ element=null; next=null; }

public SNode(E obj, Node<E> n){ element=obj; next=n; } }

<E> quiere decir que puede guardar cualquier objeto de tipo/clase E.


-8

TAD Listas: Implementacin enlazada


public interface ISList<E> { public boolean isEmpty() ; // devuelve true si la lista est vaca public Node<E> first() ; // devuelve el primer nodo de la lista. Se produce un error si la lista est vaco. public Node<E> last() ; // devuelve el ltimo nodo de la lista. Se produce un error si la lista est vaco. public void addFirst(Node<E> newNodo) ; // aadir el nodo v al principio de la lista. public void addLast(Node<E> newNodo) ; // aadir el nodo v al final de la lista. public void addBefore(E e, Node<E> newNodo) ; // agregar el nuevo nodo antes del nodo que contiene el elemento e. public void addAfter(E e, Node<E> newNodo) ; // agregar el nuevo nodo justo despus del nodo que contiene el elemento e. public void removeFirst() ; // elimina el primer nodo de la lista. public void removeLast() ; // elimina el ultimo nodo de la lista. public void remove(E e) ; // elimina todos los nodos que contienen el elemento e. public void show(); // recorre los elementos de la lista y los muestra }

-9

TAD Listas: Implementacin enlazada


public class SList<E> implements ISList<E>{ /**Es el primer nodo de la lista*/ public Node<E> head; /**Guarda el nmero de elementos de la lista*/ public int size; /**Crea una lista vac-a. Head debe ser null*/ public SList() { head=null; size=0; }

// aqu se implementan los mtodos


public static void main(String args[]) { SList<Integer> lista=new SList<Integer>(); } head } E1 next E2 next En next
=

- 10

TAD Listas: Implementacin enlazada


SList<Integer> lista=new SList<Integer>(); head = addFirst(new SNode<Integer>(12)) head

12

next

= addFirst(new SNode<Integer>(9)) head

next

12

next

=
- 11

TAD Listas: Implementacin enlazada


addFirst(new SNode<Integer>(25)) head

25

next

next

12

next

= removeFirst() head

next

25

next

removeFinal() head

next

=
- 12

TAD Listas Simples Ordenadas


La posicin de cada nodo viene determinada por el valor de uno o ms campos obligatorios de informacin del nodo denominados clave No se permite tener dos nodos con la misma clave

Ejemplo Lista de calificaciones ::= {Alumno1, Alimno2, ., Alumnon} Alumnoi ::= {DNI, NIA, Apellido1, Apellido2, Nombre, Calificacin}

Las operaciones que pueden realizarse sobre las listas ordenadas son muy similares a las de las listas simples, excepto: Insercin de un elemento (insercin ordenada) Bsqueda de un elemento (es ms eficiente)
- 13

TAD Listas Circulares


La principal diferencia entre una lista circular y una lista simple, es que el ultimo nodo de una lista circular apunta al primer nodo de la lista, mientras que en una lista simple, el ultimo nodo apunta a null.
head

12

next

next

25

next

La implementacin es similar a una lista simple, con la diferencia de que en la clase SListCircular hay que modificar los mtodos, donde el ultimo nodo de la lista apunta al primero, Ej. Insertar newNodo en el ultimo de la lista: newNodo.next=head;
- 14

Ejercicio I
Implemente los mtodos siguientes en la clase Slist:
public void addLast(Node<E> newNodo) ; // aadir el nodo v al final de la lista. public void addAfter(E e, Node<E> newNodo) ; // agregar el nuevo nodo justo despus del nodo que contiene el elemento e. public void removeLast() ; // elimina el ultimo nodo de la lista. public void remove(E e) ; // elimina todos los nodos que contienen el elemento e.

- 15

Ejercicio II
Implemente un programa de Java que crea una lista simple para almacenar los productos de una fabrica (id, nombre, precio). La lista tiene que ser ordenada de menor a mayor segn id, implementa: El mtodo insertProduct (para realizar insercin ordenada) public class Product {} public class SNode<E> {} public interface ISList<E> {} public class SList<E> implements ISList{}

- 16

Ejercicio II
public class ProductsFactory extends Slist<Product>{ public boolean insertProduct(Product prod) { para implementar }

public static void main(String[] args) { ProductsFactory fabrica = new ProductsFactory(); Product p1 = new Product (16, "Porttil", 543.5f); fabrica.insertProduct(p1); Product p2 = new Product (12, "Impresora", 223.45f); fabrica.insertProduct(p2); Product p3 = new Product (14, "Pantalla", 112.65f); fabrica.insertProduct(p3); Product p4 = new Product (11, "Ratn", 15.55f); fabrica.insertProduct(p4); fabrica.showProduct(); System.out.println(fabrica.size); } }

- 17