3. Estructuras Lineales Est - PowerPoint PPT Presentation

About This Presentation
Title:

3. Estructuras Lineales Est

Description:

Title: 3. Estructuras Lineales Est ticas y Din micas Author: as Last modified by: Miguel Created Date: 9/7/2005 10:19:41 AM Document presentation format – PowerPoint PPT presentation

Number of Views:166
Avg rating:3.0/5.0
Slides: 73
Provided by: as22
Category:

less

Transcript and Presenter's Notes

Title: 3. Estructuras Lineales Est


1
3. Estructuras Lineales Estáticas y Dinámicas
  • Pilas
  • Colas
  • Listas enlazadas
  • Simples
  • Dobles

2
Estructuras de Datos
3
Operaciones Básicas en Estructuras Lineales
  1. Recorrido Procesa c/elemento de la estructura.
  2. Búsqueda Recupera la posición de un elemento
    específico.
  3. Inserción Adiciona un nuevo elemento a la
    estructura.
  4. Borrado Elimina un elemento de la estructura.
  5. Ordenación Ordena los elementos de la estructura
    de acuerdo a los valores que contiene.
  6. Mezcla Combina 2 estructuras en una sola.

4
PILAS
  • Definición
  • Estructura de datos lineal donde los elementos
    pueden ser añadidos o removidos solo por un
    extremo.
  • Trabajan con filosofía LIFO (Last In- First Out
    ).
  • Ejemplos
  • Pila de platos
  • Pila de discos
  • Pila de llamadas a funciones
  • Pila de recursion
  • Pila de resultados parciales de formulas
    aritméticas, etc.

5
OPERACIONES BASICAS CON PILAS
  • -PUSH (insertar).- Agrega un elementos a la pila
    en el extremo llamado tope.
  • -POP (remover).- Remueve el elemento de la pila
    que se encuentra en el extremo llamado tope.
  • -VACIA.- Indica si la pila contiene o no contiene
    elementos.
  • -LLENA.- Indica si es posible o no agregar nuevos
    elementos a la pila.

6
  • REPRESENTACIÓN DE PILAS
  • Usando arreglos Define un arreglo de una
    dimensión (vector) donde se almacenan los
    elementos.

TOPE Apunta hacia el elemento que se encuentra
en el extremo de la pila. (inicialmente es -1).
7
Ejemplo
Insertar A
Insertar B
Insertar C
Eliminar elemento
Inicio
8
Interface para una pila de datos enteros
  • interface IPila
  • public boolean llena()
  • public boolean vacia()
  • public void push (int elem)
  • public int pop()

9
Implementación usando un arreglo
  • class Pila implements IPila
  • int tope -1
  • private int pila new int 10
  • final int MAX 9
  • public boolean llena()
  • return ( tope MAX )
  • public void push (int elem)
  • if (this.llena()) then
  • // ERROR
  • else
  • tope
  • pila tope elem
  • public boolean vacia()
  • return (tope -1)
  • public int pop()
  • if (this.vacia()) then
  • // ERROR
  • else
  • int x pilatope
  • tope --
  • return x

10
Implementación usando un Vector
  • public class Stack
  • private Vector items
  • public Stack()
  • items new Vector(10)
  • public Object push(Object item)
  • items.addElement(item)
  • return item
  • public synchronized Object pop()
  • int len items.size()
  • Object obj null
  • if (len 0) throw new EmptryStackExceptio
    n()
  • obj items.elementAt(len-1)
  • items.removeElementAt(len 1)
  • return obj
  • public boolean isEmpty()
  • if (items.size 0) return true

11
Aplicaciones de Pilas
  • EXPRESIONES ARITMETICAS
  • Una expresión aritmética contiene constantes,
    variables y operaciones con distintos niveles de
    precedencia.
  • OPERACIONES
  • potencia
  • / multiplicación, división
  • ,- suma, resta

12
NOTACIONES
  • NOTACION INFIJA
  • Los operadores aparecen en medio de los
    operandos.
  • A B, A 1, E/F, A C , A B , A
    B C, AB-C
  • NOTACION PREFIJA
  • El operador aparece antes de los operandos.
  • AB, - A1, /EF, AC, AB, ABC,
    AB-C
  • NOTACION POSTFIJA
  • El operador aparece al final de los operandos.
  • AB, A1-, EF/, AC, AB, ABC, ABC-

13
PASOS PARA EVALUAR UNA EXPRESION
  • 1.-CONVERTIR A POSTFIJO convertir la expresión
    en notación infijo a notación postfijo
  • 2.-EVALUAR LA EXPRESION POSTFIJA usar una pila
    para mantener los resultados intermedios cuando
    se evalúa la expresión en notación posfijo.

14
REGLAS PARA CONVERTIR EXPRESION INFIJA A POSTFIJA
  • Se crea un string resultado donde se almacena la
    expresión en postfijo.
  • 1.- Los operandos se agregan directamente al
    resultado
  • 2.- Un paréntesis izquierdo se mete a la pila y
    tiene prioridad o precedencia cero (0).
  • 3.- Un paréntesis derecho saca los elementos de
    la pila y los agrega al resultado hasta sacar un
    paréntesis izquierdo.
  • 4.- Los operadores se insertan en la pila si
  • a) La pila esta vacía.
  • b) El operador en el tope de la pila tiene
    menor precedencia.
  • c) Si el operador en el tope tiene mayor
    precedencia se saca y agrega al resultado
    (repetir esta operación hasta encontrar un
    operador con menor precedencia o la pila este
    vacía).
  • 5.- Cuando se termina de procesar la cadena que
    contiene la expresión infijo se vacía la pila
    pasando los elementos al resultado.

15
Ejemplos
  • Convertir las siguientes expresiones infijas a
    posfijo
  • A BC-D
  • A ((B-C) / 2))
  • ((X-Z)(YW))/XY

16
REGLAS PARA EVALUAR UNA EXPRESION POSTFIJA
  • Recorrer la expresion de izquierda a derecha
  • Si es un operando
  • almacenar el valor en la pila de valores
  • Si es un operador
  • Obtener dos operandos de la pila de valores
  • Aplicar el operador
  • Almacenar el resultado en la pila de valores

Al finalizar el recorrido, el resultado estará en
la pila de valores
17
Aplicaciones de Pilas
Funciones Recursivas
  • Las pilas pueden ser usadas para implementar la
    recursión en programas.
  • Una función o procedimiento recursivo es aquel
    que se llama a si mismo.
  • Ejemplos
  • Factorial
  • Números de Fibonacci
  • Torres de Hanoi
  • Algoritmos de Ordenamiento de datos
  • Etc.

18
Aplicaciones de Pilas
Recursion
// Funcion factorial public static int
factorial(int n) if (nlt1) return 1
else return nfactorial(n-1)
// Funcion fibonacci public static int fib(int
n) if (n1) return 0 else if
(n2) return 1 else return
fib(n-1)fib(n-2)
19
Aplicaciones de Pilas
Control de secuencia de programas.
  • Las pilas son requeridas para implementar el
    control de flujo de ejecución de un programa con
    subprogramas (funciones, procedimientos o
    métodos).
  • Subprogramas recursivos o no recursivos
  • Existen llamadas a ejecución de subprogramas.
  • Un subprograma se ejecuta completamente antes de
    retornar al punto donde fue llamado.

20
Aplicaciones de Pilas
Control de secuencia de programas.
// Programa Principal class 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?
21
Clase Stack en Java
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 básicas.
java.util Class StackltEgt java.lang.Object
java.util.AbstractCollectionltEgt
java.util.AbstractListltEgt
java.util.VectorltEgt
java.util.StackltEgt All Implemented Interfaces
Serializable, Cloneable, IterableltEgt,
CollectionltEgt, ListltEgt, RandomAccess
22
(No Transcript)
23
COLAS
  • Definicion. Es una lista lineal de elementos en
    la que las operaciones de insertar y eliminar se
    realizan en diferentes extremos de la cola.
  • Trabajan con filosofía FIFO ( First In - First
    out), el primer elemento en entrar es el primer
    elemento en salir.
  • Ejemplos
  • Cola de automóviles esperando servicio en una
    gasolinera
  • Cola de clientes en una ventanilla del banco para
    pagar un servicio
  • Cola de programas en espera de ser ejecutados por
    una computadora.

24
  • TIPOS DE COLAS
  • Cola simple Estructura lineal donde los
    elementos salen en el mismo orden en que llegan.
  • Cola circular Representación lógica de una cola
    simple en un arreglo.
  • Cola de Prioridades Estructura lineal en la cual
    los elementos se insertan en cualquier posición
    de la cola y se remueven solamente por el frente.
  • Cola Doble (Bicola) Estructura lineal en la que
    los elementos se pueden añadir o quitar por
    cualquier extremo de la cola (cola bidireccional).

25
Operaciones básicas en Colas Simples
  • Insertar.- Almacena al final de la cola el
    elemento que se recibe como paramétro.
  • Eliminar.- Saca de la cola el elemento que se
    encuentra al frente.
  • Vacía.- Regresa un valor booleano indicando si la
    cola tiene o no elementos (true si la cola esta
    vacia, false si la cola tiene al menos un
    elemento).
  • Llena.- Regresa un valor booleano indicando si la
    cola tiene espacio disponible para insertar
    nuevos elementos ( true si esta llena y false
    si existen espacios disponibles).

26
  • Operaciones

Estado de la cola
Inicio Cola Vacía
A
1.- Insertar A
2.- Insertar B
3.- Insertar C
4.- Remover Elemento
5.- Insertar D
6.- Remover Elemento
27
Implementación de Colas
  • Arreglo
  • con frente fijo.
  • con frente movible.
  • circular.
  • Listas ligadas

28
Representación usando arreglos
  • Las colas pueden ser representadas en arreglos de
    una dimensión (vector) manteniendo dos variables
    que indiquen el FRENTE y FINAL de los elementos
    de la cola.

29
  • Cuando la cola esta vacía las variables frente y
    final son nulos y no es posible remover
    elementos.
  • Cuando la cola esta llena ( frente 0 y final
    n-1) no es posible insertar elementos nuevos a la
    cola.
  • Cuando se remueven elementos el frente puede
    incrementarse para apuntar al siguiente elemento
    de la cola (implementacion con frente movil) o
    los elementos en la cola pueden desplazarse una
    posicion adelante (implementación con frente
    fijo)
  • Recuperación de espacio Cuando no hay espacios
    libres al final del arreglo los elementos pueden
    ser desplazados para desocupar posiciones en un
    extremo del arreglo o se puede manejar una
    estructura circular.

30
  • Ejemplo Suponer que usamos un arreglo de 5
    posiciones. Usando la representación de frente
    fijo y frente movible.

Al remover un elemento
Frente
Final
Frente
Final
Frente fijo
Frente movible
31
Frente
Final
Insertar elemento D
Frente
Final
32
Insertar elemento E
Frente
Final
B C D E
Insertar elemento F
Frente
Final
Frente
Final
Insertar elemento G
Error Cola llena!!!!
33
Cola Circular
Cola inicial
  • Es una representación lógica de la cola en un
    arreglo.
  • El frente y final son movibles.
  • Cuando el frente o final llegan al extremo se
    regresan a la primera posición del arreglo.

Remover
Insertar E
Insertar F
34
  • Representación de colas
  • Usando memoria estática arreglos con tamaño
    fijo y frente fijo o movible o represntación
    circular.
  • Usando memoria dinámica Listas ligadas.

0 1 2 3 4
35
  • Interfase de un TDA llamado ICola
  • interface ICola
  • public boolean llena()
  • public boolean vacia()
  • public void insertar (Object elem)
  • public Object eliminar()

36
Implementación de una cola
Implementacion usando Object
Implementacion usando parametros de tipo
  • class ColaltTgt implements IColaltTgt
  • private T cola
  • private int frente -1
  • private int fin -1
  • private int size
  • public Cola(int s)
  • size s-1
  • cola new Ts
  • public boolean vacia()
  • return (frente -1)
  • public boolean llena()
  • return ( fin size )
  • public void insertar( T elem)
  • ...

class Cola implements ICola private Object
cola private int frente -1 private int fin
-1 private int size public Cola(int s)
size s-1 cola new
Objects public boolean
vacia() return (frente -1)
public boolean llena()
return ( fin size ) public
void insertar( Object elem) if ( frente
-1 ) frente else
if ( fin size) ERROR
Cola Llena! fin
colafinelem public
Object eliminar()
37
Ejercicio.
  • Definir una clase Cola con las operaciones
    básicas en 3 implementaciones diferentes
  • Con tamaño fijo y frente fijo. Desplazamiento de
    elementos cada vez que se remueve un elemento.
  • Con tamaño fijo y frente movible. Desplazamiento
    de elementos cuando el final llegue al límite del
    arreglo y existan elementos vacíos al frente.
  • Con tamaño variable.
  • Incrementar el tamaño del arreglo cuando la cola
    este llena.

38
Colas en Java
  • Java contiene la definición de interfaces y
    clases para el manejo de colas.
  • Las colas son una colección de elementos
    diseñadas para almacenar elementos que esperan
    ser procesados.
  • Java contiene una interfase parametrizada
    QueueltEgt y varias clases que que la implementan,
    entre ellas PriorityQueueltEgt

39
Colas en Java
  • public interface QueueltEgt extends CollectionltEgt
  • E element()
  • boolean offer(E o)
  • E peek()
  • E poll()
  • E remove()

40
(No Transcript)
41
Cola de Prioridad en Java
  • java.util Class PriorityQueueltEgt
  • java.lang.Object
  • java.util.AbstractCollectionltEgt
  • java.util.AbstractQueueltEgt
  • java.util.PriorityQueueltEgt
  • Type Parameters
  • E - the type of elements held in this collection
  • All Implemented Interfaces
  • Serializable, IterableltEgt, CollectionltEgt,
    QueueltEgt

42
(No Transcript)
43
(No Transcript)
44
Tablas Hash
  • java.util Class HashtableltK,Vgt
  • java.lang.Object
  • java.util.DictionaryltK,Vgt
  • java.util.HashtableltK,Vgt
  • All Implemented Interfaces
  • Serializable, Cloneable, MapltK,Vgt

45
Este ejemplo crea un tabla hash con llave de
tipo String y datos de tipo Integer.
  • import java.util.Hashtable
  • public class Tabla
  • public static void main (String arg)
  • HashtableltString, Integergt numeros new
    HashtableltString, Integergt()
  • numeros.put("uno",1)
  • numeros.put("dos", new Integer(2))
  • Integer n numeros.get("dos")
  • if (n ! null) System.out.println(n)

46
Constructores de Tablas hash
47
LISTAS ENLAZADAS
  • Simples (con enlace simple)
  • Dobles (doblemente enlazadas)
  • Existe diversas implementaciones de estas
    estructuras.
  • Las variaciones mas comunes implementan listas
    circulares y listas con cabecera en sus dos
    variaciones (simples y dobles)

48
  • En lenguajes donde no se cuenta con memoria
    dinámica, las listas se implementan usando
    arreglos.

información enlace
  • El arreglo contiene dos campos uno para la
    información y otro para relacionar al siguiente
    elemento.
  • La lista se recorre desde el inicio y hasta
    encontrar un elemento que contenga un enlace
    vacío.

Pan
-1
0 1 2 3 4 5 6 7
Galletas
4
inicio
Jamón
7
Leche
0
49
LISTAS
  • Una lista es una colección lineal de elementos
    llamados nodos donde el orden de los mismos se
    establece mediante punteros o referencias y
    existe un puntero/referencia especial llamado
    inicio para localizar al primer elemento.
  • Ejemplos
  • inicio

Lista enlazada de 0 elementos
Información enlace
Lista enlazada de 4 elementos
50
Los nodos de las listas
  • Un nodo se divide en 2 partes
  • Información Contiene la información del
    elemento.
  • Enlace Contiene la dirección del siguiente nodo
    de la lista.

public class Nodo // atributos public
String informacion public Nodo enlace
// el constructor de nodos Nodo (String n)
informacion n enlace
null
51
Almacenamiento de datos
  • Arreglos La relación lineal esta implícita en la
    relación física de los elementos. Desventaja
    Almacenamiento estático y tamaño fijo.
  • Elementos enlazados Agrega a cada elemento un
    campo de enlace, no requieren almacenamiento
    contiguo en memoria, se pueden añadir y borrar
    elementos fácilmente.

52
Listas Simples
  • Colección lineal de elementos llamados nodos.
  • Existe un elemento llamado inicio que apunta al
    primer elemento de la lista.
  • Cada nodo contiene un campo de enlace que apunta
    al siguiente elemento.
  • El último elemento de la lista en su campo enlace
    apunta a nulo.
  • Al principio el apuntador inicio apunta a nulo.

53
Operaciones con listas simples
  • Insertar Agrega un elemento a la lista.
  • Eliminar Retira un elemento de la lista.
  • Buscar Busca un elemento en la lista.
  • Recorrer Visita todos los elementos de la lista.
  • Vacía Indica si la lista contiene o no
    elementos.
  • Tamaño Indica el número de elementos de la
    lista.
  • Con las operaciones anteriores, define una
    interfase para una lista simple que contiene
    datos de tipo String.

54
  • public interface ILista
  • public void insertar(String elemento)
  • public boolean eliminar(String elemento)
  • public String eliminar()
  • public boolean buscar(String elemento)
  • public String recorrer()
  • public boolean vacía()
  • public int tamaño()

55
Implementación de la interfase ILista
  • public boolean buscar(String elemento)
  • Nodo temporal inicio
  • while (temporal ! null)
  • if (elemento.equals(temporal.dato))
  • return true
  • else
  • temporal temporal.enlace
  • return false
  • public String recorrer() .
  • public void insertar(String elemento)
  • Nodo n new Nodo(elemento)
  • // donde se inserta???
  • // al frente?
  • // al final?
  • // en el medio?
  • public boolean eliminar(String elemento)

public class Lista implements ILista class
Nodo public String dato public Nodo
enlace Nodo (String n) dato n
enlace null Nodo inicio
public Lista() inicio null
public boolean vacía() return (inicio
null) public int tamaño()
int n0 Nodo temporalinicio
while (temporal ! null) n
temporal temporal.enlace
return n
56
Tarea individual.Fecha de entrega
  • Escribe el método insertar para una lista que
    contiene datos ordenados ascendentemente.
  • Escribe el método eliminar un elemento específico
    para la clase Lista.
  • Escribe el método recorrer donde el String de
    resultado contiene a todos los elementos de la
    lista y cada elemento esta separado por un
    return.
  • Prueba la clase Lista con un programa Java que
    lea de teclado 10 nombre y los inserte en la
    lista. Imprime la lista y su tamaño después de
    cada operación de inserción.

57
Puntos Extras!!
  • Escribe un método llamado copia que obtenga una
    copia de la lista y la regrese como resultado.

58
  • Ejercicio
  • Implementar una cola usando una lista ligada.
  • La cola contiene alumnos.
  • Que elementos (datos) se requieren?
  • Que métodos se implementan?

59
Ejemplo Implementación de una cola de datos
String usando una lista
  • class Cola_Lista
  • class Nodo
  • String nombre
  • Nodo enlace
  • Nodo (String n)
  • nombre n
  • enlace null
  • Nodo frente
  • Nodo fin
  • Cola_Lista()
  • frentenull
  • finnull
  • public boolean vacia()
  • return (frente null)
  • public boolean llena()

public void insertar (String e ) Nodo
n new Nodo(e) if (this.vacia() )
frente n fin n
else fin.enlace n
fin n public String
eliminar() Nodo n frente if (frente
! null) frente n.enlace if
(frentenull) fin null
return n.nombre else ERROR
//return null // excepción // final de
la clase
60
  • Ejercicio
  • Implementar una pila usando una lista ligada.
  • La pila contiene números enteros.
  • Que elementos (datos) se requieren?
  • Que métodos se implementan?

tope
10 7 4
2
61
Implementación de una pila de datos Integer
usando una lista
  • class Pila_Lista
  • class Nodo
  • Integer dato
  • Nodo enlace
  • Nodo (Integer n)
  • dato n
  • enlace null
  • Nodo tope
  • Pila_Lista()
  • topenull
  • public boolean vacia()
  • return (tope null)
  • public boolean llena()
  • return false

public Integer pop() if (tope !
null) Nodo n tope
tope tope.enlace
return n.dato else
ERROR public void push(Integer
elem) Nodo n new Nodo(elem)
n.enlace tope tope
n
62
Tipos parametrizados
  • Define una clase para implementar una Pila/Cola
    usando una lista. Los datos que se almacenaran
    serán tipo Object.
  • Que requiere un programa que use estas
    estructuras?
  • Define una clase parametrizada para implementar
    una Pila usando una lista.
  • Define una clase parametrizada para implementar
    una Cola usando una lista.

63
LISTAS DOBLES
  • Una lista doble es una estructura lineal de
    elementos llamados nodos los cuales contienen dos
    campos de enlace uno al elemento anterior y otro
    al elemento siguiente de la lista.
  • El primer nodo de la lista contiene nulo en su
    enlace al elemento anterior y el último nodo de
    la lista contiene nulo en su enlace al elemento
    siguiente.

public class Nodo // atributos Object
informacion Nodo anterior Nodo
siguiente // el constructor de nodos
Nodo (Object n) informacion n
anterior null siguiente null

Estructura del Nodo
Anterior Información Siguiente
64
  • Ejemplos

Lista Vacía
inicio fin
Lista de un solo elemento
fin
Lista de tres elementos
fin
65
Operaciones con listas dobles
  • Insertar Agrega un elemento a la lista.
  • Eliminar Retira un elemento de la lista.
  • Buscar Busca un elemento en la lista.
  • Recorrer hacia adelante Visita todos los
    elementos de la lista desde el inicio hasta el
    final.
  • Recorrer hacia atrás Visita todos los elementos
    de la lista desde el final hasta el inicio.
  • Vacía Indica si la lista contiene o no
    elementos.
  • Tamaño Indica el número de elementos de la
    lista.
  • Con las operaciones anteriores, define una
    interfase para una lista doble que contiene datos
    de tipo Integer.

66
  • public interface IListaDoble
  • public void insertar(Integer elemento)
  • public boolean eliminar(Integer elemento)
  • public Integer eliminar()
  • public boolean buscar(Integer elemento)
  • public String recorrer()
  • public boolean vacía()
  • public int tamaño()

67
La interfase List de Java
  • java.util Interface ListltEgt
  • All Superinterfaces
  • CollectionltEgt, IterableltEgt
  • All Known Implementing Classes
  • AbstractList, AbstractSequentialList, ArrayList,
    AttributeList, CopyOnWriteArrayList, LinkedList,
    RoleList, RoleUnresolvedList, Stack, Vector

68
La clase LinkedList en Java
java.util Class LinkedListltEgt java.lang.Object
java.util.AbstractCollectionltEgt
java.util.AbstractListltEgt
java.util.AbstractSequentialListltEgt
java.util.LinkedListltEgt Type Parameters E
- the type of elements held in this
collection All Implemented Interfaces
Serializable, Cloneable, IterableltEgt,
CollectionltEgt, ListltEgt, QueueltEgt
69
Métodos de la clase LinkedList
70
LISTAS ENLAZADAS CON CABECERA
  • Es una lista enlazada que contiene un nodo
    especial llamado nodo cabecera que se encuentra
    al inicio de la misma.
  • NODO CABECERA.- Es un nodo especial que no
    contiene información, solo se utiliza para
    indicar el inicio de los elementos de la lista.
  • La utilización de un nodo cabecera en listas
    enlazadas permiten que la implementación de los
    métodos de inserción y eliminación sea mas
    sencilla, ya que evitan tratar de forma explícita
    los casos especiales (insertar al inicio o
    eliminar el primer elemento). Sin embargo,
    requieren de un nodo extra en la lista (el nodo
    cabecera).

71
TIPOS DE LISTA ENLAZADA CON CABECERA
  • 1)LISTA CON CABECERA Y TIERRA
  • Es una lista enlazada con cabecera, donde el
    apuntador del último nodo contiene nulo.
  • 2)LISTA CIRCULAR CON CABECERA
  • Es una lista enlazada con cabecera, donde el
    último nodo contiene un apuntador hacia la
    cabecera.

72
  • Representación
  • 1.- Lista simple c/cabecera y tierra

2.- Lista circular c/cabecera
Write a Comment
User Comments (0)
About PowerShow.com