Está en la página 1de 3

using System;

using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Listas1
{
class Nodo // estamos creando un nuevo tipo de dato q es nodo
{
public int elemento;
public Nodo siguiente; // significa q va guardar variables de nuevos nod
os
// metodo constructor, no nos devuelve un dato
public Nodo(int e, Nodo s) //cada q llamamos a nodo creamos un nuevo dat
o, "Este es un Constructor de Nodos Comunes"------- Nodo s indica q estamos envi
ando un puntero al dato
{
// this.elemento = elemento; // el this utilizamos cuando un tipo de
dato q metemos se llama igual q el q tenemos this.elemento se refiere al public
int elemento
elemento = e;
siguiente = s;
}
public Nodo() // para crear la cabeza
{
// el elemento esta vacio
siguiente = null;
}
}
class Lista
{
Nodo cabeza, prev;
public int contador;
public Lista() // contructor de lista
{
prev = cabeza = new Nodo(); // llamamos al constructor del nodo cabez
a
contador = 0;
}
public void Insertar(int dato) // del main recogemos un dato pa introduc
ira este metodo
{
prev.siguiente = new Nodo(dato, prev.siguiente); // el dato lo ponem
os en el lugar donde estaba prev funciona para todos los datos q insertaremos
contador++;
}
public void ColocarEnPosicion(int pos)
{
prev = cabeza;
for (int i = 1; i <pos ; i++)
{
prev = prev.siguiente; // hace q vaya o avance hasta antes de la
posicion q se ingresa
}
}
public int RemoverDato()
{
int aux;
aux=prev.siguiente.elemento;
prev.siguiente=prev.siguiente.siguiente;
return aux;
}
public void Mostrar()
{
prev = cabeza.siguiente;
for (int i = 1; (i <= contador) && (prev != null); i++) // para impr
imir los elementos q estan en la lista
{
Console.Write(prev.elemento + " ");
prev = prev.siguiente; // esto hacemos para q prev avance al cam
po siguiente
Console.Write("");
}
// en vez del for podemos poner
// while(prev != null)
// {
// Console.Write(prev.elemento + " ");
// prev = prev.siguiente; // esto hacemos para q prev avance al c
ampo siguiente
// }
}
}
class Program
{
static void Main(string[] args)
{
int opcion;
Lista L1 = new Lista(); // estamos creando la lista pero solo con el
primer nodo q contiene la cabeza y prev apunta a un espacio null
do
{
Console.WriteLine("1.- Insertar");
Console.WriteLine("2.- Remover un dato (por posicin)");
Console.WriteLine("3.- Mostrar Lista");
Console.WriteLine("4.- Salir");
Console.Write("Ingrese opcion: ");
opcion = int.Parse(Console.ReadLine());
switch (opcion)
{
case 1:

Console.WriteLine("Ingrese la posicion que desea ingresa
r");
int posicion = int.Parse(Console.ReadLine());

if(posicion <= (L1.contador + 1))
{
Console.WriteLine("Ingrese el dato que desea ingresa
r");
int dato = int.Parse(Console.ReadLine());
L1.ColocarEnPosicion(posicion);
L1.Insertar(dato);
Console.WriteLine("**********Lista*********");
L1.Mostrar();
Console.WriteLine("");
Console.WriteLine("*************************");
}
else { Console.WriteLine("No es una posicin valida"); }

break;
case 2:
Console.WriteLine("Ingrese la posicion que desea remover
");
int posElim = int.Parse(Console.ReadLine());
if (posElim <= (L1.contador - 1))
{
L1.ColocarEnPosicion(posElim);
Console.WriteLine("Dato eliminado: " + L1.RemoverDat
o());
Console.WriteLine("**********Lista*********");
L1.Mostrar();
Console.WriteLine("");
Console.WriteLine("*************************");
}
else { Console.WriteLine("No es una posicin valida"); }
break;
case 3:
Console.WriteLine("**********Lista*********");
L1.Mostrar();
Console.WriteLine("");
Console.WriteLine("*************************");
break;
}
} while (opcion != 4);
Console.WriteLine("Saliendo.....");
Console.ReadKey();
}
}
}

También podría gustarte