You are on page 1of 8

Listas Enlazadas

En Ciencias de la Computación, una lista enlazada es una de las estructuras de datos


fundamentales, y puede ser usada para implementar otras estructuras de datos. Consiste en
una secuencia de nodos, en los que se guardan campos de datos arbitrarios y una o dos
referencias, enlaces o punteros (punteros) al nodo anterior o posterior. El principal
beneficio de las listas enlazadas respecto a los vectores convencionales es que el orden de
los elementos enlazados puede ser diferente al orden de almacenamiento en la memoria o el
disco, permitiendo que el orden de recorrido de la lista sea diferente al de almacenamiento.

Una lista enlazada es un tipo de dato auto referenciado porque contienen un puntero o
enlace (en inglés link, del mismo significado) a otro dato del mismo tipo. Las listas
enlazadas permiten inserciones y eliminación de nodos en cualquier punto de la lista en
tiempo constante (suponiendo que dicho punto está previamente identificado o localizado),
pero no permiten un acceso aleatorio. Existen diferentes tipos de listas enlazadas: Lista
Enlazadas Simples, Listas Doblemente Enlazadas, Listas Enlazadas Circulares y Listas
Enlazadas Doblemente Circulares.

Las listas enlazadas pueden ser implementadas en muchos lenguajes. Lenguajes tales como
Lisp y Scheme tiene estructuras de datos ya construidas, junto con operaciones para acceder
a las listas enlazadas. Lenguajes imperativos u orientados a objetos tales como C o C++ y
Java, respectivamente, disponen de referencias para crear listas enlazadas.

Las listas enlazadas fueron desarrolladas en 1955-56 por Cliff Shaw y Herbert Simón en
RAND Corporation, como la principal estructura de datos para su Lenguaje de
Procesamiento de la Información (IPL). IPL fue usado por los autores para desarrollar
varios programas relacionados con la inteligencia artificial, incluida la Máquina de la
Teoría General, el Solucionador de Problemas Generales, y un programa informático de
ajedrez. Se publicó en IRE Transactions on Information Theory en 1956, y en distintas
conferencias entre 1957-1959, incluida Proceedings of the Western Joint Computer en 1957
y 1958, y en Information Processing (Procendents de la primera conferencia internacional
del procesamiento de la información de la Unesco) en 1959.
El diagrama clásico actual, que consiste en bloques que representan nodos de la lista con
flechas apuntando a los sucesivos nodos de la lista, apareció en Programming the Logic
Theory Machine, de Newell y Shaw. Newell y Simon fueron reconocidos por el ACM
Turing Award en 1975 por “hacer contribuciones básicas a la inteligencia artificial, a la
psicología del conocimiento humano y al procesamiento de las listas”.

Para que esta estructura sea un TDA lista enlazada, debe tener unos operadores asociados
que permitan la manipulación de los datos que contiene. Los operadores básicos de una
lista enlazada son:

 Insertar: inserta un nodo con dato x en la lista, pudiendo realizarse esta


inserción al principio o final de la lista o bien en orden.
 Eliminar: elimina un nodo de la lista, puede ser según la posición o por el
dato.
 Buscar: busca un elemento en la lista.
 Localizar: obtiene la posición del nodo en la lista.
 Vaciar: borra todos los elementos de la lista
Tipos de Listas Enlazadas

 Listas enlazadas lineales

Listas simples enlazadas

La lista enlazada básica es la lista enlazada simple la cual tiene un enlace por nodo. Este
enlace apunta al siguiente nodo en la lista, o al valor NULL o a la lista vacía, si es el último
nodo.

Lista Doblemente Enlazada

Un tipo de lista enlazada más sofisticado es la lista doblemente enlazada o lista enlazadas
de dos vías. Cada nodo tiene dos enlaces: uno apunta al nodo anterior, o apunta al valor
NULL si es el primer nodo; y otro que apunta al nodo siguiente, o apunta al valor NULL si
es el último nodo.

En algún lenguaje de muy bajo nivel, XOR-Licking ofrece una vía para implementar listas
doblemente enlazadas, usando una sola palabra para ambos enlaces, aunque el uso de esta
técnica no se suele utilizar.
 Listas enlazadas circulares

En una lista enlazada circular, el primer y el último nodo están unidos juntos. Esto se puede
hacer tanto para listas enlazadas simples como para las doblemente enlazadas. Para recorrer
una lista enlazada circular podemos empezar por cualquier nodo y seguir la lista en
cualquier dirección hasta que se regrese hasta el nodo original. Desde otro punto de vista,
las listas enlazadas circulares pueden ser vistas como listas sin comienzo ni fin. Este tipo de
listas es el más usado para dirigir buffers para “ingerir” datos, y para visitar todos los nodos
de una lista a partir de uno dado.

Listas enlazadas circulares simples

Cada nodo tiene un enlace, similar al de las listas enlazadas simples, excepto que el
siguiente nodo del último apunta al primero. Como en una lista enlazada simple, los nuevos
nodos pueden ser solo eficientemente insertados después de uno que ya tengamos
referenciado. Por esta razón, es usual quedarse con una referencia solamente al último
elemento en una lista enlazada circular simple, esto nos permite rápidas inserciones al
principio, y también permite accesos al primer nodo desde el puntero del último nodo. 1

Lista Enlazada Doblemente Circular

En una lista enlazada doblemente circular, cada nodo tiene dos enlaces, similares a los de la
lista doblemente enlazada, excepto que el enlace anterior del primer nodo apunta al último
y el enlace siguiente del último nodo, apunta al primero. Como en una lista doblemente
enlazada, las inserciones y eliminaciones pueden ser hechas desde cualquier punto con
acceso a algún nodo cercano. Aunque estructuralmente una lista circular doblemente
enlazada no tiene ni principio ni fin, un puntero de acceso externo puede establecer el nodo
apuntado que está en la cabeza o al nodo cola, y así mantener el orden tan bien como en una
lista doblemente enlazada.

Nodos Centinelas

A veces las listas enlazadas tienen un nodo centinela (también llamado falso nodo o nodo
ficticio) al principio o al final de la lista, el cual no es usado para guardar datos. Su
propósito es simplificar o agilizar algunas operaciones, asegurando que cualquier nodo
tiene otro anterior o posterior, y que toda la lista (incluso alguna que no contenga datos)
siempre tenga un “primer y último” nodo.
Programa y código

Lo que hace este programa, es que pide el nombre del alumno y tres calificaciones para luego
calcular su promedio. Se puede agregar cualquier cantidad de elementos a la lista.

*/import java.util.*;

public class EjercicioLista {

String nom;

int calif1;

int calif2;

int calif3;

static double prom;

public static void main( String args[] ){

Scanner leer = new Scanner(System.in);

EjercicioLista nodo = new EjercicioLista();

int op;

ArrayList lista = new ArrayList();

do{

System.out.println( "Ingrese el nombre del alumno:" );

nodo.nom = leer.next();

System.out.println( "Ingrese la primera calificación:" );

nodo.calif1 = leer.nextInt();

System.out.println( "Ingrese la segunda calificación:" );

nodo.calif2 = leer.nextInt();

System.out.println( "Ingrese la tercera calificación:" );

nodo.calif3 = leer.nextInt();

lista.add("Nombre del alumno:\n"+nodo.nom);

lista.add("Calificación 1:\n"+nodo.calif1);
lista.add("Calificación 2:\n"+nodo.calif2);

lista.add("Calificación 3\n"+nodo.calif3);

promedio(nodo.calif1, nodo.calif2, nodo.calif3);

lista.add("Su promedio es:\n"+prom);

System.out.println( "¿Desea ingresar otro alumno?" );

System.out.println( "1.-Si\t 2.-No" );

op = leer.nextInt();

while(op != 2);

List lista2 = new ArrayList(lista);

Iterator it = lista2.iterator();

while (it.hasNext()){

System.out.println(it.next()+"");

private static double promedio(int calif1, int calif2, int calif3){

int suma = calif1 + calif2 + calif3;

prom = suma/3;

return prom;

}
Un arreglo tipo lista se define como una variable que permite almacenar un conjunto de
datos del mismo tipo organizados en una sola columna y uno o más renglones.

También reciben el nombre de vectores en álgebra, o arreglo unidimensional en


programación.

Los procesos normales con una lista o con sus elementos, incluyen declarar toda la lista,
capturar sus elementos, desplegarlos, realizar operaciones con ellos y mostrar un resultado,
etc.

Web grafía

 http://www.calcifer.org

 http://es.wikipedia.org

 http://linkcode.wordpress.com

QRWD

ORTXHHVWDHQFRORUDPDULOOROHWRFRH[SRQHUDFULVWRIHUORTXHHVWDHQYHUGHDJXVWDYR

HOHMHUFLFLRORYR\DH[SOLFDU\R\YR\DGHFLUODFRQFOXVLyQ
Trabajo de algoritmo y estructura de datos

Nombre:

 Gustavo Enrique Montiel Tercero


 Cristhofer William Herrera Urbina
 Barney Enrique García Hernández

Tema:

 Listas Enlazadas
Profesora:

 Meyling Palma

Fecha:

 21-03-12

You might also like