estructuras de datos fundamentos de análisis y diseño de algoritmos

Post on 24-Jan-2016

222 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

Estructuras de datos

Fundamentos de análisis y diseño de algoritmos

Listas enlazadas

Definición

Una lista enlazada es una colección de elementos llamados nodos. Cada nodo contiene un dato y una referencia al siguiente nodo.

Listas enlazadas

23

Cada nodo se representa por medio de dos campos:

Campo dato: contiene el valor del nodo

Campo siguiente: indica cuál es el nodo con el que se enlaza

dato siguiente

99

dato siguiente

4

dato siguiente

Listas enlazadas

23 6 99

Lista enlazada con 3 nodos.

Los nodos tienen datos de tipo entero.

Nodo 1

Dato: 23

Siguiente: Nodo 2

Nodo 2

Dato: 6

Siguiente: Nodo 3

Nodo 3

Dato: 99

Siguiente: null

(indica que es el fin de la lista)

Listas enlazadas

Definición: Nodo cabecera

E A R E

Al primer nodo se le llama cabecera y sirve como punto de referencia en la lista.

No contiene ningún dato

Listas enlazadas

Las operaciones sobre una lista enlazada son:

•Crear lista•Insertar nodo al inicio•Eliminar nodo al inicio•Imprimir datos•Es una lista vacía?

Listas enlazadas

•Crear lista

Al crear una lista, se crea el nodo cabecera.

El nodo cabecera tiene como dato null y como siguiente null.

Listas enlazadas

Cada nodo se representa por medio de dos campos:

Campo dato: contiene el valor del nodo

Campo siguiente: indica cuál es el nodo con el que se enlaza

public class Nodo{

Object dato; Nodo siguiente;

Nodo(Object o) { dato=o; siguiente=null; }

}

Listas enlazadas

Crear lista

Al crear una lista, se crea el nodo cabecera.

El nodo cabecera tiene como dato null y como siguiente null.

public class Lista{

Nodo cabecera;

Lista(){

cabecera=new Nodo(null);

}

. . .

}

Listas enlazadas

•¿Lista vacía?

Cuando la lista está vacía el campo siguiente de la cabecera es null

Listas enlazadas

•¿Lista vacía?

Cuando la lista está vacía el campo siguiente de la cabecera es null

public boolean estaVacia(){

if (cabecera.siguiente==null){

return true;

}

else{

return false;

}

}

public class Lista{

Nodo cabecera;

Lista(){

cabecera=new Nodo(null);

}

public boolean estaVacia(){ if (cabecera.siguiente==null){ return true; } else{ return false; }

}

Listas enlazadas

•Insertar nodo al inicio(La lista está vacía)

W

•Se crea un nuevo nodo con el dato que se desee colocar y con siguiente null

•El campo siguiente del nodo cabecera pasa de ser null a ser el nodo que estamos insertado

Listas enlazadas

Insertar nodo al inicio(La lista está vacía)

•Se crea un nuevo nodo con el dato que se desee colocar y con siguiente null

•El campo siguiente del nodo cabecera pasa de ser null a ser el nodo que estamos insertado

void insertar(Object o)

{

Nodo nuevo=new Nodo(null);

if ( estaVacia() ) {

nuevo=new Nodo(o);

cabecera.siguiente=nuevo;

}

Listas enlazadas

•Insertar nodo al inicio( La lista no está vacía)

W

•Se crea un nuevo nodo con el dato que se desee colocar y en su campo siguiente se establece el siguiente del nodo cabecera

•Al nodo cabecera se le asigna como siguiente el nodo que estamos insertando

A W

Listas enlazadas

Insertar nodo al inicio(La lista no está vacía)

•Se crea un nuevo nodo con el dato que se desee colocar y en su campo siguiente se establece el siguiente del nodo cabecera

•Al nodo cabecera se le asigna como siguiente el nodo que estamos insertando

if ( estaVacia() ) {

nuevo=new Nodo(o);

cabecera.siguiente=nuevo;

}

else{

nuevo=new Nodo(o);

nuevo.siguiente=cabecera.siguiente;

cabecera.siguiente=nuevo;

}

}

Listas enlazadas

•Eliminar nodo al inicio

A W

W

•Al nodo cabecera se le asigna como siguiente, el siguiente del primer nodo

Listas enlazadas

Eliminar nodo al inicio

•Al nodo cabecera se le asigna como siguiente, el siguiente del primer nodo

public void eliminar() { Nodo borrar=cabecera.siguiente; cabecera.siguiente=borrar.siguiente; borrar.siguiente=null;

}

Listas enlazadas

•Imprimir datos

Listas enlazadas

•Imprimir datos public void imprimir() { Nodo actual=new Nodo(null);

if (estaVacia()) System.out.println(“La lista esta vacia"); else { actual=cabecera.siguiente;

System.out.println("\n"); while( actual != null){ System.out.print( actual.dato ); actual=actual.siguiente; }

}}

Listas enlazadas

•Desarrolle la operación eliminarAlFinal()

Listas enlazadas

•Desarrolle la operación eliminarAlFinal()•Desarrolle la operación insertAt(Object o, int i)

Listas enlazadas

•Desarrolle la operación eliminarAlFinal()•Desarrolle la operación insertAt(Object o, int i)•Indique la complejidad de las operaciones:

Crear listaInsertar nodo al inicioEliminar nodo al inicioImprimir datos¿Lista vacía?eliminarAlFinal()insertAt(Object o, int i)

Pila

Pila

Definición

Una pila es una estructura de datos en la que el último elemento que se coloca en la pila, será el primero que se puede sacar

En una pila sólo se puede adicionar al tope y solo se puede retirar de él.

Pila

Definición

La pila es una estructura LIFO (Last In – First Out)

Se utiliza la Lista para implementar la Pila

Pila

5 9

Nodo en el tope de la pila

Pila

5 9

Nodo en el tope de la pila

5

9

Nodo en el tope de la pila

Pila

Operaciones:

•Pila (Constructor)•Push•Pop•Imprimir pila•Buscar elemento en la pila•¿pila vacía?

•Pila (Constructor)

Al crear una pila, se crea el nodo cabecera.

El nodo cabecera tiene como dato null y como siguiente null.

Pila

Cada nodo se representa por medio de dos campos:

Campo dato: contiene el valor del nodo

Campo siguiente: indica cuál es el nodo con el que se enlaza

class Nodo{

Object dato; Nodo siguiente;

Nodo(Object o) { dato=o; siguiente=null; }

}

Pila

Crear Pila

Al crear una Pila, se crea el nodo cabecera.

El nodo cabecera tiene como dato null y como siguiente null.

class Pila{

Nodo cabecera;

Pila(){ cabecera=new Nodo(null); }

}

Pila

•¿pila vacía?

Cuando la pila está vacía el campo siguiente de la cabecera es null

Pila

•Está una pila vacía?

Cuando la pila está vacía el campo siguiente de la cabecera es null

public boolean estaVacia() { if (cabecera.siguiente==null) { return true; } else{ return false; } }

Pila

Operación: push

Insertar un nuevo nodo a la pila. El elemento que se inserta, pasa a ser el tope de la pila

Pila

•Push ( La Pila está vacía)

•Se crea un nuevo nodo con el dato que se desee colocar y con siguiente null

•El campo siguiente del nodo cabecera pasa de ser null a ser el nodo que estamos insertado

23

Pila

•Push( La pila no está vacía)

•Se crea un nuevo nodo con el dato que se desee colocar y en su campo siguiente se establece el siguiente del nodo cabecera

•Al nodo cabecera se le asigna como siguiente el nodo que estamos insertando

23 51

23

Pila

Push (La pila está vacía)

•Se crea un nuevo nodo con el dato que se desee colocar y con siguiente null

•El campo siguiente del nodo cabecera pasa de ser null a ser el nodo que estamos insertado

public void push(Object o) { Nodo nuevo=new Nodo(null);

if ( estaVacia() ) { nuevo=new Nodo(o); cabecera.siguiente=nuevo; } else { nuevo=new Nodo(o); nuevo.siguiente=cabecera.siguiente; cabecera.siguiente=nuevo; } }

Pila

Push(La pila no está vacía)

•Se crea un nuevo nodo con el dato que se desee colocar y en su campo siguiente se establece el siguiente del nodo cabecera

•Al nodo cabecera se le asigna como siguiente el nodo que estamos insertando

public void push(Object o) { Nodo nuevo=new Nodo(null);

if ( estaVacia() ) { nuevo=new Nodo(o); cabecera.siguiente=nuevo; } else { nuevo=new Nodo(o); nuevo.siguiente=cabecera.siguiente; cabecera.siguiente=nuevo; } }

Pila

Operación: pop

Eliminar un elemento de la pila. El elemento que se elimina es el que esté en el tope.

Pop retorna el campo dato del elemento eliminado

Pila

•Pop

•Al nodo cabecera se le asigna como siguiente, el siguiente del primer nodo

51

23

23

Pila

Pop

•Al nodo cabecera se le asigna como siguiente, el siguiente del primer nodo

public Object pop() { if (cabecera.siguiente==null) System.out.println("LA PILA ESTA VACIA");

else{ Nodo borrar=cabecera.siguiente; cabecera.siguiente=borrar.siguiente; borrar.siguiente=null; return borrar.dato; } }

Pila

Pila

•Desarrolle la operación BuscarEnPila(Object e). La pila no tiene operaciones de consulta, se debe utilizar otra pila para almacenar los elementos que salen cuando se hace push. La pila original debe quedar con todos los elementos dados.

•Desarrolle la operación Imprimir().

•Muestre la complejidad de las operaciones BuscarEnPila(Object e) e Imprimir()

Cola

Cola

Definición

Una cola es un conjunto ordenado de elementos de un tipo base. Los elementos se insertan a la cola por la parte posterior y se sacan por la parte delantera

Cola

Operaciones:

•Cola (Constructor)•Meter•Sacar•Imprimir cola•Buscar elemento en la cola•Es una cola vacía?

Cola

A W

cola

cabecera

Se manejan dos nodos centinela, uno para cola,

por donde entran los elementos, y otro

cabecera, por donde salen

A W

cola

cabecera

A W

cola

cabecera

X

Cola

Entra el elemento x a la cola

A W

cola

cabecera

X

A

cola

cabecera

X

Cola

Sale un elemento de la cola

•Crear cola

Al crear una lista, se crean el nodo cola y el nodo cabecera.

Ambos tienen como dato null y como siguiente null.

cola

cabecera

Cola

Cada nodo se representa por medio de dos campos:

Campo dato: contiene el valor del nodo

Campo siguiente: indica cuál es el nodo con el que se enlaza

class Nodo{

Object dato; Nodo siguiente;

Nodo(Object o) { dato=o; siguiente=null; }

}

Cola

Al crear una lista, se crean el nodo cola y el nodo cabecera.

Ambos tienen como dato null y como siguiente null.

class Cola{

Nodo cabecera; Nodo cola;

Cola() { cabecera=new Nodo(null); cola=new Nodo(null); }

}

Cola

•¿cola vacía?

Cuando la cola está vacía el campo siguiente de la cabecera es null y el campo siguiente de la cola es null

cola

cabecera

Cola

•¿cola vacía?

Cuando la cola está vacía el campo siguiente de la cabecera es null. El campo siguiente de la cola también es null

public boolean estaVacia(){

if (cabecera.siguiente==null) {

return true;

}

else{

return false;

}

}

Cola

•Meter(La cola está vacía)•Se crea un nuevo nodo con el dato que se desee colocar y con siguiente null

•El campo siguiente del nodo cabecera pasa de ser null a ser el nodo que estamos insertado

•El campo siguiente del nodo cola pasa de ser null a ser el nodo que estamos insertado

cola

cabecera

cola

cabecera

W

Cola

•Se crea un nuevo nodo con el dato que se desee colocar y con siguiente null

•El campo siguiente del nodo cabecera pasa de ser null a ser el nodo que estamos insertado

•El campo siguiente del nodo cola pasa de ser null a ser el nodo que estamos insertado

void meter(Object o) { Nodo nuevo=new Nodo(null);

if ( estaVacia() ) { nuevo=new Nodo(o); cabecera.siguiente=nuevo; cola.siguiente=nuevo; }

Cola

•Meter(La cola no está vacía)

cola

cabecera

W

cola

cabecera

W X

Cola

else { nuevo=new Nodo(o); nuevo.siguiente=cola.siguiente; cola.siguiente=nuevo; } }

Cola

•Sacar

cola

cabecera

W X

cola

cabecera

X

Cola

public Object sacar() { Nodo borrar=cabecera.siguiente; if(cabecera.siguiente==cola.siguiente){ cabecera.siguiente=null; cola.siguiente=null; borrar.siguiente=null; return borrar.dato; } else{ Nodo aux=cola.siguiente; while( aux.siguiente!=borrar) aux=aux.siguiente; aux.siguiente=null; cabecera.siguiente=aux; return borrar.dato; } }

Cola

Cola

•Desarrolle la operación imprimirOrden() que muestra los valores en el orden en que se deben “atender”. La cola debe quedar con los elementos originales.

top related