Beruflich Dokumente
Kultur Dokumente
Listas Enlazadas
Bibliografa: Estructura de Datos. Algoritmos, abstraccin y
objetos. Aguilar y Martnez. McGraw Hill 1998. Captulos 5 y 6
CAB
Info Info Info Info Null
Ptro Ptro Ptro Ptro
01/05/17 Lenguaje de Programacin 1 2
Clasificacin de Listas
Enlazadas
Simplemente Doblement Circular Circular
Enlazada e Enlazada Simpleme Doblement
nte e Enlazada
Enlazada
# Enlaces 1 al sucesor 1 al sucesor 1 al sucesor 1 al sucesor
del Nodo 1 al 1 al
predecesor predecesor
Recorrido Forward Forward y Forward Forward y
Eficiente Backward Circular Backward
Circular
Ultimo Null Apunta al Primero
Nodo
Se pueden implementar con Arrays o Punteros.
Todas tiene Cabeza y Cola.
Una Lista Vaca tiene su Cabeza=Cola=Null
Pueden almacenar cualquier tipo de informacin
Las inserciones se pueden realizar en cualquier punto de la lista
Los elementos se insertan ordenados
01/05/17 Lenguaje de Programacin 1 3
Operaciones Tpicas en
Listas
Inicializacin o creacin
Insertar elementos en la lista
Al principio, al final
Antes o despus de la posicin i
Antes o despus del elemento con la informacin x.
Eliminar elementos en la lista
La cabeza, el final
El elemento de la posicin i
El elemento con la informacin x.
Buscar elementos en la lista
El elemento de la posicin i
El elemento con la informacin x.
Modificar
El elemento de la posicin i
El elemento con la informacin x.
Recorrer los Nodos de la Lista
Comprobar si la lista esta vaca.
Cantidad de elementos de una lista.
Intercambiar dos elementos de la lista
01/05/17 Lenguaje de Programacin 1 4
Especificacin TAD Lista
Simplemente Encadenada (SE)
Se hace una Especificacin bsica de ejemplo. Aunque est siempre
ligada al asunto que se quiera resolver.
TAD Lista
(a1, a2, ai, .., an) siendo n>=0; Si n=0 entonces Lista Vacia
Sintaxis
L Lista, x Lista, p puntero
ListaVacia(L): Inicializa la Lista L vaca.
EsVacia(L): Determina si L es vaca
Insertar(L, x, p): Inserta en la Lista L un nodo con el campo dato
x, delante del nodo de direccin p
Localizar(L, x): Localiza en L, el nodo con campo de informacin
x.
Suprimir(L, x): Elimina en L, el nodo con campo de informacin x.
Anterior(L,x): Devuelve el Nodo anterior al nodo con campo de
informacin x.
.
01/05/17 Lenguaje de Programacin 1 5
Ejemplo Simple de Listas SE
Cargar una lista simplemente enlazada con
#include <stdio.h> nmeros aleatorios hasta encontrar el
#include <stdlib.h> nmero 0.
Luego se muestran por pantalla solo
aquellos que sean nmeros pares.
#define MX 99
CAB 3 6 10 Null
CAB 3 6 10 Null
NUEVO
DESPUES
CAB 1 10
6 Null
01/05/17 Ptro Ptro Ptro
Lenguaje de Programacin 1 Ptro 11
Insercin de un Nodo entre 2
existentes
void insertan(Nodo** cabeza, tem testigo, Item entrada)
{ Nodo *nuevo, *despus;
nuevo = crearNodo(entrada);
if (*cabeza == NULL) *cabeza = nuevo;
else
{ int esta=0;
despus=*cabeza;
while ((despues->siguiente != NULL) && !esta)
{ if (despus>dato !=testigo) despues=despues
>siguiente;
else esta=1;
}
if (esta) /* Se enlasa el nuevo nodo */
{ nuevo -> siguiente = despues -> siguiente;
despues -> siguiente = nuevo;
Nuevo
}
} Despues
Ptro 4
}
CAB 1 3 6 10 Null
Ptro Ptro Ptro Ptro
Lenguaje de Programacin 1 01/05/17 12
Bsqueda Por Contenido
Parmetros:
cabeza: cabeza de lista
destino: valor de referencia que se est buscando.
Localiza un elemento por referencia del contenido.
Si lo encuentra devuelve su ptro. Sino devuelve NULL
return NULL;
}
01/05/17 Lenguaje de Programacin 1 13
Bsqueda por Posicin
Parmetros:
cabeza: cabeza de lista
posicin: posicin de referencia que se esta buscando.
Localiza un elemento por referencia a su posicin dentro de la
lista.
Si lo encuentra devuelve su ptro. Sino devuelve NULL
INS
DEL
Null
Borrado Null
void main()
{ Nodo *cabeza,*ptr;
int n;
cabeza = NULL; /* lista vaca */
while (n!=0)
{ scanf (%i, &n);
inserPrim(&cabeza,n);
}
}
01/05/17 Lenguaje de Programacin 1 17
Creacin de una Lista DE
Nodo* crearNodo(Item x)
{ Nodo *a ;
a = (Nodo*)malloc(sizeof(Nodo));
a -> dato = x;
nuevo
a -> adelante = a -> atras = NULL; Null
return a;
}
01/05/17 nuevo 1
Lenguaje de Programacin 19
Eliminar entre Elementos DE
void eliminar (Nodo** cabeza, tem entrada)
{ Nodo* actual = *cabeza;
int encontrado=0;
while ((actual!=NULL) && (!encontrado) /*Bsqueda del Nodo*/
{ encontrado=(actual>dato==entrada);
if (!encontrado) actual=actual>adelante;
}
if (actual !=NULL) /*enlazar el anterior con el siguiente. */
{ if(actual==*cabeza) /*1er elemento de la lista */
{*cabeza = actual -> adelante;
if (actual -> adelante != NULL)
(actual -> adelante) -> atras = NULL;
/*El nuevo 1er elemento de la lista debe tener el ptr atrs igual a
NULL*/
}
else if (actual -> adelante != NULL) /*Nodo Intermedio*/
{(actual -> atrs) -> adelante = actual -> adelante;
(actual -> adelante) -> atras = actual -> atras;
}
else (actual -> atrs) -> adelante = NULL; /*Es el ultimo Nodo*/
free(actual);
} ACT
} Null
Null
CAB
Info Info Info
Ptro Ptro Ptro Ptro
01/05/17 Lenguaje de Programacin 1 21
Trabajos Prcticos
COMO MINIMO, REALIZAR:
De la Bibliografa
Del Capitulo 5:
Problemas: 5.1al 5.10.
Del Capitulo 6:
Problemas: 6.1al 5.9.