LISTAS:
Una lista en C# es una
colección dinámica de elementos del mismo tipo que crece
automáticamente, a diferencia de los arrays que tienen tamaño fijo.
aracterísticas Principales
- Tipo genérico: List<string>, List<int>, List<Alumno>
- Espacio de nombres: using
System.Collections.Generic;
- Acceso por índice: lista[0], lista[1]
- Propiedades: lista.Count (número
de elementos)
CODIGO:
using
System;
using
System.Collections.Generic;
namespace
Ejemplo
{
internal class Program
{
static void Main(string[] args)
{
List<string> alumnos = new
List<string>(); // Sin espacios
extra
alumnos.Add("pepe");
alumnos.Add("joaquin");
alumnos.Add("pepe");
alumnos.Add("kimberly");
alumnos.Add("eusebio");
alumnos.Remove("eusebio");
alumnos.Insert(1,
"paola");
Console.WriteLine(alumnos[0]);
Console.WriteLine(alumnos.Count);
Console.WriteLine(alumnos.IndexOf("joaquin"));
Console.WriteLine(alumnos.LastIndexOf("pepe"));
Console.WriteLine(alumnos.Contains("joaquin"));
alumnos.Sort();
alumnos.Reverse();
//alumnos.Clear();
string[]
coleagiales=alumnos.ToArray();
foreach (string alumn in alumnos)
{
Console.WriteLine(alumn);
}
Console.ReadKey();
//ingreso de nombres:
List<string> LIST2 = new
List<string>(); // Tu lista LIST 2
string dato;
Console.WriteLine("===
LIST 2 ===");
Console.Write("¿Cuántos datos
ingresaras? ");
int cantidad =
int.Parse(Console.ReadLine());
// Ingresar datos a LIST 2
for (int i = 0; i < cantidad; i++)
{
Console.Write($"Dato {i +
1}: ");
dato = Console.ReadLine();
LIST2.Add(dato); // Agregar a LIST 2
}
// Mostrar LIST 2
Console.WriteLine("\nContenido
de LIST 2:");
for (int i = 0; i < LIST2.Count; i++)
{
Console.WriteLine($"[{i}]
{LIST2[i]}");
}
Console.ReadKey();
}
}
}
Listas enlazadas
CODIGO:
using System;
// Clase Nodo que representa cada
elemento de la lista
public class Nodo
{
public int dato; // Dato
almacenado en el nodo
public Nodo siguiente; //
Referencia al siguiente nodo
public Nodo(int dato)
{
this.dato = dato;
this.siguiente = null;
}
}
// Clase ListaEnlazadaSimple que maneja
todas las operaciones
public class ListaEnlazadaSimple
{
private Nodo inicio; // Puntero
al primer nodo
public ListaEnlazadaSimple()
{
inicio = null;
}
// 1. Insertar al inicio
public void InsertarInicio(int dato)
{
Nodo nuevo = new Nodo(dato);
nuevo.siguiente = inicio;
inicio = nuevo;
}
// 2. Insertar al final
public void InsertarFinal(int dato)
{
Nodo nuevo = new Nodo(dato);
if (inicio == null)
{
inicio = nuevo;
return;
}
Nodo actual = inicio;
while (actual.siguiente != null)
{
actual = actual.siguiente;
}
actual.siguiente = nuevo;
}
// 3. Buscar un elemento
public bool Buscar(int dato)
{
Nodo actual = inicio;
while (actual != null)
{
if (actual.dato == dato)
return true;
actual =
actual.siguiente;
}
return false;
}
// 4. Eliminar un elemento específico
public bool Eliminar(int dato)
{
if (inicio == null)
return false;
// Si es el
primer nodo
if (inicio.dato == dato)
{
inicio = inicio.siguiente;
return true;
}
// Buscar el nodo anterior al que se quiere eliminar
Nodo actual = inicio;
while (actual.siguiente != null)
{
if (actual.siguiente.dato == dato)
{
actual.siguiente =
actual.siguiente.siguiente;
return true;
}
actual = actual.siguiente;
}
return false;
}
// 5. Mostrar todos los elementos
public void Mostrar()
{
if (inicio == null)
{
Console.WriteLine("La lista
está vacía");
return;
}
Nodo actual = inicio;
Console.Write("Lista: ");
while (actual != null)
{
Console.Write(actual.dato + "
-> ");
actual = actual.siguiente;
}
Console.WriteLine("NULL");
}
// 6. Obtener tamaño de la lista
public
int Tamano()
{
int count = 0;
Nodo actual =
inicio;
while (actual != null)
{
count++;
actual = actual.siguiente;
}
return count;
}
// 7. Verificar si está vacía
public bool EstaVacia()
{
return inicio == null;
}
}
// Programa principal para probar la
lista
class
Program
{
static void Main(string[] args)
{
ListaEnlazadaSimple lista = new ListaEnlazadaSimple();
Console.WriteLine("=== DEMOSTRACIÓN DE LISTA ENLAZADA SIMPLE
===\n");
// Insertar al inicio
lista.InsertarInicio(10);
lista.InsertarInicio(20);
lista.InsertarInicio(30);
Console.WriteLine("1. Insertar al inicio (30,20,10):");
lista.Mostrar();
// Insertar al final
lista.InsertarFinal(40);
lista.InsertarFinal(50);
Console.WriteLine("\n2. Insertar al final (agrega 40,50):");
lista.Mostrar();
// Buscar
Console.WriteLine($"\n3. Buscar 40: {lista.Buscar(40)}");
Console.WriteLine($"Buscar 100: {lista.Buscar(100)}");
// Tamaño
Console.WriteLine($"\n4. Tamaño de la lista:
{lista.Tamano()}");
// Eliminar
Console.WriteLine("\n5. Eliminar 20:");
lista.Eliminar(20);
lista.Mostrar();
Console.WriteLine($"\n6. ¿Está vacía? {lista.EstaVacia()}");
Console.WriteLine("\nPresiona cualquier tecla para salir...");
Console.ReadKey();
}
}
PROGRAMA QUE INGRESA NODOS Y REPORTA
LISTAS ENLAZADAS
using
System;
public
class Nodo
{
public int dato;
public Nodo siguiente;
public Nodo(int dato)
{
this.dato = dato;
this.siguiente = null;
}
}
public class ListaSimple
{
private Nodo inicio;
public ListaSimple()
{
inicio = null;
}
// Insertar al final
public void Agregar(int dato)
{
Nodo nuevo = new Nodo(dato);
if (inicio == null)
{
inicio = nuevo;
return;
}
Nodo actual = inicio;
while (actual.siguiente != null)
{
actual = actual.siguiente;
}
actual.siguiente = nuevo;
}
// Imprimir todos los nodos
public void Imprimir()
{
if (inicio == null)
{
Console.WriteLine("La lista
está vacía");
return;
}
Console.Write("Nodos: ");
Nodo actual = inicio;
while (actual != null)
{
Console.Write(actual.dato);
if (actual.siguiente != null)
Console.Write(" ->
");
actual = actual.siguiente;
}
Console.WriteLine();
}
}
class
Program
{
static void Main(string[] args)
{
ListaSimple lista = new ListaSimple();
Console.WriteLine("=== LISTA ENLAZADA SIMPLE INTERACTIVA
===\n");
// Ingresar datos
Console.WriteLine("Ingresa números (0 para terminar):");
int numero;
do
{
Console.Write("Número:
");
numero =
int.Parse(Console.ReadLine());
if (numero != 0)
{
lista.Agregar(numero);
}
} while (numero != 0);
Console.WriteLine("\n--- RESULTADO ---");
lista.Imprimir();
Console.WriteLine("\nPresiona cualquier tecla para salir...");
Console.ReadKey();
}
}
COLAS
>using System;
// Clase Nodo para la estructura de la
cola
public
class Nodo
{
public int dato;
public Nodo
siguiente;
public Nodo(int valor)
{
dato = valor;
siguiente = null;
}
}
// Clase Cola que usa nodos enlazados
public class Cola
{
private Nodo inicio;
private Nodo fin;
public Cola()
{
inicio = null;
fin = null;
}
// Encolar (agregar al final)
public void Encolar(int valor)
{
Nodo nuevo = new Nodo(valor);
if (EstaVacia())
{
inicio = nuevo;
fin = nuevo;
}
else
{
fin.siguiente = nuevo;
fin = nuevo;
}
}
// Desencolar (eliminar del inicio)
public int Desencolar()
{
if (EstaVacia())
{
throw new
InvalidOperationException("La cola está vacía");
}
int valor = inicio.dato;
Nodo temp = inicio;
if (inicio == fin)
{
inicio = null;
fin = null;
}
else
{
inicio = inicio.siguiente;
}
temp.siguiente = null;
return valor;
}
// Verificar si la cola está vacía
public bool EstaVacia()
{
return inicio == null;
}
// Mostrar todos los elementos de la cola
public
void Mostrar()
{
if (EstaVacia())
{
Console.WriteLine("La cola
está vacía");
return;
}
Nodo actual = inicio;
Console.Write("Cola: ");
while (actual != null)
{
Console.Write(actual.dato + "
");
actual = actual.siguiente;
}
Console.WriteLine();
}
}
// Programa principal para probar la
cola
class
Program
{
static void Main(string[] args)
{
Cola miCola = new Cola();
Console.WriteLine("=== DEMO COLA CON NODOS EN C# ===\n");
// Encolar elementos
miCola.Encolar(10);
miCola.Encolar(20);
miCola.Encolar(30);
miCola.Mostrar(); // Salida:
Cola: 10 20 30
// Desencolar
Console.WriteLine($"Desencolado: {miCola.Desencolar()}"); // 10
miCola.Mostrar(); // Salida:
Cola: 20 30
// Más operaciones
miCola.Encolar(40);
miCola.Encolar(50);
miCola.Mostrar(); // Salida:
Cola: 20 30 40 50
Console.WriteLine($"¿Está vacía? {miCola.EstaVacia()}");
}
}
