2 ED Lineales

download 2 ED Lineales

of 89

description

basico de ed segunda unidad

Transcript of 2 ED Lineales

  • Estructuras de Datos Lineales

    Dra. Laura Cruz ReyesInstituto Tecnolgico de Ciudad Madero

    Mxico

    U1. Estructuras de datos linealesDra. Laura Cruz Reyes

  • Tipo de Dato abstracto (TDA) Abstract Data Type (ADT)

    Un TDA especifica un conjunto de datos ylas operaciones que operan sobre los datos.Es abstracto en el sentido que esindependiente de la implementacin.

    Permite conocer qu cualidades tiene, pero no cmo estn implementadas

    ADT= Operaciones + Estructura datos

    Dra. Laura Cruz Reyes U1. Estructuras de datos lineales

  • Tipos de Estructuras de Datos

    Estructuras de Datos

    Lineales

    No lineales

    Almacenamiento Contiguo

    Almacenamiento No Contiguo

    U1. Estructuras de datos linealesDra. Laura Cruz Reyes

  • 1. Utilizando Arreglos: La relacin lineal estaimplcita en la relacin fsica de los elementos.Desventaja: Almacenamiento esttico y tamao fijo.

    2. Utilizando elementos de enlace: Agrega a cadaelemento un campo de enlace, no requierenalmacenamiento contiguo en memoria, se puedenaadir y borrar elementos fcilmente.

    Almacenamiento de datos en Listas Lineales

    U1. Estructuras de datos linealesDra. Laura Cruz Reyes

    Enith Adrian Omar Pedro

    0 1 2 3

    Enith Adrian Omar Pedro

    55 10 200 38

  • En lenguajes donde no se cuenta con memoria dinmica, las listas encadenadas se implementan usando arreglos.

    Pan -1informacin enlace

    Galletas 4

    Jamn 7

    Leche 0

    inicio

    0

    1

    2

    3

    4

    5

    6

    7

    El arreglo contiene dos campos: uno para la informacin y otro para relacionar al siguiente elemento.

    La lista se recorre desde el inicio y hasta encontrar un elemento que contenga un enlace vaco.

    U1. Estructuras de datos linealesDra. Laura Cruz Reyes

  • Estructuras Lineales

    1. Pilas2. Colas3. Listas enlazadas

    1. Simples2. Dobles3. Circulares

    U1. Estructuras de datos linealesDra. Laura Cruz Reyes

  • Operaciones Bsicas en Estructuras Lineales

    1. Recorrido: Procesa cada elemento de la estructura.2. Bsqueda: Recupera la posicin de un elemento especfico.3. Insercin: Adiciona un nuevo elemento a la estructura.4. Borrado: Elimina un elemento de la estructura.5. Ordenacin: Ordena los elementos de la estructura de

    acuerdo a los valores que contiene.6. Mezcla: Combina 2 estructuras en una sola.

    U1. Estructuras de datos linealesDra. Laura Cruz Reyes

  • PILASDefinicin:Estructura de datos lineal donde los elementospueden ser aadidos o removidos slo por unextremo.Trabajan con filosofa LIFO (Last In- First Out ).

    Ejemplos:Pila de librosPila de llamadas a funcionesPila de recursionPila de resultados parciales de formulas aritmticas

    U1. Estructuras de datos linealesDra. Laura Cruz Reyes

  • OPERACIONES BASICAS CONPILAS

    -push (apilar).- Agrega un elementos a la pila en elextremo llamado top.

    -pop (desapilar).- Remueve el elemento de la pila quese encuentra en el extremo llamado top.

    -isEmpty (estaVacia).- Indica si la pila contiene o nocontiene elementos.

    -top (cima).- Regresa el elemento de la pila que seencuentra en el extremo llamado top.

    U1. Estructuras de datos linealesDra. Laura Cruz Reyes

  • REPRESENTACIN DE PILAS Usando arreglos: Define un arreglo de una

    dimensin (vector) donde se almacenan loselementos.

    0 1 2 3 4 5

    TOP: Apunta hacia el elemento que seencuentra en el extremo de la pila.(inicialmente es -1).

    U1. Estructuras de datos linealesDra. Laura Cruz Reyes

  • Inicio:

    Insertar

    A:

    Top -1

    Insertar

    B:

    Insertar

    C:

    Eliminar

    elemento

    Top

    A A

    B

    Top

    A

    B

    Top

    C

    A

    B

    Top

    Ejemplo

    U1. Estructuras de datos linealesDra. Laura Cruz Reyes

  • Implementacin de Pilas con Arreglos

    U1. Estructuras de datos linealesDra. Laura Cruz Reyes

    Operacin bsica

    Funcin

    push( ) Guardar elemento en el tope

    pop( ) quitar elemento del tope

    top( ) Recuperar elemento deltope

    topAndPop() Recuperar y quitar elemento

    isEmpty() Verificar si la pila tiene elementos

    makeEmpty() Vaciar la pila

    doubleArray()* Doblar el tamao de la pila*Es operacin auxiliar

  • Interfaz para una pila de datos genricapackage DataStructures;

    public interface Stack //Pila{

    void push( Object x ); //apilar

    void pop( ) throws UnderflowException; //desapilar con verif. de desbordamiento inferior

    Object top( ) throws UnderflowException; //cima

    Object topAndPop( ) throws UnderflowException; //cimaYDesapilar

    boolean isEmpty( ); //esVacia

    void makeEmpty( ); //vaciar}

    U1. Estructuras de datos linealesDra. Laura Cruz Reyes

  • Implementacin usando un arreglo de objetospackage DataStructures;

    public class ArrayStack implements Stack //PilaVec{.public void pop( ) throws UnderflowException

    {if( isEmpty( ) )

    throw new UnderflowException( "pop" );topOfStack--;

    }

    public void push( Object x ) {

    if( topOfStack + 1 == theArray.length )doubleArray( );

    theArray[ ++topOfStack ] = x;}

    private Object [ ] theArray;private int topOfStack;private static final int DEFAULT_CAPACITY = 10;

    }

    package DataStructures;

    public class UnderflowException extends RuntimeException

    {public UnderflowException(String message){

    super( message );}

    }

    U1. Estructuras de datos linealesDra. Laura Cruz Reyes

  • Implementacin usando un arreglo de objetospackage DataStructures;

    public class ArrayStack implements Stack //PilaVec{

    public ArrayStack( ) //constructor{

    theArray = new Object[ DEFAULT_CAPACITY ];topOfStack = -1;

    }

    public boolean isEmpty( ) { . }

    public void makeEmpty( ) { }

    public Object top( ) throws UnderflowException { . }

    public void pop( ) throws UnderflowException{ }

    public Object topAndPop( ) throws UnderflowException{}

    public void push( Object x ) {}

    private void doubleArray( ) //duplicarArreglo{

    Object [ ] newArray;

    newArray = new Object[ theArray.length * 2 ];for( int i = 0; i < theArray.length; i++ )

    newArray[ i ] = theArray[ i ];theArray = newArray;

    }

    private Object [ ] theArray;private int topOfStack;private static final int DEFAULT_CAPACITY = 10;

    }

    U1. Estructuras de datos linealesDra. Laura Cruz Reyes

  • Implementacin usando un arreglo de objetosimport DataStructures.*;

    //Test program to stack structure

    public final class TestPila {

    public static void main (String [ ] args){

    Stack p = new ArrayStack( );for (int i= 0; i

  • Implementacin de Pilas con Arreglos

    U1. Estructuras de datos linealesDra. Laura Cruz Reyes

    Operacin bsica

    Funcin Complejidad

    push( ) Guardar elemento en el tope O(1)

    pop( ) quitar elemento del tope O(1)

    top( ) Recuperar elemento deltope

    O(1)

    topAndPop() Recuperar y quitar elemento

    O(1)

    isEmpty() Verificar si la pila tiene elementos

    O(1)

    makeEmpty() Vaciar la pila O(1)

    doubleArray()* Doblar el tamao de la pila O(n)*Es operacin auxiliar

  • Implementacin usando la clase Vectorpublic class Stack {

    private Vector items;public Stack() {

    items = new Vector(10);}

    public Object pop() { //non-synchronized//public synchronized Object pop(){int len = items.size();Object obj = null;if (len == 0) throw new EmptyStackException();obj = items.elementAt(len-1);items.removeElementAt(len 1);return obj;}

    U1. Estructuras de datos linealesDra. Laura Cruz Reyes

    public push(Object item) {//non-synchronized// public synchronized Object push(Object item){

    items.addElement(item);return item;

    }

    public boolean isEmpty() {if (items.size == 0) return true; else return false;

    }}

  • Dra. Laura Cruz Reyes U1. Estructuras de datos lineales

    Verificacin de balanceo de smbolos

    Aplicaciones de Pilas

  • EXPRESIONES ARITMETICAS:

    Una expresin aritmtica contiene constantes, variablesy operaciones con distintos niveles de precedencia.

    OPERACIONES :^ potencia*/ multiplicacin, divisin+,- suma, resta

    Aplicaciones de Pilas

    U1. Estructuras de datos linealesDra. Laura Cruz Reyes

  • NOTACION INFIJALos operadores aparecen en medio de los operandos.

    A + B, A 1, E/F, A * C , A ^ B , A + B + C, A+B-C

    NOTACION PREFIJAEl operador aparece antes de los operandos.

    + AB, - A1, /EF, *AC, ^AB, ++ABC, -+ABC

    NOTACION POSTFIJAEl operador aparece al final de los operandos.

    AB+, A1-, EF/, AC*, AB^, AB+C+, AB+C-

    Notaciones Aritmticas

    U1. Estructuras de datos linealesDra. Laura Cruz Reyes

  • PASOS PARA EVALUAR UNA EXPRESION

    1. CONVERTIR A POSTFIJO: convertir la expresin en notacin infijo a notacin postfijo

    2. EVALUAR LA EXPRESION POSTFIJA: usar una pila para mantener los resultados intermedios cuando se evala la expresin en notacin posfijo.

    U1. Estructuras de datos linealesDra. Laura Cruz Reyes

  • REGLAS PARA CONVERTIR EXPRESION INFIJA A POSTFIJA

    Se crea un string resultado donde se almacena la expresin en postfijo.1.- Los operandos se agregan directamente al resultado2.- Un parntesis izquierdo se mete a la pila y tiene prioridad o precedencia

    cero (0).3.- Un parntesis derecho saca los elementos de la pila y los agrega al

    resultado hasta sacar un parntesis izquierdo.4.- Los operadores se insertan o sacan de la pila segn el condicin.

    a) Si pila vaca entonces insertar operador actual.b) Si el operador en el tope de pila tiene menor precedencia que el actual

    entonces insertar operador actual.c) Si el operador en el tope tiene mayor precedencia que el actual, entonces

    sacar para agregar al resultado. La operacin se repite hasta encontrarun operador con menor precedencia o la pila este vaca. El operadoractual se inserta en la pila.

    5.- Cuando se termina de procesar la cadena que contiene la expresin infijo sevaca la pila pasando los elementos al resultado.

  • Precedencia de operadores idnticos

    Dra. Laura Cruz Reyes U1. Estructuras de datos lineales

    El carcter + de la entrada tiene menor precedencia que el de la pila

    El carcter de la entrada tiene menor precedencia que el de la pila

    ExpresinInfijo

    ExpresinPosfijo

    Precedencia

  • Dra. Laura Cruz Reyes U1. Estructuras de datos lineales

    Ejemplos: infijo a posfijo

  • Ejemplos: infijo a postfijo

    Convertir las siguientes expresiones infijas a postfijo

    A +B*C-DA * ((B-C) / 2)

    ((X-Z)*(Y+W))/X+Y

    U1. Estructuras de datos linealesDra. Laura Cruz Reyes

  • Ejemplos: infijo a posfijo

    Convertir las siguientes expresiones infijas a posfijo

    A +B*C-D ABC*+D-A * ((B-C) / 2) ABC- 2 / *

    ((X-Z)*(Y+W))/X+Y XZ-YW+*X/Y+

    U1. Estructuras de datos linealesDra. Laura Cruz Reyes

  • Bosquejo de un Algoritmo para EVALUAR UNA EXPRESION POSTFIJA

    Recorrer la expresion de izquierda a derecha1. Si es un operando

    1. almacenar el valor en la pila de valores2. Si es un operador:

    1. Obtener dos operandos de la pila de valores2. Aplicar el operador3. Almacenar el resultado en la pila de valores

    Al finalizar el recorrido, el resultado estar en la pila de valoresU1. Estructuras de datos linealesDra. Laura Cruz Reyes

  • Evaluacin de una expresin posfijo

    Dra. Laura Cruz Reyes U1. Estructuras de datos lineales

  • Las pilas pueden ser usadas para implementar la recursin en programas.

    Una funcin o procedimiento recursivo es aquel que se llama a si mismo.

    Ejemplos: Factorial Nmeros de Fibonacci Torres de Hanoi Algoritmos de Ordenamiento de datos

    Aplicaciones de PilasFunciones Recursivas

    U1. Estructuras de datos linealesDra. Laura Cruz Reyes

  • Aplicaciones de PilasRecursion

    // Funcion factorialpublic static int factorial(int n) {

    if (n

  • Aplicaciones de PilasRecursion

    // Funcion fibonaccipublic static int fib(int n) {

    if (n==1) return 0;else if (n==2) return 1;

    else return fib(n-1)+fib(n-2);}

    U1. Estructuras de datos linealesDra. Laura Cruz Reyes

  • Las pilas son requeridas para implementar el control de flujo de ejecucin de un programa con subprogramas (funciones, procedimientos o mtodos). Subprogramas recursivos o no recursivos Existen llamadas a ejecucin de subprogramas. Un subprograma se ejecuta completamente

    antes de retornar al punto donde fue llamado.

    Aplicaciones de PilasControl de secuencia de programas.

    U1. Estructuras de datos linealesDra. Laura Cruz Reyes

  • Aplicaciones de Pilas

    // Programa Principalclass Principal{

    public static void proceso1(){System.out.println(proceso1);proceso2();

    }public static void proceso2(){System.out.println(proceso2);

    }public static void main(String[] args){

    proceso1();proceso2();

    }}

    Cual es la salida de este

    programa?

    Control de secuencia de programas.

    U1. Estructuras de datos linealesDra. Laura Cruz Reyes

  • Clase Stack en Java

    java.util Class Stackjava.lang.Object

    java.util.AbstractCollection java.util.AbstractList

    java.util.Vector java.util.Stack

    All Implemented Interfaces:Serializable, Cloneable, Iterable, Collection, List, RandomAccess

    La clase Stack representa una pila de objetos donde el ltimo en entrar es el primero en salir (LIFO). Extiende la clase Vector con 5 operaciones bsicas.

    U1. Estructuras de datos linealesDra. Laura Cruz Reyes

  • Method Summary

    boolean

    empty()Tests if this stack is empty.

    E peek()Looks at the object at the top of this stack without removing it

    from the stack.E pop()

    Removes the object at the top of this stack and returns that object as the value of this function.

    E push(E item)Pushes an item onto the top of this stack.

    int search(Object o)Returns the 1-based position where an object is on this stack.

    U1. Estructuras de datos linealesDra. Laura Cruz Reyes

  • COLAS

    Definicion. Es una lista lineal de elementos en la que lasoperaciones de insertar y eliminar se realizan en diferentesextremos de la cola.Trabajan con filosofa FIFO ( First In - First out), el primerelemento en entrar es el primer elemento en salir.

    Ejemplos:

    Cola de automviles esperando servicio en una gasolineraCola de clientes en una ventanilla del banco para pagar un servicioCola de programas en espera de ser ejecutados por una computadora.

    U1. Estructuras de datos linealesDra. Laura Cruz Reyes

  • TIPOS DE COLAS

    Cola simple: Estructura lineal donde los elementos salen en el mismo orden en que llegan.

    Cola circular: Representacin lgica de una cola simple en un arreglo.

    Cola de Prioridades: Estructura lineal en la cual loselementos se insertan en una posicin de la cola, tal queconserve una relacin de mayor a menor prioridad, y seremueven solamente por el frente.

    Cola Doble (Bicola): Estructura lineal en la que los elementosse pueden aadir o quitar por cualquier extremo de la cola(cola bidireccional).

    U1. Estructuras de datos linealesDra. Laura Cruz Reyes

  • Operaciones bsicas en Colas Simples

    enqueue (Insertar). Almacena al final de la cola el elementoque se recibe como paramtro.

    dequeue (eliminar). Saca de la cola el elemento que seencuentra al frente.

    isEmpty (estaVaca). Regresa un valor booleano indicando sila cola tiene o no elementos (true si la cola esta vacia,false si la cola tiene al menos un elemento).

    U1. Estructuras de datos linealesDra. Laura Cruz Reyes

  • Operaciones:

    A

    BA

    A B C

    B C

    B C D

    C D

    1. enqueue A (insertar A)

    2. enqueue B (insertar B)

    Estado de la cola:

    3. enqueue C (insertar C)

    4. dequeue (eliminar)

    5. enqueue D (insertar D)

    6. dequeue (eliminar)

    Inicio: Cola Vaca

    U1. Estructuras de datos linealesDra. Laura Cruz Reyes

  • Implementacin de Colas

    Arreglo con frente fijo. con frente movible. circular.

    Listas ligadas

    U1. Estructuras de datos linealesDra. Laura Cruz Reyes

  • Las colas pueden ser representadas en arreglos deuna dimensin (vector) manteniendo dos variablesque indiquen el FRENTE (front) y FINAL (back)de los elementos de la cola.

    A F S D Z

    front (frente) back (final)

    0 1 2 3 4 5

    Representacin usando arreglos

    U1. Estructuras de datos linealesDra. Laura Cruz Reyes

  • Cuando la cola esta vaca las variables delimitadoras sefijan a front = 0 y back =-1 y no es posible removerelementos.

    Cuando la cola esta llena ( front = 0 y back = n-1) noes posible insertar elementos nuevos a la cola.

    Cuando se remueven elementos el front puedeincrementarse para apuntar al siguiente elemento de lacola (implementacin con frente mvil) o los elementosen la cola pueden desplazarse una posicin adelante(implementacin con frente fijo)

    Recuperacin de espacio: En la implementacin confrente movil, cuando no hay espacios libres al final delarreglo los elementos pueden ser desplazados paradesocupar posiciones en un extremo del arreglo o sepuede manejar una estructura circular.

    U1. Estructuras de datos linealesDra. Laura Cruz Reyes

  • Ejemplo: Suponer que usamos un arreglo de 5 posiciones. Usando la representacin de frente fijo y frente movible.

    A B Cfront

    back

    Al remover un elemento:

    B C

    front back

    B C

    front back

    Frente fijo Frente movible

    U1. Estructuras de datos linealesDra. Laura Cruz Reyes

  • Insertar elemento D:

    B C D

    front back

    B C

    front back

    B C

    front back

    B C D

    front back

    U1. Estructuras de datos linealesDra. Laura Cruz Reyes

    Frente fijo Frente movible

  • Insertar elemento E:

    B C D E

    front back

    Insertar elemento F:

    Insertar elemento G:

    B C D E

    front back

    B C D E F

    front back

    B C D E F

    front back

    U1. Estructuras de datos linealesDra. Laura Cruz Reyes

    Cola llena!!!!

    a) Generar Error

    b) Duplicar el tamao del vector

    Frente movibleFrente fijo

  • Cola Circular

    Es una representacin lgica de la cola en un arreglo.

    El front y back son movibles.

    Cuando el front o backllegan al extremo se regresan a la primera posicin del arreglo.

    C D E

    front back

    F C D E

    frontback

    C D

    front back

    B C D

    front back

    Remover

    Insertar E

    Insertar F

    Cola inicial

    U1. Estructuras de datos linealesDra. Laura Cruz Reyes

  • Cola Circular

    F C D E

    frontback

    0 1 2 3 4

    U1. Estructuras de datos linealesDra. Laura Cruz Reyes

    E

    DC

    F

    front

    back

    0

    1

    23

    4

    Aritmtica modular: a) if (++back == theArray.length) back = 0;b) (++back) % theArray.length //operador mdulo

  • Representacin de colas: Usando memoria esttica: arreglos con tamao fijo yfrente fijo o movible o representacin circular.

    Usando memoria dinmica: Listas ligadas.

    B C D E Ffront

    back

    0 1 2 3 4

    B C D

    front

    back

    E F

    U1. Estructuras de datos linealesDra. Laura Cruz Reyes

    8 2 300 1 40

  • Implementacin de Cola Circular con Arreglos

    U1. Estructuras de datos linealesDra. Laura Cruz Reyes

    Operacin bsica Funcin

    enqueue( ) Inserta elemento por el frente de la cola

    dequeue( ) quitar el elemento ubicado en la parte trasera de la cola

    getfront( ) Recuperar elemento del frente

    isEmpty() Verificar si la cola tiene elementos

    makeEmpty() Vaciar la cola

    doubleArray()* Doblar el tamao de la cola

    *Es operacin auxiliar

  • Interfaz para una cola genricapackage DataStructures;public interface Queue{

    void enqueue (Object x);Object getFront (); //Object dequeue ();boolean isEmpty ();void makeEmpty ();

    }U1. Estructuras de datos linealesDra. Laura Cruz Reyes

  • Implementacin de una cola circular usando el tipo Object

    U1. Estructuras de datos linealesDra. Laura Cruz Reyes

    package DataStructures;

    public class ArrayQueue implements Queue {

    private Object [] theArray;private int currentSize;private int front;private int back;private static final int DEFAULT_CAPACITY = 10;

    public ArrayQueue () //Construct the queue.{ theArray = new Object[DEFAULT_CAPACITY];

    makeEmpty ();}

    // Return true if queue is empty, false otherwise.public boolean isEmpty () {. }

    public Object dequeue (){ }

    public void enqueue (Object x){. }

    public Object getFront (){.}

    private int increment (int x){. }

    //Make the queue logically public void makeEmpty () empty.

    {. }

    private void doubleQueue (){. }

    }

  • U1. Estructuras de datos linealesDra. Laura Cruz Reyes

    public void enqueue (Object x){. }

    public Object dequeue (){ }

    public void enqueue (Object x){

    if (currentSize == theArray.length)doubleQueue ();

    back = increment (back);theArray [back] = x;currentSize++;

    }

    // Return and remove the least recently inserted item//Throws UnderflowException if the queue is empty.

    public Object dequeue (){

    if (isEmpty ())throw new UnderflowException ("ArrayQueue

    dequeue");currentSize--;Object returnValue = theArray [front];front = increment (front);return returnValue;

    }

    Implementacin de una cola circular usando Object

  • U1. Estructuras de datos linealesDra. Laura Cruz Reyes

    //Get the first inserted item.//Throws UnderflowException if empty.

    public Object getFront (){.}

    private int increment (int x){. }

    //Get the first inserted item//Throws UnderflowException if empty.

    public Object getFront (){

    if (isEmpty ())throw new UnderflowException

    ("ArrayQueue getFront");return theArray [front];

    }

    private int increment (int x){

    if (++x == theArray.length)x = 0;

    return x;}

    Implementacin de una cola circular usando Object

  • U1. Estructuras de datos linealesDra. Laura Cruz Reyes

    //Make the queue logically public void makeEmpty () empty.

    {. }

    // True if queue is empty, false otherwise.public boolean isEmpty () {. }

    //Make the queue logically empty.

    public void makeEmpty (){

    currentSize = 0;front = 0;back = -1;

    }

    // Return true if queue is empty, false otherwise.

    public boolean isEmpty () {

    return currentSize == 0;}

    Implementacin de una cola circular usando Object

  • U1. Estructuras de datos linealesDra. Laura Cruz Reyes

    /private void doubleQueue ()

    {. }

    //Internal method to expand theArray.

    private void doubleQueue (){

    Object [] newArray;newArray = new Object [theArray.length * 2];

    // Copy elements that are logically in the queuefor (int i = 0 ; i < currentSize ; i++,

    front = increment (front))newArray [i] = theArray [front];

    theArray = newArray;front = 0;back = currentSize - 1;

    }

    Implementacin de una cola circular usando Object

  • Implementacin de una cola circular usando el tipo generics

    U1. Estructuras de datos linealesDra. Laura Cruz Reyes

    package DataStructures;

    public interface Queue {

    public boolean isEmpty ();

    public void makeEmpty ();

    public Edequeue ();

    public E getFront ();

    public void enqueue (E x)}

  • Implementacin de una cola circular usando el tipo generics

    U1. Estructuras de datos linealesDra. Laura Cruz Reyes

    package DataStructures;

    public class ArrayQueue T implements Queue

  • Implementacin de Cola Circular con Arreglos

    U1. Estructuras de datos linealesDra. Laura Cruz Reyes

    Operacin bsica

    Funcin Complejidad

    enqueue( ) Inserta elemento por el frente de la cola

    O(1)

    dequeue( ) quitar el elemento ubicado en la parte trasera de a cola

    O(1)

    getfront( ) Recuperar elemento delfrente

    O(1)

    isEmpty() Verificar si la cola tiene elementos

    O(1)

    makeEmpty() Vaciar la cola O(1)

    doubleArray()* Doblar el tamao de la cola O(n)

    *Es operacin auxiliar

  • Colas en Java

    Java contiene la definicin de interfaces y clases para el manejo de colas.

    Las colas son una coleccin de elementos diseadas para almacenar elementos que esperan ser procesados.

    Java contiene una interfase parametrizada Queue y varias clases que que la implementan, entre ellas PriorityQueue

    U1. Estructuras de datos linealesDra. Laura Cruz Reyes

  • Colas en Java

    public interface Queue extends Collection { E element(); boolean offer(E o); E peek(); E poll(); E remove();

    } U1. Estructuras de datos linealesDra. Laura Cruz Reyes

  • Method SummaryE element()

    Retrieves, but does not remove, the head of this queue, it throws an exception if this queue is empty..

    boolean

    offer(E o)Inserts the specified element into this queue, if possible.

    E peek()Retrieves, but does not remove, the head of this queue, returning null if this queue is

    empty.

    Epoll()

    Retrieves and removes the head of this queue, or null if this queue is empty.

    E remove()Retrieves and removes the head of this queue.

    U1. Estructuras de datos linealesDra. Laura Cruz Reyes

  • Una lista es una coleccin lineal de elementos donde el orden delos mismos se establece mediante enlaces.

    U1. Estructuras de datos linealesDra. Laura Cruz Reyes

    LISTAS ENLAZADAS

  • LISTAS ENLAZADAS

    1. Simples (con enlace simple)

    2. Dobles (con enlace doble)

    3. Circulares (el ltimo enlaza al primero)

    4. Listas con iteradores (desplazador entre elementos)

    U1. Estructuras de datos linealesDra. Laura Cruz Reyes

  • Existe un elemento llamado header que apunta al primerelemento de la lista. Al principio header apunta a null

    Cada nodo contiene un campo de enlace next que apunta alsiguiente elemento.

    El ltimo elemento de la lista en su campo next apunta a null.

    U1. Estructuras de datos linealesDra. Laura Cruz Reyes

    LISTAS ENLAZADAS SIMPLES

    *Lista enlazada de 0 elementos

    header

    * Lista enlazada de 4 elementos

    element next

    header

    Enith Adrian Omar Pedro

  • Opcionalmente puede existir un elemento llamado tailer queapunta al ultimo elemento de la lista.

    Al principio tailer apunta a null

    U1. Estructuras de datos linealesDra. Laura Cruz Reyes

    LISTAS ENLAZADAS SIMPLES

    *Lista enlazada de 0 elementos

    header

    * Lista enlazada de 4 elementos

    element next

    header

    Enith Adrian Omar Pedro

    tailertailer

  • AddFirst: Agrega un elemento al principio de la lista. AddLast: Agrega un elemento al final de la lista. removeFirst: Retira el primer elemento de la lista removeLast: Retira el primer elemento de la lista

    Operaciones con Listas Simples

    U1. Estructuras de datos linealesDra. Laura Cruz Reyes

    header Enith Adrian Omar Pedro

    tailer

  • Los nodos de las listas simples

    Un nodo se divide en 2 partes: element: Contiene la informacin del elemento. next: Contiene la direccin del siguiente nodo de la lista.

    element next

    Node

    public class Node{// atributosprivate Object element;private Node next;

    // el constructor de nodospublic Node (Object e, Node n){

    element = e;next = n;

    }}

    U1. Estructuras de datos linealesDra. Laura Cruz Reyes

  • Los nodos de las listas simples

    Un nodo se divide en 2 partes: element: Contiene la informacin del elemento. next: Contiene la direccin del siguiente nodo de la lista.

    element next

    Node

    public class Node{// atributosprivate E element;private Node next;

    // el constructor de nodospublic Node (E e, Node n){

    element = e;next = n;

    }}

    U1. Estructuras de datos linealesDra. Laura Cruz Reyes

  • Implementacin de la clase Node

    U1. Estructuras de datos linealesDra. Laura Cruz Reyes

    public class Node{// atributosprivate Object element;private Node next;

    // el constructor de nodospublic Node (Object e, Node n){

    element = e;next = n;

    }

    Public Object getElement(){return element;}

    Public Node getNext(){return next;}

    Public Object setElement(Object newElement){element = newElement;}

    Public Node setNext(Node newNext){next = newNext;}}

    public class Node {

    private E element;private Node next;

    public Node(E e, Node n){element=e;next=n;}

    public void setElement(E e){element=e;}

    public void setNext(Node n){next=n;}

    public E getElement(){ return element;}

    public Node getNext(){ return next;}}

  • Implementacin de una Lista Encadenada Simplepublic class SLinkedList{

    public SLinkedList() {header = null;tailer = null;size = 0;

    }

    // update and search methods would go here

    protected Node header;protected Node tailerprotected long size;

    }

    public class SLinkedList {

    public SLinkedList() {header = null;tailer = null;size = 0;

    }

    // update and search methods would go here

    protected Node header;protected Node tailerprotected long size;

    }

    U1. Estructuras de datos linealesDra. Laura Cruz Reyes

  • LISTAS ENLAZADAS CON CABECERA

    Es una lista enlazada que contiene un nodo especial llamadonodo cabecera (nodo de sacrificio) que se encuentra alinicio (y opcionalmente al final) de la misma.

    Un NODO CABECERA es un nodo especial que no contieneinformacin, solo se utiliza para indicar el inicio/fin de los elementosde la lista.

    La utilizacin de un nodo cabecera en listas enlazadaspermiten que la implementacin de los mtodos de inserciny eliminacin sea ms sencilla, ya que evitan tratar deforma explcita los casos especiales (insertar al inicio oeliminar el primer elemento). Sin embargo, requieren de unnodo extra en la lista (el nodo cabecera).

    U1. Estructuras de datos linealesDra. Laura Cruz Reyes

  • TIPOS DE LISTA ENLAZADA CON CABECERA:

    1)LISTA SIMPLE CON CABECERA Y TIERRAEs una lista enlazada con cabecera, donde el apuntador del ltimo nodo contiene nulo.

    2)LISTA CIRCULAR CON CABECERAEs una lista enlazada con cabecera, donde el ltimo nodo contiene un apuntador hacia la cabecera.

    2)LISTA DOBLE CON CABECERAEs una lista enlazada con cabecera, donde cada nodo contiene un apuntador a los nodos siguiente y previo.

    U1. Estructuras de datos linealesDra. Laura Cruz Reyes

  • Representacin

    1. Lista simple c/cabecera y tierra:

    header

    Nodo cabecera

    2. Lista circular c/cabecera:

    header

    Nodo cabecera

    U1. Estructuras de datos linealesDra. Laura Cruz Reyes

  • Representacin

    3. Lista doble c/cabecera:

    U1. Estructuras de datos linealesDra. Laura Cruz Reyes

    header tailer

  • LISTAS DOBLESEn una lista doble cada node (Node) contiene dos campos deenlace: uno al elemento anterior (prev) y otro al elementosiguiente (next) de la lista.

    Estructura del Nodo:prev element next

    U1. Estructuras de datos linealesDra. Laura Cruz Reyes

    public class DNode{// atributosprivate Object element;private Node next;private Node prev;

    // el constructor de nodospublic DNode (Object e, Node n, Node p){

    element = e;next = n;prev=p;

    }}

  • LISTAS DOBLESEn una lista doble cada node (Node) contiene dos campos deenlace: uno al elemento anterior (prev) y otro al elementosiguiente (next) de la lista.

    Estructura del Nodo:prev element next

    U1. Estructuras de datos linealesDra. Laura Cruz Reyes

    public class Dnode {// atributosprivate E element;private Node next;private Node prev;

    // el constructor de nodospublic DNode (E e, Node n, Node p){

    element = e;next = n;prev=p;

    }}

  • Ejemplos sin cabecera

    header = tailer =Lista Vaca

    Lista con un solo elemento

    header A B C

    Lista con tres elementos

    header A

    tailer

    tailerU1. Estructuras de datos linealesDra. Laura Cruz Reyes

  • Ejemplos con cabeceraLista Vaca

    Lista con tres elementos

    U1. Estructuras de datos linealesDra. Laura Cruz Reyes

    header

    A B C

    tailer

    header tailer

  • Iteradores

    Patrn de diseo abstracto para desplazarse en una coleccin de elementos, uno a la vez.

    Encapsula el concepto de lugar y siguiente hasNext()-verifica si existe un siguiente elemento next()-recupera el elemento actual y se desplaza al siguiente

    Iteradores de java java.util.iterator : interfaz para iteradores java.util.scanner: clase que implementa iteradores para

    lectura de datos

    Dra. Laura Cruz Reyes U1. Estructuras de datos lineales

  • Implementacin de Iteradores

    1. Utilizando operaciones bsicas de listas2. Hacienda pblica la clase Node3. Con un arreglo de iteradores declarados en

    la clase lista4. Con una clase iterador

    Dra. Laura Cruz Reyes U1. Estructuras de datos lineales

  • Implementacin de IteradoresCon operaciones bsicas de listas: costosa

    main//copiar elementos de la lista lst a un arreglo---O(n)

    for i=1 to lst.size()e[i]= lst.getLast() lst.removeLast()lst.addFirst(e)

    //next----------------------------------------------O(1)return e[i++]

    //hasNext------------------------------------------O(1)return i> lst.size()

    Dra. Laura Cruz Reyes U1. Estructuras de datos lineales

  • Implementacin de IteradoresHaciendo pblica la clase nodo: no encapsula

    mainLinkedList lst = new DlinkesList ( );DNode p= new DNode(null, null. null);p=lst.Zeroth();while(lst.hasNext(p)){

    s +=lst.Next(p) ; if (lst.hasNext(p);

    s +=,;}System.out.println (s)

    Dra. Laura Cruz Reyes U1. Estructuras de datos lineales

  • Implementacin de IteradoresCon un arreglo de iteradores declarados en la clase lista: desperdicio de memoria

    Dra. Laura Cruz Reyes U1. Estructuras de datos lineales

    public class DLinkedList implements LinkedList {

    private DNode header;private DNode tailer;private DNode [ ] iter;privated int size;

    public void hasNext(int i){..}..

    }

    MainLinkedList lst =

    new DLinkesList ( );while(lst.hasNext(1)){

    s +=lst.Next(1) ; if (lst.hasNext(1);s +=,;

    }System.out.println (s);

  • Implementacin de IteradoresCon una clase iteradora: diseo abstracto eficiente O(1)

    Dra. Laura Cruz Reyes U1. Estructuras de datos lineales

    Main..LinkedList lst =

    new DLinkesList ( );DLinkedListIterator itr=lst.iterator( );while(it.hasNext()){

    s +=it.Next() ; if (it.hasNext();s +=,;

    }System.out.println (s);..

    package DataStructures;

    public class DLinkedList{

    public DLinkedListIterator iterator( ){return new

    LinkedListIterator( header);

    private class DLinkedListIterator{

    DNode current;

    public LinkedListIterator (DNode n) {{ current= n; }

    private static class DNode {]

    }

  • Implementacin de Lista Encadenadasoperaciones con el iterador

    U1. Estructuras de datos linealesDra. Laura Cruz Reyes

    nodo publico Iterador *(nodo privado)

    Funcin Complejidad

    add(p,e ) add(e ) Agrega el elemento e en la posicin actual O(1)

    hasNext(p ) hasNext( ) Verifica si existe un elemente despus de la posicin actual

    O(1)

    hasPrevious (p) hasPrevious () Verifica si existe un elemente previo a la posicin actual

    O(1)

    previous(p) previous() Regresa el elemento e anterior a la posicin actual y fija esa posicin como la actual

    O(1)

    next(p) next() Regresa el elemento e posterior a la posicin actual y fija esa posicin como la actual

    O(1)

    nextIndex() nextIndex() Regresa el ndice del siguiente elemento O(n)

    previousIndex() previousIndex() Regresa el ndice del elemento previo O(n)

    set(p,e) set(e) Reemplaza el elemento regresado por las operaciones next o previous con e

    O(1)

    remove(p) Remove() Remueve el elemento regresado por las operaciones next o previous con e

    O(1)

  • Implementacin de Listas Encadenadas operaciones con la lista

    U1. Estructuras de datos linealesDra. Laura Cruz Reyes

    nodo publico Iterador *(nodo privado)

    Funcin Complejidad

    size(e ) size(e ) Regresa el tamao de la lista O(1)

    isEmpty( ) isEmpty( ) Verifica si la lista est vaca O(1)

    get (i) get (i) Regresa el elemento en la posicin i O(1)

    set(i,e) set(i,e) Modifica el elemento en la posicin i con e O(1)

    add(i,e) add(i,e) Inserta el elemento e en la posicin i O(1)

    addFirst(e) addFirst(e) Inserta el elemento e en la primera posicin O(1)

    addLast() addLast() Inserta el elemento e en la ltima posicin O(1)

    *Operaciones sobre la lista

  • La interfase List de Java

    java.util Interface List

    All Superinterfaces:Collection, Iterable

    All Known Implementing Classes:AbstractList, AbstractSequentialList, ArrayList,

    AttributeList, CopyOnWriteArrayList, LinkedList, RoleList, RoleUnresolvedList, Stack, Vector

    U1. Estructuras de datos linealesDra. Laura Cruz Reyes

  • La clase LinkedList en Java

    java.util Class LinkedListjava.lang.Object

    java.util.AbstractCollection java.util.AbstractList

    java.util.AbstractSequentialList java.util.LinkedList

    Type Parameters:E - the type of elements held in this collection

    All Implemented Interfaces:Serializable, Cloneable, Iterable, Collection, List, Queue

    U1. Estructuras de datos linealesDra. Laura Cruz Reyes

    Estructuras de Datos LinealesTipo de Dato abstracto (TDA) Abstract Data Type (ADT)Tipos de Estructuras de DatosNmero de diapositiva 4Nmero de diapositiva 5Estructuras LinealesOperaciones Bsicas en Estructuras LinealesPILASOPERACIONES BASICAS CON PILASNmero de diapositiva 10Nmero de diapositiva 11Implementacin de Pilas con ArreglosInterfaz para una pila de datos genricaImplementacin usando un arreglo de objetosImplementacin usando un arreglo de objetosImplementacin usando un arreglo de objetosImplementacin de Pilas con ArreglosImplementacin usando la clase VectorNmero de diapositiva 19Nmero de diapositiva 20Nmero de diapositiva 21PASOS PARA EVALUAR UNA EXPRESIONREGLAS PARA CONVERTIR EXPRESION INFIJA A POSTFIJAPrecedencia de operadores idnticosEjemplos: infijo a posfijoEjemplos: infijo a postfijoEjemplos: infijo a posfijoBosquejo de un Algoritmo para EVALUAR UNA EXPRESION POSTFIJAEvaluacin de una expresin posfijoNmero de diapositiva 30Nmero de diapositiva 31Nmero de diapositiva 32Nmero de diapositiva 33Nmero de diapositiva 34Clase Stack en JavaNmero de diapositiva 36COLASNmero de diapositiva 38Operaciones bsicas en Colas SimplesNmero de diapositiva 40Implementacin de ColasNmero de diapositiva 42Nmero de diapositiva 43Nmero de diapositiva 44Nmero de diapositiva 45Nmero de diapositiva 46Cola CircularCola CircularNmero de diapositiva 49Implementacin de Cola Circular con ArreglosNmero de diapositiva 51Nmero de diapositiva 52Nmero de diapositiva 53Nmero de diapositiva 54Nmero de diapositiva 55Nmero de diapositiva 56Nmero de diapositiva 57Nmero de diapositiva 58Implementacin de Cola Circular con ArreglosColas en JavaColas en JavaNmero de diapositiva 62LISTAS ENLAZADASLISTAS ENLAZADASLISTAS ENLAZADAS SIMPLESLISTAS ENLAZADAS SIMPLESNmero de diapositiva 67Los nodos de las listas simplesLos nodos de las listas simplesImplementacin de la clase NodeImplementacin de una Lista Encadenada SimpleLISTAS ENLAZADAS CON CABECERATIPOS DE LISTA ENLAZADA CON CABECERA:Nmero de diapositiva 74Nmero de diapositiva 75LISTAS DOBLESLISTAS DOBLESNmero de diapositiva 78Nmero de diapositiva 79IteradoresImplementacin de IteradoresImplementacin de IteradoresImplementacin de IteradoresImplementacin de IteradoresImplementacin de IteradoresImplementacin de Lista Encadenadasoperaciones con el iteradorImplementacin de Listas Encadenadas operaciones con la listaLa interfase List de JavaLa clase LinkedList en Java