Objetivos Introducción

Anuncio
Programación III, Guía 3
1
Facultad : Ingeniería
Escuela : Computación
Asignatura: Programación III
Tema: “Listas enlazadas”.
Objetivos


Aprenda a formar estructuras de datos enlazadas
Implemente una lista utilizando Visual C#.Net
Introducción
LISTA
Una lista esta 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:
Ivestigar que significa sistemas informáticos en cloud
2
Programación III, Guía 3
Prácticamente todos los programas reales incluyen alguna sentencia condicional, haciendo
que las sentencias efectivamente ejecutadas dependan de los datos concretos que se le
presenten. Esto hace que mas que un valor T(N) debamos hablar de un rango de valores
Tmin(N) <=T(N) <= Tmax(N)
Los extremos son habitualmente conocidos como “caso peor” y “caso mejor”. Entre ambos
se hallara algun “caso promedio” o más frecuente.
Cualquier fórmula T(N) incluye referencias al parámetro N y a una serie de constantes “Ti” que
dependen de factores externos al algoritmo como pueden ser la calidad del código generado por el
compilador y la velocidad de ejecución de instrucciones del ordenador que lo ejecuta. Dado que es
fácil cambiar de compilador y que la potencia de los ordenadores crece a un ritmo vertiginoso (en
la actualidad, se duplica anualmente), intentaremos analizar los algoritmos con algún nivel de
independencia de estos factores; es decir, buscaremos estimaciones generales ampliamente
válidas.
Con frecuencia nos encontraremos con que no es necesario conocer el comportamiento exacto,
sino que basta conocer una cota superior, es decir, alguna función que se comporte “aun peor”. La
definición matemática de estos conjuntos debe ser muy cuidadosa para involucrar ambos
aspectos: identificación de una familia y posible utilización como cota superior de otras funciones
menos malas:
Dícese que el conjunto O(f(n)) es el de las funciones de orden de f(n), que se define como:
O(f(n)) ={g:INTEGER-> REAL tales que
Existen las constantes k y N0 tales que
Para todo N>N0, g(N) <=K*F(N) }
En palabras, O(f(n)) esta formado por aquellas funciones g(n) que crecen a un ritmo menor o igual
que el de f(n). De las funciones “g” que forman este conjunto O(f(n)) se dice que “estan dominadas
asintóticamente” por “f” en el sentido de que para N suficientemente grande, y salvo una constante
multiplicativa “K”,f(n) es una cota superior de g(n).
Órdenes de Complejidad La familia O(f(n)) define un Orden de Complejidad. Elegiremos como
representante de este Orden de Complejidad a la función f(n) más sencilla perteneciente a esta
familia.:
Se identifica una Jerarquía de Ordenes de Complejidad que coincide con el orden de la tabla
mostrada; jerarquía en el sentido de que cada orden de complejidad inferior tiene a las superiores
como subconjuntos. Si un algoritmoA se puede demostrar de un cierto orden O(1), es cierto que
también pertenece a todos los ordenes superiores( la relación de orden cota superior es transitiva)l
pero en la practica lo útil es encontrar la “menor cota superior”, es decir el menor orden de
complejidad que lo cubra.
Reglas Prácticas Aunque no existe una receta que siempre funcione para calcular la complejidad
de un algoritmo, si es posible tratar sistemáticamente una gran cantidad de ellos, basándonos en
que suelen estar bien estructurados y siguen pautas uniformes. Los algoritmos bien estructurados
combinan las sentencias de alguna de las formas siguientes:
Secuencia (;)
Programación III, Guía 3
3
Las operaciones típicas de la lista incluyen: Crear la lista, verificar si esta vacía, insertar elementos,
eliminar elementos, mostrar elementos.
MATERIAL Y EQUIPO
Nº
Cantidad
Descripción
1
1
Guía de Programación #3,
Programación III
2
1
Dispositivo de memoria
PROCEDIMIENTO
1- Cree un proyecto modo consola en Visual C#.Net y
agregue el siguiente código dentro de la clase
programa
//se crea la clase nodo
class nodo
{
public int info; public nodo sgte;
}
//se crea la clase lista
class lista
{
public nodo inicio;
public lista()
{
inicio = null;
}
Ivestigar que significa sistemas informáticos en cloud
4
Programación III, Guía 3
//Funcion 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;
}
}
//Funcion insertar Inicio de la lista
public void InsertarI(int item)
{
nodo aux = new nodo();
aux.info = item;
aux.sgte = null;
if (inicio == null)
inicio = aux;
else
{
nodo puntero;
puntero = inicio;
inicio = aux; aux.sgte = puntero;
}
Programación III, Guía 3
}
//Funcion Eliminar inicio de la lista
public void eliminarI()
{
if (inicio == null)
Console.WriteLine("Lista vacía, no se puede eliminar");
else
inicio = inicio.sgte;
}
//Funcion 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;
}
}
Ivestigar que significa sistemas informáticos en cloud
5
Programación III, Guía 3
6
//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;
}
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;
Programación III, Guía 3
}
}
}
//Funcion 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();
}
}
}
Ivestigar que significa sistemas informáticos en cloud
7
Programación III, Guía 3
8
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();
//insertamos en la posicion 2 el valor 220
milista.InsertarP(220, 2);
milista.Mostrar();
Console.ReadLine();
}
2- 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
3- Utilizando el código del ejemplo1, cree un nuevo programa en C# en el que cree
una lista que contenga la siguiente información
 ID
 Nombre
 Sueldo
Agregando el menú del ejercicio 2
Programación III, Guía 3
9
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
Ivestigar que significa sistemas informáticos en cloud
Descargar