Professional Documents
Culture Documents
-
Estructuras lineales
Primera parte Unidad 3
3.1 Pilas
3.1.1 Representacin en memoria
3.1.2 Operaciones bsicas
3.1.3 Aplicaciones
Estructuras de Datos
Almacenamiento
Contiguo
Lineales
Estructuras Almacenamiento
de Datos No Contiguo
No lineales
Operaciones Bsicas en Estructuras Lineales
1. Recorrido: Procesa c/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.
Pilas
Definicin
Estructura de datos lineal donde los elementos pueden ser aadidos o
removidos solo por un extremo. Trabajan con filosofa LIFO ( Last In-
First Out ).
0 1 2 3 4 5
Inicio: A: B: C:
C
B B B
A A A A
Null
pila
xxx yyy zzz
1 2 3 4 5 6 7 8
Tope 3 max 8
a) Insertar(Pila,X);
b) Insertar(Pila,X);
c) Eliminar(Pila,X); Responda las siguientes preguntas:
d) Insertar(Pila,X); Con cuantos elementos quedo la pila?
e) Eliminar(Pila,X); Hubo algn caso de error? Explique
f) Eliminar(Pila,X);
g) Eliminar(Pila,X);
h) Insertar(Pila,X);
i) Insertar(Pila,X);
j) Eliminar(Pila,X);
k) Insertar(Pila,X);
Clase para trabajar con Pilas Genricas
Constructores
Mtodos auxiliares
Ejercicio: Pila temporal de Libros Devueltos
Los libros son devueltos a la biblioteca de la escuela y se van apilando
Pero puede ser que alguien solicita un libro y no se haya ingresado al sistema de
prestamos
Lo que hace que se requiera:
Buscar en la pila
Sacar el libro
Regresar la pila segn sea el caso
OPERACIONES :
^ potencia
*/ multiplicacin, divisin
+,- suma, resta
Precedencia de Operadores
Nivel mayor prioridad
() parntesis
^ potencia
* / multiplicacin, divisin
+,- suma, resta Nivel menor prioridad
NOTACIONES:
Es la forma habitual de
escribir operaciones
aritmticas es la de situar
NOTACION INFIJA: el operador entre sus dos
Los operadores aparecen en medio de los operandos. operandos. El operador se
A + B, A 1, E/F, A * C , A ^ B , A + B + C evala dentro de los
operandos.
<operando> <operador> <operando>
NOTACION PREFIJA:
El operador aparece antes de los operandos.
+ AB, - A1, /EF, *AC, ^AB, ++AB, +- ABC
<operador> <operando> <operando>
NOTACION POSTFIJA:
El operador aparece al final de los operandos.
AB+, A1-, EF/, AC*, AB^, AB++, AB+C-
<operando> <operando> <operador>
Ejemplos:
Ejemplo1: Ejemplo2:
Infija: (5+9)*3/2^6-1 Infija: (a+b*c)/d*k^1
Postfija: 59+3*26^/1- Postfija: abc*+d/k1^*
Prefija: -*+xz/w^tyv Prefija: /+a*bc*d^k1
Algoritmo para convertir de expresin
aritmtica de infija a posfija
1.- Hacer un ciclo para recorrer la expresin a analizar (de izquierda a
derecha)
2.- Si es un numero se agregan a la variable de salida
3.- Los operadores (+,*,-,/) se agregan a la pila
4.- Si el caracter es ) retirar de la pila y el operador retirado agregar a la
variable de salida
5.-Si el caracter es ( ignorarlo
6. Despus de analizar toda la cadena, concatene a la variable de salida lo
que haya quedado en la pila.
Ejemplos:
Int max=5;
Retirar Insertar
0 1 2 3 4 Int [] v=new int[max];
Colas: Ejemplo
a) Estado
inicial d)Insertar 7 g)Retira
3 9 7 9 7 8
Fre=2
Fre=-1
Fin=3 DR=9
Fin=-1 DR=8
I)Retira
Fre=3
Fin=3 DR=7
J)Inserta 88
8
Error overflow (cola llena) a pesar de que solo
Fre=3 hay un dato en la cola. Este es el peor caso que
Fin=3 se presenta un solo dato en el ltimo elemento de
la cola.
Colas: Cdigo
public class Cola<T> {
private int Frente;
private int Fin;
private int Max;
public T Dr; public boolean Retira(){
private T [] C; if(Vacia())
public Cola(){ return false;
this(10); Dr=C[Frente];
} C[Frente]=null;
public Cola(int Tam){
if(Frente==Fin)
Max=Tam;
Frente=Fin=-1;
Frente=Fin=-1;
C=(T[]) new Object[Tam]; else
} Frente++;
public boolean Inserta(T Dato){ return true;
if(Llena()) }
return false; public boolean Llena(){
Fin++;
return Fin==Max-1;
C[Fin]=Dato;
if(Frente==-1)
}
Frente=0; public boolean Vacia(){
return true; return Frente==-1;
}
} }
Crear una clase que utilice colas simples
Crear una clase Cola con tipos de dato String
Insertar 5 elementos
Agregar mtodo (en la clase Cola) que imprima el estado actual de la
Cola (todos sus elementos)
Colas Circulares
Que problemas hay con la forma de trabajar con Colas?
La Estructura estudiada anteriormente (cola) se utiliza como una lista lineal, lo
cual provoca en algunas ocasiones desperdicio de memoria.
Esto se presenta cuando hay un solo dato en la estructura, pero se encuentra
en el ltimo elemento
Para hacer uso ms eficiente de la memoria disponible podemos tratar la
estructura cola como una estructura circular. Es decir, el elemento anterior al
primero es el ltimo.
Colas Circulares
a) Estado
e) Inserta 7 i) Inserta 4
inicial
Fre=-1 9 5 3 7 4 3 7
Fre=0 Fre=2
Fin=-1
Fin=3 Fin=0
b) Inserta 9 f) Inserta 666
j) Inserta 1
9 5 3 7
Fre=0 9 Fre=0 4 1 3 7
Fre=2
Fin=0 Fin=3
overflowSi Fre=0 and Fin=Max-1 entonces Fin=1,
c) Inserta 5 Imprime Overflow
g) Retira
Fre=0 9 5
Fre=1 5 3 7 k) Inserta 55
Fin=1 Fre=2 4 1 3 7
Fin=3,
d) Inserta 3 dr=9 Fin=1,
Fre=0 9 5 3 h) Retira 3 7
L) Retira o) Retira
Fre=3 4 1 7
Si Fre=-1 entonces
Fre=-1 Imprime UNDERFLOW
Fin=1,dr=3
Fin=-1,dr=
m) Retira
4 1
Fre=0
Si Fre=max-1 entonces
Fin=1,dr=7 Fre=0
n) Retira
1
Fre=1
Fin=1,dr=7
) Retira Si Fre=Fin entonces
Fre=-1
Fre=-1 Fin=-1
Fin=-1,dr=1
Colas Circulares
Algoritmo RetiraCola
Algoritmo InsertaColaCir
Si Fre= -1 Entonces
Si (Fre=0 y Fin=Max-1) o (Fin+1=Fre) Entonces Imprime Cola Vacia
Imprime Cola Llena si_no
si_no DatoRetirado=C[Fre]
si Fin=Max-1 entonces Si Fre=Fin Entonces
Fin=0 Fre=-1
si_no Fin=-1
Fin=Fin+1 si_no
fin_decision Si Fre=Max-1 Entonces
C[Fin]=dato Fre=0
Si Fre= - 1 Entonces Si_no
Fre=0 Fre = Fre + 1
Fin_decison Fin_decision
Fin_decision Fin_decision
Fin_Algoritmo Fin_Decision
Fin_Algoritmo
Cola Circular
Cola Simple
Menu Estructura Tipo Cola:
Cola Simple (ya revisado)
Cola Circular ( 1.-Agregar -aleatorios , nmeros entre 1 y 100-,
2.- Eliminar, 3.- Ver Estado Imprimir Todos- )
Clase Queue de Java (Utilizar 3 mtodos)
Proyecto colas: Sucursal Bancaria
Se subir a la plataforma un pequeo proyecto simulando una
sucursal bancaria
Tarea Colas para investigar:
Se dejar en la plataforma
Listas
Temario de Listas
3.3 Listas
3.3.1 Operaciones bsicas
3.3.2 Tipos de listas: simplemente enlazadas, doblemente enlazadas y
circulares
3.3.3 Aplicaciones
Listas: Introduccin
Las estructuras de datos analizadas anteriormente requieren de la
definicin del tamao mximo de memoria y esta permanece
inalterable a lo largo de la ejecucin del programa, ahora
analizaremos el concepto de estructura dinmica de datos. Este tipo
de estructuras requiere de un tipo de datos conocidos con el nombre
de referencias (apuntadores).
La principal ventaja que presenta manejar variables referencia es que
se pueden adquirir posiciones de memoria a medida que se
necesitan, y liberarlas cuando ya no se requieran. De esta manera se
pueden crear estructuras dinmicas .
Listas Definicin:
Una lista es una coleccin 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
Informacin enlace
inicio
* Lista enlazada de 4 elementos
Listas: Caractersticas
Este tipo de lista tiene como caracterstica que el campo siguiente del
ltimo nodo de la lista no seala a ningn nodo (su valor es la
constante null).
Los nodos de las listas
Un nodo se divide en 2 partes:
Informacin: Contiene la informacin del elemento.
Enlace: Contiene la direccin del siguiente nodo de la lista. Informacin Enlace
informacin enlace
Nodo
Como se almacenan las Listas:
1. Arreglos: La relacin lineal esta implcita en la relacin fsica de los
elementos. Desventaja: Almacenamiento esttico y tamao fijo.
2) Insertar Dato1
INSERTAR AL FRENTE
Frente
A
Frente
Apunta al inicio de la Fin
lista Apunta al ltimo
de la lista
Enlazando Listas Simples
3) Insertar Dato2
INSERTAR LA FRENTE
Frente
Nuevo A
B
Fin Apunta al ltimo
de la lista
Listas: Cdigo
Hacer un men con lista simple
Agregar elementos al Frente
Agregar Elementos al Final
Mostrar Frente
Mostrar Fin
Mostrar todos los elementos
Borrar Elementos de una Lista
Casos que se pueden presentar:
El mtodo recibe como parmetro el tipo T que tiene la
informacin a buscar
1.- Que la lista este vaca (regresar false)
Caso 2 (Borrar Lista Sencilla)
2.- Ubicar al nodo teniendo 2 elementos de referencia Ant (nodo anterior) y Tra (nodo a
eliminar)
hacer Tra=frente
bandera=false (indicar si se encontr o no el resultado)
hacer un ciclo mientras tra!=null
{ if tra.info=al dato a buscar
Aqu entra porque
bandera=true;
encontr el elemento
salir del ciclo
Ant=Tra;
Tra=Tra.Damesig();
}
Si la bandera es falsa retornar band (no se encontr)
3.- El dato a buscar sea el que este al frente:
if Frente===Fin (solo hay un nodo)
Frente=Fin=null;
retornar true;
4.- Si el dato a borrar es el frente, pasar al nodo siguiente el frente
Frente=Frente.DameSig
retornar true;
5.- Si el dato a borrar es igual al Fin (Tra==Fin), mover el fin
Fin=Ant; Fin.SetSig=null; retornar true;
6.- Esta entre dos nodos ant.setSig=Tra.DameSig; retornar true;
Casos para borrar
1.-Lista vaca
2.- No se encontr
3.- El nodo es fin:
fin=ant
Fin.setsiguiente(null)
4.- El nodo es el frente:
1. Frente=frente.getSiguiente;
5.- El nodo esta entre 2 nodos:
ant.setsiguiente=tra.DameSig()
tra.setsiguiente=null
Opciones clase Lista:
Agregar elementos al Frente
Agregar Elementos al Final
Mostrar Frente
Mostrar Fin
Insertar Ordenado
Buscar un elemento
Borrar
Mostrar todos los elementos
Listas doblemente Ligadas
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.
Fre Fin
Una lista doblemente ligada puede crearse bajo uno de los siguientes criterios:
Frente A
Fin
Lista de tres elementos
Frente A B C
Fin
Implementando Listas Doblemente Ligadas
Crear lista doble Orden Descendente.- Esta opcin generar una lista doble a
partir de la lista sencilla, generando los valores en orden descendente(de
mayor a menor).
Se subir a la plataforma Moodle
Listas Circulares: Investigar
Qu es una Lista Circular? Incluye una imagen.
Cmo se representan las listas circulares?
Menciona diferencias entre la lista sencilla y la lista circular
Escribe un mtodo para agregar elementos al final en una lista
circular. Recuerda que la lista debe de ser genrica. Agrega todos los
comentarios posibles al cdigo para que sea ms entendible.
Listas Circulares: Investigar
Entregar impreso
Para lunes 13 de Nov
Agregar las referencias en donde se obtuvo la informacin
Incluir hoja de presentacin