Está en la página 1de 9

Listas enlazadas con C# EAP Ingeniera de Sistemas

UNIVERSIDAD NACIONAL JOS FAUSTINO SANCHEZ CARRIN FACULTAD DE INGENIERA ESCUELA ACADMICA PROFESIONAL DE INGENIERA DE SISTEMAS

CURSO LENGUAJE DE PROGRAMACIN II

SEPARATA LISTAS ENLAZADAS CON C#

DOCENTE ING. JAVIER ALBERTO MANRIQUE QUIONEZ

HUACHO PER 2013-I


_______________________________________________________________________________ 1 Lenguaje de Programacin II Ing. Javier
Alberto Manrique Quionez

Listas enlazadas con C# EAP Ingeniera de Sistemas

Una cola es una estructura de datos que almacena elementos en una lista y permite acceder a los datos por uno de los extremos de la lista. Un elemento se inserta en la cola (parte final) de la lista y se suprime o elimina por el frente (parte inicial, cabeza o frente) de la lista. Las aplicaciones utilizan una cola para almacenar elementos en un orden de aparicin o concurrencia.

ESTRUCTURAS TIPO COLAS

FINAL (Ultimo)

FRENTE (Primero)

Los elementos se eliminan (se quitan) de la cola en el mismo orden en que se almacenan y por consiguiente, una cola es una estructura de tipo FIFO (First-Input / First-Output primero en entrar primero en salir o bien primero en llegar primero en ser atendido). Un servicio atencin al cliente en una empresa, la gestin de tareas de impresin, son los ejemplos. Desde el punto de vista de estructura de datos, una cola es similar a una pila, en donde los datos se almacenan de un modo lineal y el acceso a los datos solo est permitido en los extremos de la cola.

Las actividades que estn permitidas en las colas son:


Creacin de una cola vaca Verificacin de que la cola est vaca Aadir un dato al final de una cola Eliminacin de los datos de la cabeza de la cola

Las colas se pueden implementar utilizando arreglos o listas enlazadas.

ESTRUCTURA TIPO PILA


La pila (stack) es una coleccin ordenada de elementos a los que solo se le puede acceder por un nico lugar o extremo de la pila. Los elementos de la pila se aaden o se quitan (borran) de la misma slo por su parte superior (cima). Este es el caso de una pila de libros, una pila de platos, una pila de cajas, etc.

_______________________________________________________________________________ 2 Lenguaje de Programacin II Ing. Javier


Alberto Manrique Quionez

Listas enlazadas con C# EAP Ingeniera de Sistemas

Las entradas de la pila deben ser eliminadas en el orden inverso al que se situaron en la misma. Debido a la propiedad especfica ltimo en entrar-primero en salir a las pilas se les conoce como estructuras de datos LIFO (LAST-INPUT, FIRST-OUTPUT). Las operaciones usuarios en la pila son: insertar, quitar. La operacin insertar (Push) aade un elemento en la Cima de la pila y la operacin Quitar (Pop) elimina un elemento de la pila.

ESTRUCTURAS DINMICAS DE DATOS


Las estructura dinmicas de datos son aquellas estructuras de datos que permiten crear sus elementos en la medida que se les necesita. Esto hace posible utilizar estructuras de datos que varan su tamao (nmero de elementos). Las estructura dinmicas de datos se clasifican de la siguiente manera: Listas Arboles Grafos

LISTAS ENLAZADAS
Las listas enlazadas (ligada o encadenada o linked list ) es una coleccin de elementos (llamados nodos) dispuestos uno a continuacin de otro, cada uno de ellos conectado al siguiente elemento por un enlace o referencia. La idea bsica consiste en construir una lista de elementos llamados nodos que se componen de dos partes: la primera parte que contiene la informacin y es por consiguiente un valor de tipo registro y la segunda parte un campo de tipo referencia que apunta al siguiente elemento (nodo) de la lista.

_______________________________________________________________________________ 3 Lenguaje de Programacin II Ing. Javier


Alberto Manrique Quionez

Listas enlazadas con C# EAP Ingeniera de Sistemas primero ltimo

Las listas enlazadas son accedidas por un variable referencia (primero) que apunta al primer elemento; este primer elemento apunta al segundo y as sucesivamente hasta encontrar al ltimo elemento cuyo enlace no apunta a ningn nodo por lo cual se indica que apunta a null.

Informaci nnDatos

Enlace

null

CLASIFICACION DE LA LISTAS ENLAZADAS


Las listas se pueden dividir en tres categoras:
Listas simplemente enlazadas con insercin tipo cola o pila y listas con insercin ordenada. Listas doblemente enlazadas Lista circulares simples y/o listas circulares doblemente enlazadas

Las operaciones con las listas enlazadas pueden ser:


Inicializacin o creacin , con declaracin de nodos Insercin de elementos a la lista: al final de la lista (tipo cola) o al inicio de la lista (tipo pila) Recorrer la lista enlazada o Mostrar/utilizar el contenido de un nodo o Buscar un nodo especfico de acuerdo a su contenido de sus campos o Eliminar un nodo especfico y/o eliminar todos los nodos Otros.

LISTA ENLAZADA CON INSERCION TIPO COLA


Es una lista enlazada donde el primer elemento en ser creado ser el primer elemento en ser accesado. El acceso que realiza a travs del primer nodo de la lista que recibe el nombre de cabeza o cabecera ( primero de la lista). En ocasiones se mantiene tambin una referencia al ltimo nodo de la lista enlazada. Este ltimo nodo es la cola de la lista y un puntero al ltimo nodo es la referencia de cola. Para algunos procesos se crean otras referencias a cualquier elemento de la lista. La constante nula representada por la palabra null se utiliza para indicar que el valor referencia no apunte a ningn nodo. Este constante nula se puede usar en el campo enlace o siguiente del nodo final o en una lista que no tiene ningn nodo en el cual se utiliza null como referencia de cabeza y de cola. La lista que no tiene ningn elemento se denomina lista vaca. A continuacin se presenta un programa en C# donde se implementa una lista enlazada con insercin tipo cola.

_______________________________________________________________________________ 4 Lenguaje de Programacin II Ing. Javier


Alberto Manrique Quionez

Listas enlazadas con C# EAP Ingeniera de Sistemas


using System; namespace ListasEnlazadas { public class Empleado { private int empleado_id; private String apellido; private String nombre; private double sueldo; public Empleado () { empleado_id = 0; apellido = ""; nombre = ""; sueldo = 0; } public Empleado ( int empleado_id, String apellido, String nombre, double sueldo ) { this.empleado_id = empleado_id; this.apellido = apellido; this.nombre = nombre; this.sueldo = sueldo; } public int getEmpleado_id ( ) { return empleado_id; } public void setEmpleado_id ( int empleado_id ) { this.empleado_id = empleado_id; } public String getApellido ( ) { return apellido; } public void setApellido ( String apellido ) { this.apellido = apellido; } public String getNombre ( ) { return nombre; } public void setNombre ( String nombre ) { this .nombre = nombre; } public double getSueldo ( ) { return sueldo; } public void setSueldo ( double sueldo ) { this.sueldo = sueldo; } } }

using System; namespace ListasEnlazadas { public class Nodo { private Empleado empleado; private Nodo siguiente; public Nodo ( Empleado empleado ) { this.empleado = empleado; } public Empleado getEmpleado ( ) { return empleado; } public void setEmpleado ( Empleado empleado ) { this.empleado = empleado; } public Nodo getSiguiente ( )

_______________________________________________________________________________ 5 Lenguaje de Programacin II Ing. Javier


Alberto Manrique Quionez

Listas enlazadas con C# EAP Ingeniera de Sistemas


{ return siguiente; } public void setSiguiente ( Nodo siguiente ) { this.siguiente = siguiente; }

} }

using System; namespace ListasEnlazadas { public class Cola { private Nodo primero; private Nodo ultimo; public Cola() { primero=null; Ultimo=null; } public Nodo getPrimero() { return primero; } public void setPrimero(Nodo primero) { this.primero = primero; } public Nodo getUltimo() { return ultimo; } public void setUltimo(Nodo ultimo) { this.ultimo = ultimo; } public void agrega (Empleado empleado) { Nodo nuevo; nuevo = new Nodo(empleado); nuevo.setSiguiente(null); if ( primero == null ) { primero = nuevo; } else { ultimo.setSiguiente(nuevo); } ultimo = nuevo; } public Boolean esVacia ( ) { return primero == null; } public double totalizarSueldos ( ) { Nodo auxiliar; double totalDeSueldos=0; auxiliar = primero; while ( auxiliar != null ) { totalDeSueldos = totalDeSueldos + auxiliar.getEmpleado().getSueldo(); auxiliar = auxiliar.getSiguiente(); } return totalDeSueldos; } public void eliminar (Empleado oEmpleado) { int encontrado=0; Nodo actual; Nodo anterior; if (!esVacia()) { actual = primero; anterior = primero; while ((actual != null) && (encontrado == 0)) { if (actual.getEmpleado().getEmpleado_id() == oEmpleado.getEmpleado_id() ) { encontrado = 1; }

_______________________________________________________________________________ 6 Lenguaje de Programacin II Ing. Javier


Alberto Manrique Quionez

Listas enlazadas con C# EAP Ingeniera de Sistemas


else { anterior = actual; actual = actual.getSiguiente(); } } if (encontrado == 1) { if (actual == primero) { primero = actual.getSiguiente(); } else { if (actual.getSiguiente == null ) { anterior.setSiguiente(null); ultimo = anterior; } else { anterior.setSiguiente(actual.getSiguiente()); } } } else { Console.WriteLine("No se encuentra !!!" + oEmpleado .getEmpleado_id()); }

} public void Listado () { if (!esVacia()) { Nodo auxiliar; auxiliar = primero; while ( auxiliar != null ) { Empleado oEmpleado; oEmpleado = auxiliar.getEmpleado(); Console.Write("Empleado_id : " + oEmpleado.getEmpleado_id()+\t); Console.WriteLine("Apellido : " + oEmpleado.getApellido()+\t); Console.WriteLine("Nombre : " + oEmpleado.getNombre()++\t); Console.WriteLine("Sueldo : " + oEmpleado.getSueldo()+\n); auxiliar = auxiliar.getSiguiente(); } } else { Console.WriteLine("Lista vaca !!!"); } } } public void vaciar ( ) { primero = null; } } using System; namespace ListasEnlazadas { public class Program { static void Main ( string[] args ) { Cola oCola= new Cola(); ConsoleKeyInfo opcion; do { menuPrincipal(); opcion = Console.ReadKey(true); Console.WriteLine(); switch (opcion.Key )

} else { Console.WriteLine("Lista vaca !!!"); }

_______________________________________________________________________________ 7 Lenguaje de Programacin II Ing. Javier


Alberto Manrique Quionez

Listas enlazadas con C# EAP Ingeniera de Sistemas


{ case ConsoleKey.A: oCola = agregar(oCola); break; case ConsoleKey.E: oCola = eliminar(oCola); break; case ConsoleKey.T: totalizar(oCola); break; case ConsoleKey.L: listar(oCola); break; }

} public static void menuPrincipal() { Console.WriteLine ("\tMen Principal"); Console.WriteLine ("\t--------------"); Console.WriteLine("(A)gregar"); Console.WriteLine("(E)liminar"); Console.WriteLine("(T)otalizar sueldos"); Console.WriteLine("(L)istar"); Console.WriteLine("(S)alir"); Console.Write("Elija su opcin: "); } public static Cola agregar(Cola oCola) { Empleado oEmpleado= new Empleado(); Console.Write("Empleado_id : "); oEmpleado.setEmpleado_id(Int32.Parse(Console.ReadLine())); Console.Write("Sueldo : "); oEmpleado.setSueldo(Double.Parse(Console.ReadLine())); oCola.agrega(oEmpleado); return oCola; } public static Cola eliminar(Cola oCola) { Empleado oEmpleado= new Empleado(); Console.Write("Empleado_id : "); oEmpleado.setEmpleado_id(Int32.Parse(Console.ReadLine())); oCola.eliminar(oEmpleado); return oCola; } public static void totalizar(Cola oCola) { double total=oCola.totalizarSueldos(); Console.WriteLine("Total : "+total); } public static void listar(Cola oCola) { oCola.Listado(); } } }

} while ( opcion.Key != ConsoleKey.Escape && opcion.Key != ConsoleKey.S );

Console.Write("Apellido : "); oEmpleado.setApellido(Console.ReadLine()); Console.Write("Nombre : "); oEmpleado.setNombre(Console.ReadLine());

LISTA ENLAZADA CON INSERCION TIPO PILA


Es una lista enlazada donde el ltimo elemento en ser creado ser el primero en ser accesado. Se le conoce como LIFO (Last input first output). A continuacin se presenta un diagrama de la forma en la lista enlazada tipo pila:

_______________________________________________________________________________ 8 Lenguaje de Programacin II Ing. Javier


Alberto Manrique Quionez

Listas enlazadas con C# EAP Ingeniera de Sistemas


4000 3000 3 2 2000 1 1000

*Primero= 4000 Nuevo = 5000

4 5000 0005

Primero = 4000

4000 4

3000 3 2

2000

1000 1

Nuevo = 5000
5

5000

null

Primero= 4000

4000 4

3000 3 2

2000

1000 1

null Nuevo = 5000


5 5000 4000 4 3000 3 2 2000 1000 1

Primero = 5000 Primero= 5000


5 5000 4000 4 3000 3 2

null
2000 1000 1

A continuacin se presenta el mtodo para convertir la lista enlazada tipo cola a lista enlazada null tipo pila:
public void agrega(Empleado empleado) { Nodo nuevo; Nodo nuevo = new Nodo(empleado); nuevo.setSiguiente(primero); primero=nuevo; }

_______________________________________________________________________________ 9 Lenguaje de Programacin II Ing. Javier


Alberto Manrique Quionez

También podría gustarte