Escolar Documentos
Profissional Documentos
Cultura Documentos
Almacenamiento
No Contiguo
No lineales
Adrian
Omar
Pedro
Adrian
55
10
Omar
200
Pedro
38
enlace
Pan
-1
Galletas
Jamn
Leche
inicio
3
4
5
6
7
Estructuras Lineales
1. Pilas
2. Colas
3. Listas enlazadas
1. Simples
2. Dobles
3. Circulares
2.
3.
4.
5.
6.
PILAS
Definicin:
Estructura de datos lineal donde los elementos
pueden ser aadidos o removidos slo por un
extremo.
Trabajan con filosofa LIFO (Last In- First Out ).
Ejemplos:
Pila de libros
Pila de llamadas a funciones
Pila de recursion
Pila de resultados parciales de formulas aritmticas
Dra. Laura Cruz Reyes
REPRESENTACIN DE PILAS
Usando arreglos: Define un arreglo de una
dimensin (vector) donde se almacenan los
elementos.
Ejemplo
Insertar
Insertar
Insertar
Eliminar
A:
B:
C:
elemento
Inicio:
C
A
Top
-1
Top
Top
Top
Top
Funcin
pop( )
top( )
topAndPop()
isEmpty()
makeEmpty()
//esVacia
package DataStructures;
}
private Object [ ] theArray;
private int
topOfStack;
private static final int DEFAULT_CAPACITY = 10;
Funcin
Guardar elemento en el tope
O(1)
pop( )
O(1)
top( )
O(1)
topAndPop()
isEmpty()
makeEmpty()
Complejidad
O(1)
O(1)
O(1)
O(n)
Aplicaciones de Pilas
Verificacin de balanceo de smbolos
Aplicaciones de Pilas
EXPRESIONES ARITMETICAS:
Una expresin aritmtica contiene constantes, variables
y operaciones con distintos niveles de precedencia.
OPERACIONES :
^ potencia
*/ multiplicacin, divisin
+,- suma, resta
Dra. Laura Cruz Reyes
Notaciones Aritmticas
NOTACION INFIJA
Los operadores aparecen en medio de los operandos.
A + B, A 1, E/F, A * C , A ^ B , A + B + C, A+B-C
NOTACION PREFIJA
El operador aparece antes de los operandos.
+ AB, - A1, /EF, *AC, ^AB, ++ABC, -+ABC
NOTACION POSTFIJA
El operador aparece al final de los operandos.
AB+, A1-, EF/, AC*, AB^, AB+C+, AB+CDra. Laura Cruz Reyes
Precedencia de operadores
idnticos
Expresin
Infijo
Expresin
Posfijo
Precedencia
2. Si es un operador:
1. Obtener dos operandos de la pila de valores
2. Aplicar el operador
3. Almacenar el resultado en la pila de valores
Al finalizar el recorrido, el resultado estar en la pila de valores
Dra. Laura Cruz Reyes
Aplicaciones de Pilas
Funciones Recursivas
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 Pilas
Recursion
// Funcion factorial
public static int factorial(int n) {
if (n<=1) return 1;
else return n*factorial(n-1);
}
Aplicaciones de Pilas
Recursion
// Funcion fibonacci
public static int fib(int n) {
if (n==1) return 0;
else if (n==2) return 1;
else return fib(n-1)+fib(n-2);
}
Aplicaciones de Pilas
Control de secuencia de programas.
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?
Method Summary
bool empty()
ean
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.
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 filosofa FIFO ( First In - First out), el primer
elemento en entrar es el primer elemento en salir.
Ejemplos:
Cola de automviles 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.
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 los
elementos se insertan en una posicin de la cola, tal que
conserve una relacin de mayor a menor prioridad, y se
remueven solamente por el frente.
Cola Doble (Bicola): Estructura lineal en la que los elementos
se pueden aadir o quitar por cualquier extremo de la cola
(cola bidireccional).
Dra. Laura Cruz Reyes
Estado de la cola:
Operaciones:
2. enqueue B (insertar B)
3. enqueue C (insertar C)
4. dequeue
(eliminar)
5. enqueue D (insertar D)
6. dequeue
Dra. Laura Cruz Reyes
(eliminar)
U1. Estructuras de datos lineales
Implementacin de Colas
Arreglo
con frente fijo.
con frente movible.
circular.
Listas ligadas
front (frente)
Dra. Laura Cruz Reyes
back (final)
A B C
back
Al remover un elemento:
front
back
front
B C
Frente fijo
Dra. Laura Cruz Reyes
back
C
Frente movible
U1. Estructuras de datos lineales
front
back
front
B C
back
Insertar elemento D:
front
back
front
B C D
Frente fijo
Dra. Laura Cruz Reyes
back
C D
Frente movible
U1. Estructuras de datos lineales
Insertar elemento E:
back
front
front
B C D E
back
C D E
Insertar elemento F:
back
front
front
B C D
B C D E
Frente fijo
Frente movible
Insertar elemento G:
Dra. Laura Cruz Reyes
back
Cola llena!!!!
a) Generar Error
front
Cola Circular
Cola
inicial
back
B C D
front
Es una representacin
lgica de la cola en
un arreglo.
El front y back son
movibles.
Cuando el front o back
llegan al extremo se
regresan a la primera
posicin del arreglo.
Dra. Laura Cruz Reyes
Remover
back
C D
front
back
Insertar E
C D
back
front
Insertar F
C D
front
Cola Circular
back
front
2
D
C D
E
4
0
back
Aritmtica modular:
a) if (++back == theArray.length) back = 0;
b) (++back) % theArray.length
//operador mdulo
Dra. Laura Cruz Reyes
Representacin de colas:
Usando memoria esttica: arreglos con tamao fijo y
frente fijo o movible o representacin circular.
back
front
B C D
front
Dra. Laura Cruz Reyes
D
2
E
300
F
1
40
dequeue( )
getfront( )
isEmpty()
makeEmpty()
doubleArray()*
public ArrayQueue ()
//Construct the queue.
{ theArray = new Object[DEFAULT_CAPACITY];
makeEmpty ();
}
// Return true if queue is empty, false otherwise.
public boolean isEmpty ()
{. }
Dra. Laura Cruz Reyes
package DataStructures;
public interface Queue <E> {
public boolean isEmpty ();
public void makeEmpty ();
public Edequeue ();
public E getFront ();
public void enqueue (E x)
}
Dra. Laura Cruz Reyes
Funcin
Complejidad
O(1)
O(n)
dequeue( )
getfront( )
isEmpty()
makeEmpty()
O(1)
O(1)
O(1)
O(1)
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<E> y varias clases que que la
implementan, entre ellas PriorityQueue<E>
Dra. Laura Cruz Reyes
Colas en Java
public interface Queue<E> extends
Collection<E> {
E element();
boolean offer(E o);
E peek();
E poll();
E remove();
}
Dra. Laura Cruz Reyes
Method Summary
E element()
Retrieves, but does not remove, the head of this queue, it throws an exception if this
queue is empty..
bool offer(E o)
ean
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.
poll()
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.
Dra. Laura Cruz Reyes
LISTAS ENLAZADAS
Una lista es una coleccin lineal de elementos donde el orden de
los mismos se establece mediante enlaces.
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)
Dra. Laura Cruz Reyes
header
element
header
Enith
next
Adrian
Omar
Pedro
header
tailer
tailer
element
header
Enith
next
Adrian
Omar
Pedro
header
Enith
Adrian
Omar
Pedro
Node
next
Node
next
public E getElement()
{ return element;}
public SLinkedList() {
header = null;
tailer = null;
size = 0;
}
public SLinkedList() {
header = null;
tailer = null;
size = 0;
}
Representacin
1. Lista simple c/cabecera y tierra:
header
Nodo cabecera
Representacin
3. Lista doble c/cabecera:
header
tailer
LISTAS DOBLES
En una lista doble cada node (Node) contiene dos campos de
enlace: uno al elemento anterior (prev) y otro al elemento
siguiente (next) de la lista.
element
next
LISTAS DOBLES
En una lista doble cada node (Node) contiene dos campos de
enlace: uno al elemento anterior (prev) y otro al elemento
siguiente (next) de la lista.
element
next
Lista Vaca
header = tailer =
A
tailer
C
tailer
header
tailer
header
Dra. Laura Cruz Reyes
tailer
U1. Estructuras de datos lineales
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
Implementacin de Iteradores
1. Utilizando operaciones bsicas de listas
2. Hacienda pblica la clase Node
3. Con un arreglo de iteradores declarados en
la clase lista
4. Con una clase iterador
Implementacin de Iteradores
Con 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()
Implementacin de Iteradores
Haciendo pblica la clase nodo: no encapsula
main
LinkedList <String> lst = new DlinkesList <String> ( );
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)
Implementacin de Iteradores
Con un arreglo de iteradores declarados
en la clase lista: desperdicio de memoria
public class DLinkedList<E>
implements LinkedList<E> {
private DNode<E> header;
private DNode<E> tailer;
private DNode<E> [ ] iter;
privated int size;
public void hasNext(int i)
{..}
..
Main
LinkedList <String> lst =
new DLinkesList <String> ( );
while(lst.hasNext(1)){
s +=lst.Next(1) ;
if (lst.hasNext(1);
s +=,;
}
System.out.println (s);
}
Dra. Laura Cruz Reyes
Implementacin de Iteradores
Con una clase iteradora: diseo abstracto eficiente O(1)
package DataStructures;
public class DLinkedList<E>{
public DLinkedListIterator<E> iterator( ){
return new
LinkedListIterator<E>( header);
Main
..
LinkedList <String> lst =
new DLinkesList <String> ( );
DLinkedListIterator<String> itr=lst.iterator( );
while(it.hasNext()){
s +=it.Next() ;
if (it.hasNext();
s +=,;
}
System.out.println (s);
..
Iterador *
(nodo privado)
add(e )
hasNext(p )
hasNext( )
hasPrevious (p)
hasPrevious ()
previous(p)
previous()
next(p)
next()
nextIndex()
Funcin
Complejidad
O(1)
O(1)
nextIndex()
previousIndex()
previousIndex()
O(n)
set(p,e)
set(e)
O(1)
remove(p)
Remove()
O(1)
O(1)
O(1)
O(n)
O(1)
Iterador *
(nodo privado)
size(e )
Funcin
Regresa el tamao de la lista
O(1)
isEmpty( )
isEmpty( )
O(1)
get (i)
get (i)
O(1)
set(i,e)
set(i,e)
O(1)
add(i,e)
add(i,e)
O(1)
addFirst(e)
addFirst(e)
O(1)
addLast()
addLast()
O(1)
Complejidad