Guía 4

Anuncio
Programación III. Guía 4.
1
1
Facultad:
Ingeniería
Escuela:
Computación
Asignatura: Programación III
Tema: “LISTAS ENLAZADAS”.
Objetivos Específicos
•
Aprender a formar estructuras de datos enlazadas por medio de clases.
•
Implementar una lista utilizando Visual C#. NET.
Introducción Teórica
LISTA
Una lista está formada por una serie de elementos llamados nodos los cuales son objetos que
contiene como variable miembro un puntero asignado y variables de cualquier tipo para manejar
datos.
El puntero sirve para enlazar cada nodo con el resto de nodos que conforman la lista.
De esto podemos deducir que una lista enlazada (lista) es una secuencia de nodos en el que
cada nodo esta enlazado o conectado con el siguiente (por medio del puntero mencionado
anteriormente). El primer nodo de la lista se denomina cabeza de la lista y el último nodo cola de
la lista. Este último nodo suele tener su puntero igualado a NULL Para indicar que es el fin de la
lista.
La lista enlazada es una estructura de datos dinámica cuyos nodos suelen ser normalmente
registros y que tienen un tamaño fijo. Ahora bien suelen llamarse estructuras dinámicas porque
se crean y destruyen según se vayan necesitando. De este modo se solicita o libera memoria en
tiempo de ejecución del programa.
Gráficamente una Lista puede representarse de la siguiente manera:
Programación III. Guía 4.
2
2
Las operaciones típicas de la lista incluyen: Crear la lista, verificar si está vacía, insertar
elementos, eliminar elementos, mostrar elementos.
Dependiendo
cuatro tipos:




de cómo se enlacen o comuniquen los nodos de las listas, estas se agrupan en
Listas simplemente enlazadas
Listas doblemente enlazadas
Listas simplemente circulares
Listas doblemente circulares
Las listas simplemente enlazadas, permiten recorrer la lista en un solo sentido y desde la cabeza
hasta la cola.
Las listas doblemente enlazadas, permiten el recorrido en dos direcciones, de la cabeza a la cola
y de la cola hacia la cabeza.
Las listas simplemente circulares, permiten el recorrido en una dirección pero al llegar al último
nodo (cola) este se encuentra comunicado o enlazado a la cabeza, haciendo un anillo o circulo
si se representa gráficamente.
Las listas doblemente circulares, permiten el recorrido en ambas direcciones y la cabeza y cola
se encuentran conectadas en ambas direcciones.
Las listas son la estructura (TAD) más básica, permite mayor versatilidad en los métodos y
sirve de base para otras estructuras. Por ello es conveniente comprender completamente
las listas pues su lógica es fundamental para otros TAD.
Materiales y equipo
•
Guía de Laboratorio Nº 4.
•
Computadora con programa:
 Microsoft Visual Studio C#
•
Dispositivo de Almacenamiento (USB).
Procedimiento
1-Cree un proyecto modo consola en Visual C# y agregue el siguiente código dentro de la
clase program (antes del main).
//se crea la clase nodo
class nodo
{
public int info;
public nodo sgte;
Programación III. Guía 4.
3
3
}
//se crea la clase lista
class lista
{
public nodo inicio;
public lista()
{
inicio = null;
}
//Función insertar final de la lista
public void Insertarf(int item)
{
nodo aux = new nodo();
aux.info = item;
aux.sgte = null;
if (inicio == null)
inicio = aux;
else
{
nodo puntero;
puntero = inicio;
while (puntero.sgte != null)
{
puntero = puntero.sgte;
}
puntero.sgte = aux;
}
}
//Función insertar Inicio de la lista
public void InsertarI(int item)
{
nodo aux = new nodo();
aux.info =
aux.sgte =
if (inicio
inicio =
else
item;
null;
== null)
aux;
{
nodo puntero;
puntero = inicio;
inicio = aux;
aux.sgte = puntero;
}
}
//Función Eliminar inicio de la lista
public void eliminarI()
Programación III. Guía 4.
4
4
{
if (inicio == null)
Console.WriteLine("Lista vacía, no se puede eliminar");
else
inicio = inicio.sgte;
}
//Función Eliminar final de la lista
public void eliminarF()
{
if (inicio == null)
Console.WriteLine("Lista vacía, no se puede eliminar");
else
if (inicio.sgte == null)
inicio = null;
else
{
nodo punteroant, punteronext;
punteroant = inicio;
punteronext = inicio;
while (punteronext.sgte != null)
{
punteroant = punteronext;
punteronext = punteronext.sgte;
}
punteroant.sgte = null;
}
}
//Insertar en una posición especifica de la lista
public void InsertarP(int item, int pos)
{
nodo aux = new nodo();
aux.info = item;
aux.sgte = null;
if (inicio == null)
{
Console.WriteLine(" LISTA VACIA,SE INSERTA EN LA 1ºPOSICION");
inicio = aux;
}
else
{
nodo puntero;
puntero = inicio;
if (pos == 1)
{
inicio = aux;
aux.sgte = puntero;
}
Programación III. Guía 4.
5
5
else
{
for (int i = 1; i < pos - 1; i++)
{
puntero = puntero.sgte;
if (puntero.sgte == null)
break;
}
nodo punteronext;
punteronext = puntero.sgte;
puntero.sgte = aux;
aux.sgte = punteronext;
}
}
}
//Función que muestra el contenido de la lista
public void Mostrar()
{
if (inicio == null)
Console.WriteLine("lista vacia");
else
{
nodo puntero;
puntero = inicio;
Console.Write("{0}->\t", puntero.info);
while (puntero.sgte != null)
{
puntero = puntero.sgte;
Console.Write("{0}->\t", puntero.info);
}
Console.WriteLine();
}
}
Ahora dentro del Main digitaremos lo siguiente:
static void Main(string[] args)
{
//crear una instancia de la lista
lista milista = new lista();
milista.Insertarf(10);
milista.Insertarf(20);
milista.Insertarf(30);
milista.Insertarf(40);
milista.Mostrar();
Console.ReadLine();
}
Programación III. Guía 4.
6
6
Ahora ejecute el código trabajado y observe lo que realiza el programa.
Una vez que ha realizado esto agregue las siguientes líneas a su código del Main:
//insertamos en la posicion 2 el valor 220
milista.InsertarP(220, 2);
milista.Mostrar();
Console.ReadLine();
Ejecútelo y observe qué resultados muestra.
Análisis de Resultados
1- Basándose en el código dado, elabore un menú con las siguientes opciones:
a. Insertar al Frente
b. Insertar al Final
c. Insertar en una posición especifica
d. Eliminar al Frente
e. Eliminar al Final
f. Mostrar lista
g. Salir
Investigación Complementaria

Crear una función booleana que permita buscar información en una lista enlazada, utilice
la forma más sencilla del nodo solo el int info.

Implementar una lista doblemente enlazada con C#, apoyándose en el código visto en la
práctica.

Investigar sobre funcionalidades, herramientas y otros beneficios que ofrece la librería
Drawing de C# (modo gráfico), también incluya ejemplos de ello. Nota: esto es requisito
para próximas prácticas.
Bibliografía.
Deitel, Harvey M.; Deitel, Paul J. CÓMO PROGRAMAR EN C#. Segunda Edición. Editoral
Pearson. México, 2007.
Descargar