Вы находитесь на странице: 1из 10

Universidad Nacional de San Cristóbal de Huamanga IS241-Estructura de datos

Semana 6-7
PRIMERA UNIDAD 2

Competencias

 Reconocimiento de las diferencias entre estructuras estáticas y dinámicas


 Aplicar tipos de datos de acuerdo a la complejidad.
 Manipular operaciones en las estructuras internas

Contenido

Estructuras dinámicas lineales: listas. Fundamentación. Clasificación de listas enlazadas. Listas simples y operaciones.
Inserción de un elemento en una lista. Búsqueda en listas enlazadas. Eliminación de un nodo en una lista. Lista ordenada.

Listas enlazadas
Mapa Conceptual
Lineales

Operaciones

Pilas

ESTRUCTURAS
DINAMICAS LINE
Colas

No lineales

Escuela de Formación de Ingeniería de Sistemas


Docente Ing. Elinar Carrillo Riveros año 2017
Universidad Nacional de San Cristóbal de Huamanga IS241-Estructura de datos

ESTRUCTURA DE DATOS DINAMICAS LINEALES

1. LISTAS ENLAZADAS
Es una colección de elementos enlazados dispuestos uno detrás 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 dirección 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 Formación de Ingeniería de Sistemas


Docente Ing. Elinar Carrillo Riveros año 2017
Universidad Nacional de San Cristóbal de Huamanga IS241-Estructura de datos

d. Listas circularmente enlazadas


primero

3. ESPECIFICACIÓN FORMAL DE UN TAD (tipo de dato abstracto) DE UNA


LISTA
Matemáticamente una lista es una secuencia de elementos de un determinado tipo de elemento:
(a1,a2,a3,a4…..an) donde n˃= 0
Si n=0 lista es vacía
Para formalizar el tipo de dato abstracto de una lista a partir de la notación matemática, se define un
conjunto de operaciones básicas con objetos de tipo lista las operaciones son:

L Lista x Lista p referencia

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)

La operación de una estructura de datos es recorrer, consiste en visitar cada nodo de la lista.

4. OPERACIONES EN LISTAS ENLAZADAS

La implementación 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 (referencia). A demás la clase lista con sus
operaciones y el atributo con la cabeza de la lista. Las operaciones tendrán las siguientes
operaciones:
Inicialización o creación
Insertar un elemento en la lista
Remover elemento de una lista
Buscar elemento de una lista
Recorrer la lista
Comprobar lista vacía

Escuela de Formación de Ingeniería de Sistemas


Docente Ing. Elinar Carrillo Riveros año 2017
Universidad Nacional de San Cristóbal de Huamanga IS241-Estructura de datos

4.1 Declaración de un nodo

Una lista enlazada se compone de nodos enlazadas por consiguiente de la declaración 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 Declaración de un nodoDoble

Una lista doble se compone de nodos enlazados por los nodos anteriores y posteriores, por
consiguiente la declaración sería 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 Declaración 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 declaración sería de la siguiente manera:

primero

Escuela de Formación de Ingeniería de Sistemas


Docente Ing. Elinar Carrillo Riveros año 2017
Universidad Nacional de San Cristóbal 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 Declaración 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 declaración sería de la siguiente manera

primero

class NodoDC <Tipo> {


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

5 Construcción de una Lista Simple


La creación de una lista implica, relacionar la implementación 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 vacía, con la referencia primero debe
de apuntar a nulo.

Inicializando Lista

primero

primero=null;

Escuela de Formación de Ingeniería de Sistemas


Docente Ing. Elinar Carrillo Riveros año 2017
Universidad Nacional de San Cristóbal de Huamanga IS241-Estructura de datos

Insertando un elemento a lista vacía


Se crea el nodo

nuevo

Nodo nuevo =new Nodo ();

Luego, como la lista esta vacía se hace que la referencia primero apunte al nuevo nodo creado

primero

nuevo

primero=nuevo

En consecuencia la lista quedaría

primero

Se desea seguir ingresando un elemento más, según el algoritmo se crea el nuevo nodo

nuevo

Nodo nuevo =new Nodo ();

Escuela de Formación de Ingeniería de Sistemas


Docente Ing. Elinar Carrillo Riveros año 2017
Universidad Nacional de San Cristóbal de Huamanga IS241-Estructura de datos

La lista tiene la siguiente figura

primero

nuevo

nuevo.siguiente=primero
primero=nuevo

a continuación la lista quedara así :

primero

También se puede insertar un elemento en cualquier posición de la lista, para este caso igual se
crea un nodo, se inicializa un nodo aux

aux

primero

nuevo

nuevo.siguente=aux
primero.siguiente=nuevo

Escuela de Formación de Ingeniería de Sistemas


Docente Ing. Elinar Carrillo Riveros año 2017
Universidad Nacional de San Cristóbal de Huamanga IS241-Estructura de datos

Otro caso puede ser que se inserte un elemento al final de la lista

aux

primero

nuevo

aux.siguente=nuevo

Otra de las operaciones dentro de una lista es buscar un elemento, para esto se utiliza una
referencia que se inicializa en primero y se busca el elemento dentro de la lista, lo que devuelve la
operación es la referencia o un valor lógico, dependiendo del requerimiento.

aux

primero

aux=primero
while(aux.dato!=datoB) && (aux.siguiente!=null)
axu=aux.siguiente

Remover un nodo dentro de una lista sería equivalente a decir eliminar un elemento e de la lista, en
consecuencia se puede implementar de varias formas, remover el primer elemento de la lista,
remover el último de la lista, remover elemento buscado, remover un elemento antes de una posición
o después de una posición, estas operaciones se implementan de acuerdo a los requerimientos. A
continuación tenemos remover por el primero.

aux

primero

Escuela de Formación de Ingeniería de Sistemas


Docente Ing. Elinar Carrillo Riveros año 2017
Universidad Nacional de San Cristóbal de Huamanga IS241-Estructura de datos

primero = aux.siguiente

Remover el elemento que esta al final de la lista aux

primero

aux.siguiente=null

Remover un elemento buscado, imaginemos que el elemento buscado esta apuntado por la
referencia aux2, se debe de trabajar con aux1 para no perder las referencias, recomienda que la
referencia primero siempre debe de apuntar al primer elemento de la lista.

aux1 Aux2

primero

aux1=aux2.siguiente
aux2=null

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;
return this;
}
public String toStream(){
String salida="";
Nodo actual;
for(actual=primero; actual!=null; actual=actual.getSiguiente() )

Escuela de Formación de Ingeniería de Sistemas


Docente Ing. Elinar Carrillo Riveros año 2017
Universidad Nacional de San Cristóbal de Huamanga IS241-Estructura de datos

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());
}
}
}

Escuela de Formación de Ingeniería de Sistemas


Docente Ing. Elinar Carrillo Riveros año 2017

Вам также может понравиться