Está en la página 1de 8

Universidad Nacional de San Cristbal de Huamanga

IS241-Estructura de datos

Semana 7
PRIMERA UNIDAD 2 Competencias Reconocimiento de las diferencias entre estructuras estticas y dinmicas Aplicar tipos de datos de acuerdo a la complejidad. Manipular operaciones en las estructuras internas

Contenido
Estructuras dinmicas lineales: listas. Fundamentacin. Clasificacin de listas enlazadas. Listas simples y operaciones. Insercin de un elemento en una lista. Bsqueda en listas enlazadas. Eliminacin de un nodo en una lista. Lista ordenada.

Mapa Conceptual

Listas enlazadas Lineales Operaciones

Pilas ESTRUCTURAS DINAMICAS LINE

Colas

No lineales

Escuela de Formacin de Ingeniera de Sistemas Docente Ing. Elinar Carrillo Riveros

ao 2013

Universidad Nacional de San Cristbal de Huamanga

IS241-Estructura de datos

ESTRUCTURA DE DATOS DINAMICAS LINEALES 1. LISTAS ENLAZADAS


Es una coleccin de elementos enlazados dispuestos uno detrs de otros en la que cada elemento se conecta al siguiente, la idea es tener un conjunto de elementos llamados nodos, en las cuales contienen la direccin de un nodo y el elemento almacenado. As como se muestra en la siguiente figura

2. CLASIFICACION DE LAS LISTAS ENLAZADAS a. Listas simplemente enlazadas


primero

b. Listas doblemente enlazadas


primero

c. Listas circular simplemente enlazadas


primero

Escuela de Formacin de Ingeniera de Sistemas Docente Ing. Elinar Carrillo Riveros

ao 2013

Universidad Nacional de San Cristbal de Huamanga

IS241-Estructura de datos

d. Listas circularmente enlazadas


primero

3. ESPECIFICACIN FORMAL DE UN TAD DE UNA LISTA


Matemticamente una lista es una secuencia de ceros o ms elementos de un determinado tipo de elemento: (a1,a2,a3,a4..an) donde n= 0 Si n=0 lista es vaca Para formalizar el tipo de dato abstracto de una lista a partir de la notacin matemtica, se define un conjunto de operaciones bsicas con objetos de tipo lista las operaciones son: L Lista x Lista p puntero

listaVacia (L) esvacia(L) insertar(L,x,p) localizar(L,x) suprimer(L,x) anterior(L,p) primero(L) anula(L) insertarPrimero(L,x) insertarFinal(L,x) Una operacin de toda estructura de datos es recorrer, consiste en visitar cada nodo de la lista.

4. OPERACIONES EN LISTAS ENLAZADAS


La implementacin del TAD de una lista requiere, primer lugar declarar la clase nodo, en las que se combinaran sus dos partes: el dato y un enlace. A dems la clase lista con sus operaciones y el atributo con la cabeza de la lista. Las operaciones tendrn las siguientes funciones: Inicializacin o creacin Insertar un elemento en la lista Eliminar elemento de una lista Buscar elemento de una lista Recorrer la lista enlazada Comprobar si la lista esta vaca

Escuela de Formacin de Ingeniera de Sistemas Docente Ing. Elinar Carrillo Riveros

ao 2013

Universidad Nacional de San Cristbal de Huamanga

IS241-Estructura de datos

4.1 Declaracin de un nodo


Una lista enlazada se compone de nodos enlazadas por consiguiente de la declaracin de la misma seria de la siguiente manera: primero

public class Nodo <Tipo> { Tipo dato; Nodo siguiente; public Nodo(Tipo dato) { this.dato=dato; siguiente=null; } }

4.2 Declaracin de un nodoDoble


Una lista doble se compone de nodos enlazados por los nodos anteriores y posteriores, por consiguiente la declaracin sera de la siguiente manera:

primero

public class NodoD <Tipo> { Tipo dato; NodoD anterior,siguiente; public NodoD(Tipo dato) { this.dato=dato; anterior=siguiente=null; } }

4.3 Declaracin de un nodoCircular


Una lista circular se compone de nodos enlazados en donde el ltimo nodo esta enlazado con el primer nodo de la listapor consiguiente la declaracin sera de la siguiente manera:

primero

Escuela de Formacin de Ingeniera de Sistemas Docente Ing. Elinar Carrillo Riveros

ao 2013

Universidad Nacional de San Cristbal de Huamanga

IS241-Estructura de datos

public class NodoC <Tipo> { Tipo dato; NodoC siguiente; public NodoC(Tipo dato) { this.dato=dato; siguiente=this; } }

4.4 Declaracin de un nodoCirsularDoble


Una lista circular doble se compone de nodos enlazados en donde el ltimo nodo esta enlazado con el primer nodo y el primer nodo tiene el enlace del ltimo nodo de la lista de la lista, por consiguiente la declaracin sera de la siguiente manera primero

public class NodoDC <Tipo> { Tipo dato; NodoDC anterior siguiente; public NodoC(Tipo dato) { this.dato=dato; anterior=siguiente=this; } }

5 Construccin de una Lista Simple


La creacin de una lista implica, relacionar la implementacin de un nodo, como se ya ha definido en el concepto anterior. La clase Lista define el atributo primero, referencia a un Nodo, para acceder a los elementos de la lista. Para construir la lista se inicializara definiendo una lista vaca. package Lista; public class Lista <Tipo> { Nodo primero; public Lista() { primero=null; } public Lista insertar(Tipo x){ Nodo nuevo=new Nodo(x); if (primero!=null ) nuevo.setSiguiente(primero); primero=nuevo;

Escuela de Formacin de Ingeniera de Sistemas Docente Ing. Elinar Carrillo Riveros

ao 2013

Universidad Nacional de San Cristbal de Huamanga

IS241-Estructura de datos

return this; } public String toStream(){ String salida=""; Nodo actual; for(actual=primero; actual!=null; actual=actual.getSiguiente() ) salida=salida+actual.getDato(); return salida; } public Lista Eliminar(){ Nodo actual=primero; if (primero!=null ) primero=actual.getSiguiente(); return this; } } package Lista; public class DemoLista { public static void main(String[] args) { Lista lc=new Lista(); lc.insertar( new Integer(4)); lc.insertar( new Integer(5)); lc.insertar( new Integer(6)); lc.insertar( new Integer(10)); System.out.println(lc.toStream()); lc.Eliminar(); System.out.println(lc.toStream()); } } }

6 Construccin de una Lista Doble


El sentido de recorrido de una lista doble es por adelante y atrs, por consiguiente tenemos a un nodo con tres campos, dos de los cuales almacena referencias del anterior y posterior al nuevo nodo creado. La clase Lista doble se define con un atributo primero y dos referencias a un Nodo, para acceder a los elementos de la lista. Para construir la lista se inicializara definiendo una lista vaca. public class ListaD <Tipo>{ NodoD primero; public ListaD() { primero=null; } public ListaD insertar(Tipo x){ NodoD nuevo=new NodoD(x); if (primero!=null ){ primero.setAnterior(nuevo); nuevo.setSiguiente(primero); }

Escuela de Formacin de Ingeniera de Sistemas Docente Ing. Elinar Carrillo Riveros

ao 2013

Universidad Nacional de San Cristbal de Huamanga

IS241-Estructura de datos

primero=nuevo; return this; } public ListaD Eliminar(){ NodoD actual=primero; if (primero!=null ){ primero=actual.getSiguiente(); primero.setAnterior(null); actual.setSiguiente(null); } return this; }

7 Construccin de una Lista Circular


La naturaleza de un lista circular es que no tiene un principio y fin, por consiguiente debe existir dos referencias que indiquen por donde se ingresa los elementos, por consiguiente la estructura de una lista circular serpia con la siguiente propuesta: public class ListaC<Tipo> { NodoC<Tipo>primero; public ListaC() { primero=null; } public ListaC insertar(Tipo x){ NodoC nuevo=new NodoC(x); NodoC actual=primero; if (primero!=null){ do actual=actual.getSiguiente(); while(actual.getSiguiente()!=primero); nuevo.setSiguiente(primero); actual.setSiguiente(nuevo); } primero=nuevo; return this; } public ListaC Eliminar(){ NodoC fin=primero; NodoC actual=primero; if (primero!=null){ do fin=fin.getSiguiente(); while(fin.getSiguiente()!=primero); if(primero!=fin){
Escuela de Formacin de Ingeniera de Sistemas Docente Ing. Elinar Carrillo Riveros

ao 2013

Universidad Nacional de San Cristbal de Huamanga

IS241-Estructura de datos

fin.setSiguiente(actual.getSiguiente()); primero=actual.getSiguiente(); actual.setSiguiente(actual); } } return this; } public String toStream(){ String salida=""; NodoC actual=primero; while(actual!=primero) { salida=salida+actual.getDato(); actual=actual.getSiguiente(); } return salida; } }

8 Construccin de una Lista Doble Circular A partir de los conceptos anteriores construya la lista doble circular

Escuela de Formacin de Ingeniera de Sistemas Docente Ing. Elinar Carrillo Riveros

ao 2013