PDF de programación - Unidad III - Listas

Imágen de pdf Unidad III - Listas

Unidad III - Listasgráfica de visualizaciones

Publicado el 13 de Junio del 2018
492 visualizaciones desde el 13 de Junio del 2018
154,7 KB
17 paginas
Creado hace 16a (20/09/2007)
Unidad III - Listas



Lista de Enlace Simple
Los Algoritmos de Concatenación e

Inversión

Lista Doblemente Enlazada
Algoritmo de Inserción-

Ordenada

Lista de Enlace Circular
Listas Enlazadas frente a Arrays



Java en castellano (Tutorial Estructuras de Datos y Algoritmos en Java)
http://www.programacion.com/java/tutorial/jap_data_alg/

Tutorial original en Inglés
http://www.javaworld.com/



Listas Enlazadas

Además de los arrays, otra de las estructuras de datos muy utilizadas es la lista enlazada. Esta estructura
implica cuatro conceptos: clase auto-refenciada, nodo, campo de enlace y enlace.

• Clase auto-referenciada: una clase con al menos un campo cuyo tipo de referencia es el

nombre de la clase:



class Employee {
private int empno;
private String name;
private double salary;

public Employee next;

// Other members

}

Employee es una clase auto-referenciada porque su campo next tiene el tipo Employee.

• Nodo: un objeto creado desde una clase auto-referenciada.
• Campo de enlace: un campo cuyo tipo de referencia es el nombre de la clase. En el fragmento
de código anterior, next es un campo de enlace. Por el contrario, empno, name, y salary son
campos no de enlace.

• Enlace: la referencia a un campo de enlace. En el fragmento de código anterior, la referencia

next a un nodo Employee es un enlace.

Los cuatro conceptos de arriba nos llevan a la siguiente definición: una lista enlazada es una secuencia
de nodos que se interconectan mediante sus campos de enlace. En ciencia de la computación se utiliza
una notación especial para ilustrar las listas enlazadas. En la siguiente imagen aparece una variante de
esta notación que utilizaré a lo largo de esta sección:

_____________________________________________________________


Java en castellano (Tutorial Estructuras de Datos y Algoritmos en Java)
http://www.programacion.com/java/tutorial/jap_data_alg/
Tutorial original en Inglés
http://www.javaworld.com/





La figura anterior presenta tres nodos: A, B y C. Cada nodo se divide en áreas de contenido (en naranja) y
una o más áreas de enlace (en verde). Las áreas de contenido representan todos los campos que no son
enlaces, y cada área de enlace representa un campo de enlace. Las áreas de enlace de A y C tienen
unas flechas para indicar que referencian a otro nodo del mismo tipo (o subtipo). La única área de enlace
de B incorpora una X para indicar una referencia nula. En otras palabras, B no está conectado a ningún
otro nodo.

Aunque se pueden crear muchos tipos de listas enlazadas, las tres variantes más populares son la lista
de enlace simple, la lista doblemente enlazada y la lista enlazada circular. Exploremos esas variantes,
empezando con la lista enlazada.

Lista de Enlace Simple

Una lista de enlace simple es una lista enlazada de nodos, donde cada nodo tiene un único campo de
enlace. Una variable de referencia contiene una referencia al primer nodo, cada nodo (excepto el último)
enlaza con el nodo siguiente, y el enlace del último nodo contiene null para indicar el final de la lista.
Aunque normalmente a la variable de referencia se la suele llamar top, usted puede elegir el nombre que
quiera. La siguiente figura presenta una lista de enlace simple de tres nodos, donde top referencia al
nodo A, A conecta con B y B conecta con C y C es el nodo final:

Un algoritmo común de las listas de enlace simple es la inserción de nodos. Este algoritmo está implicado
de alguna forma porque tiene mucho que ver con cuatro casos: cuando el nodo se debe insertar antes del
primer nodo; cuando el nodo se debe insertar después del último nodo; cuando el nodo se debe insertar
entre dos nodos; y cuando la lista de enlace simple no existe. Antes de estudiar cada caso consideremos
el siguiente pseudocódigo:



DECLARE CLASS Node
DECLARE STRING name
DECLARE Node next
END DECLARE

DECLARE Node top = NULL

Este pseudocódigo declara una clase auto-referenciada llamada Node con un campo no de enlace
llamado name y un campo de enlace llamado next. También declara una variable de referencia top (del
tipo Node) que contiene una referencia al primer Node de una lista de enlace simple. Como la lista todavía
no existe, el valor inicial de top es NULL. Cada uno de los siguientes cuatro casos asume las
declaraciones de Node y top:

_____________________________________________________________


Java en castellano (Tutorial Estructuras de Datos y Algoritmos en Java)
http://www.programacion.com/java/tutorial/jap_data_alg/
Tutorial original en Inglés
http://www.javaworld.com/



• La lista de enlace simple no existe::

Este es el caso más simple. Se crea un Node, se asigna su referencia a top, se inicializa su
campo no de enlace, y se asigna NULL a su campo de enlace. El siguiente pseudocódigo realiza
estas tareas:



top = NEW Node

top.name = "A"
top.next = NULL

En la siguiente imagen se puede ver la lista de enlace simple que emerge del pseudocódigo
anterior:

• El nodo debe insertarse antes del primer nodo:.

Se crea un Node, se inicializa su campo no de enlace, se asigna la referencia de top al campo
de enlace next, y se asigna la referencia del Node recién creado a top. El siguiente
pseudocódigo (que asume que se ha ejecutado el pseudocódigo anterior) realiza estas tareas:



DECLARE Node temp

temp = NEW Node
temp.name = "B"
temp.next = top
top = temp

El resultado del listado anterior aparece en la siguiente imagen:

• El nodo debe insertarse detrás del último nodo:

Se crea un Node, se inicializa su campo no de enlace, se asigna NULL al campo de enlace, se
atraviesa la lista de enlace simple hasta el último Node, y se asigna la referencia del Node recién
creado al campo next del último nodo. El siguiente pseudocódigo realiza estas tareas:



temp = NEW Node
temp.name = "C"
temp.next = NULL

DECLARE Node temp2

temp2 = top

// We assume top (and temp2) are not NULL
// because of the previous pseudocode

WHILE temp2.next IS NOT NULL
temp2 = temp2.next
END WHILE



_____________________________________________________________


Java en castellano (Tutorial Estructuras de Datos y Algoritmos en Java)
http://www.programacion.com/java/tutorial/jap_data_alg/
Tutorial original en Inglés
http://www.javaworld.com/







// temp2 now references the last node

temp2.next = temp

La siguiente imagen revela la lista después de la inserción del nodo C después del nodo A.

• El nodo se debe insertar entre dos nodos:

Este es el caso más complejo. Se crea un Node, se inicializa su campo no de enlace, se
atraviesa la lista hasta encontrar el Node que aparece antes del nuevo Node, se asigna el campo
de enlace del Node anterior al campo de enlace del Node recién creado, y se asigna la referencia
del Node recién creado al campo del enlace del Node anterior. El siguiente pseudocódigo realiza
estas tareas:



temp = NEW Node
temp.name = "D"

temp2 = top

// We assume that the newly created Node is inserted after Node
// A and that Node A exists. In the real world, there is no
// guarantee that any Node exists, so we would need to check
// for temp2 containing NULL in both the WHILE loop's header
// and after the WHILE loop completes.

WHILE temp2.name IS NOT "A"
temp2 = temp2.next
END WHILE

// temp2 now references Node A.

temp.next = temp2.next
temp2.next = temp

La siguiente imagen muestra la inserción del nodo D entre los nodos A y C.

El siguiente listado presenta el equivalente Java de los ejemplos de pseudocódigo de inserción anteriores:



// SLLInsDemo.java

class SLLInsDemo {
static class Node {
String name;
Node next;
}

public static void main (String [] args) {
Node top = null;

// 1. The singly linked list does not exist

_____________________________________________________________


Java en castellano (Tutorial Estructuras de Datos y Algoritmos en Java)
http://www.programacion.com/java/tutorial/jap_data_alg/
Tutorial original en Inglés
http://www.javaworld.com/




top = new Node ();
top.name = "A";
top.next = null;

dump ("Case 1", top);

// 2. The singly linked list exists, and the node must be inserted
// before the first node

Node temp;

temp = new Node ();
temp.name = "B";
temp.next = top;
top = temp;

dump ("Case 2", top);

// 3. The singly linked list exists, and the node must be inserted
// after the last node

temp = new Node ();
temp.name = "C";
temp.next = null;

Node temp2;

temp2 = top;

while (temp2.next != null)
temp2 = temp2.next;

temp2.next = temp;

dump ("Case 3", top);

// 4. The singly linked list exists, and the node must be inserted
// between two nodes

temp = new Node ();
temp.name = "D";

temp2 = top;

while (temp2.name.equals ("A") == false)
temp2 = t
  • Links de descarga
http://lwp-l.com/pdf11820

Comentarios de: Unidad III - Listas (0)


No hay comentarios
 

Comentar...

Nombre
Correo (no se visualiza en la web)
Valoración
Comentarios...
CerrarCerrar
CerrarCerrar
Cerrar

Tienes que ser un usuario registrado para poder insertar imágenes, archivos y/o videos.

Puedes registrarte o validarte desde aquí.

Codigo
Negrita
Subrayado
Tachado
Cursiva
Insertar enlace
Imagen externa
Emoticon
Tabular
Centrar
Titulo
Linea
Disminuir
Aumentar
Vista preliminar
sonreir
dientes
lengua
guiño
enfadado
confundido
llorar
avergonzado
sorprendido
triste
sol
estrella
jarra
camara
taza de cafe
email
beso
bombilla
amor
mal
bien
Es necesario revisar y aceptar las políticas de privacidad