Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Informáticos.
Modalidad: Presencial.
Materia: Desarrollo de Aplicaciones de Escritorio.
Resultados de aprendizaje
Estructuras de datos
Una estructura en C# es similar a una clase, pero las estructuras carecen de ciertas
características, como la herencia. Además, como una estructura es un tipo de valor,
normalmente se puede crear más rápido que una clase. Si utiliza bucles de pequeñas
dimensiones en los que se crean grandes cantidades de estructuras de datos nuevas, debe
considerar la posibilidad de utilizar una estructura en vez de una clase. Las estructuras también
se utilizan para encapsular grupos de campos de datos como las coordenadas de un punto en
una cuadrícula o las dimensiones de un rectángulo.
PILAS (stack)
Por analogía con objetos cotidianos, una operación apilar equivaldría a colocar un plato sobre
una pila de platos, y una operación retirar a retirarlo.
22
ESCUELA DE INGENIERÍA EN COMPUTACIÓN Carrera: Técnico en Ingeniería de Sistemas
Informáticos.
Modalidad: Presencial.
Materia: Desarrollo de Aplicaciones de Escritorio.
En una pila lo último que entra es lo primero que sale. Necesitamos incluir la librería
System.Collections
EJEMPLO
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
// TADS pila, colas, etc.
using System.Collections;
namespace EjemploPila
{
class Program
{
static void Main(string[] args)
{
string palabra;
Console.ReadKey();
}
}
}
COLAS (STACK)
Una cola es una estructura de datos, caracterizada por ser una secuencia de elementos
en la que la operación de inserción push se realiza por un extremo y la operación de
extracción pop por el otro. También se le llama estructura FIFO (del inglés First In First
23
ESCUELA DE INGENIERÍA EN COMPUTACIÓN Carrera: Técnico en Ingeniería de Sistemas
Informáticos.
Modalidad: Presencial.
Materia: Desarrollo de Aplicaciones de Escritorio.
Out), debido a que el primer elemento en entrar será también el primero en salir. El tipo
cola representa la idea que tenemos de cola en la vida real. La cola para subir al autobús
está compuesta de elementos (personas), que dispone de dos extremos comienzo y fin.
Por el comienzo se extraerá un elemento cuando haya comprado el billete para su viaje,
y si llega una nueva persona con intención de usar el autobús, tendrá que colocarse al
final y esperar que todos los elementos situados antes que él abandonen la cola.
EJEMPLO
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Collections;
namespace EjemploCola
{
class Program
{
static void Main(string[] args)
{
string palabra;
Console.ReadKey();
}
}
}
24
ESCUELA DE INGENIERÍA EN COMPUTACIÓN Carrera: Técnico en Ingeniería de Sistemas
Informáticos.
Modalidad: Presencial.
Materia: Desarrollo de Aplicaciones de Escritorio.
EJEMPLO
Desarrolle un programa en consola con un menú para el usuario que permita agregar elementos
a una pila, eliminar elementos de la pila, vaciar la pila completa y mostrar la pila en pantalla, el
programa solo debe aceptar números enteros del 1 al 99. Si el usuario introduce una opción que
no existe o un valor erróneo el programa de avisar al usuario con un mensaje en pantalla y
continuar con el programa
Solución:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Collections;
namespace conStack
{
class Program
{
static void Main(string[] args)
{
Stack miPila = new Stack();
int opcion;//opcion del menu
do
{
Console.Clear();//se limpia consola
opcion = menu();//muestra menu y espera opción
switch (opcion)
{
case 1:
agregar(ref miPila);
break;
case 2:
eliminar(ref miPila);
break;
case 3:
limpiar(ref miPila);
break;
case 4:
imprimir(miPila);
break;
case 5: break; //salir
default:
mensaje("ERROR: la opción no es válida. Intente de nuevo.");
break;
}
}
while (opcion != 5);
mensaje("El programa ha finalizado.");
}
/** añade un nuevo elemento a la pila */
static void agregar(ref Stack pila)
{
Console.Write("\n>Ingrese valor: ");
try
{
int valor = Convert.ToInt32(Console.ReadLine());
25
ESCUELA DE INGENIERÍA EN COMPUTACIÓN Carrera: Técnico en Ingeniería de Sistemas
Informáticos.
Modalidad: Presencial.
Materia: Desarrollo de Aplicaciones de Escritorio.
//CREACION DE METODOS
/** Elimina todos los elementos de la pila */
static void limpiar(ref Stack pila)
{
pila.Clear();
imprimir(pila);
}
/** Elimina elemento de la pila */
static void eliminar(ref Stack pila)
{
if (pila.Count > 0)
{
int valor = (int)pila.Pop();
mensaje("Elemento " + valor + " eliminado");
}
else {
imprimir(pila);
}
}
/** muestra menu y retorna opción */
static int menu()
{
//Console.Clear();
Console.WriteLine("\n Stack Menu\n");
Console.WriteLine(" 1.- Agregar elemento");
Console.WriteLine(" 2.- Eliminar elemento");
Console.WriteLine(" 3.- Vaciar Pila");
Console.WriteLine(" 4.- Ver pila");
Console.WriteLine(" 5.- Termina programa");
Console.Write(" JJ:> Ingresa tu opción: ");
try
{
int valor = Convert.ToInt32(Console.ReadLine());
return valor;
}
catch
{
return 0;
}
}
26
ESCUELA DE INGENIERÍA EN COMPUTACIÓN Carrera: Técnico en Ingeniería de Sistemas
Informáticos.
Modalidad: Presencial.
Materia: Desarrollo de Aplicaciones de Escritorio.
{
Console.WriteLine("\n
=======================================================");
Console.WriteLine(" JJ:> {0}", texto);
Console.WriteLine("
=======================================================");
Console.WriteLine("\n JJ:>Presione cualquier tecla para
continuar...");
Console.ReadKey();
}
}
Tanto la list‹T› como la ArrayList y otras clases de la Collections tienen propiedades muy
similares a los arrays de C# (para más detalles sobre estos busquen nueva el tema Matrices y
confirmen). Una ventaja fundamental de estas clases sobre los arrays es que puedan crecer y
reducir el número de objetos almacenados.
ArrayList es un objeto creado de una manera similar, aunque sin el argumento de tipo:
ArrayList nombre = new ArrayList ();
27
ESCUELA DE INGENIERÍA EN COMPUTACIÓN Carrera: Técnico en Ingeniería de Sistemas
Informáticos.
Modalidad: Presencial.
Materia: Desarrollo de Aplicaciones de Escritorio.
Con esta sintaxis ahora podemos crear una list‹T› denominada listacolores:
using System;
using System.Collections.Generic;
Una vez que una lista se ha creado hay una serie de métodos que pueden ser llamados a realizar
tareas en la lista. En este caso para agregar elementos a la lista de objetos se utiliza el
método Add(). Ejemplo:
Console.WriteLine (ListaColores[1]);
Un elemento de la lista puede cambiar su valor de manera similar usando el índice combinado
con el operador de asignación. Por ejemplo, para cambiar el color de verde a mamey:
ListaColores[2] = "mamey";
Todos los elementos de una lista se pueden acceder mediante un bucle foreach. Por ejemplo:
Cuando compilado y ejecutado, el código de salida anterior mostrara todos los colores.
28
ESCUELA DE INGENIERÍA EN COMPUTACIÓN Carrera: Técnico en Ingeniería de Sistemas
Informáticos.
Modalidad: Presencial.
Materia: Desarrollo de Aplicaciones de Escritorio.
que se incluirá en ese lugar. Por ejemplo, para insertar un elemento en la posición 2 de la lista
sería:
ListaColores.Insert(2, "Blanco");
Ordenando Listas
No hay manera de decirle a C# que ordene automáticamente una lista de artículos después de
añadir. Si los elementos de una lista deben estar siempre ordenados se debe llamar al
metodo Sort una vez se añaden nuevos elementos:
ListaColores.Sort();
Si el elemento no se encuentra en la lista devuelve -1. Esta técnica podría utilizarse para
reemplazar un valor con otro. Por ejemplo, sin conocer de antemano el valor del índice del
"Amarillo" cadena podemos cambiar a "Negro":
ListaColores[ListaColores.IndexOf("Amarillo")] = "Negro";
El método LastIndexOf() devuelve el valor del índice del último elemento de la lista para que
coincida con el punto especificado. Esto es particularmente útil cuando la lista contiene
elementos duplicados.
Hay dos miembros de la clase que son útiles para obtener información acerca de una lista de C#
o colección de objetos ArrayList. La propiedad Capacity puede ser utilizada para identificar el
número de artículos que puede almacenar una colección sin tener que cambiar el tamaño.
La propiedad Count, por otra parte, identifica cuantos artículos se encuentran actualmente
almacenados en la lista. Por razones obvias, Capacity será siempre superior a Count.
En los casos en que existe una gran diferencia entre el Count y Capacity los elementos pueden
ser borrados con el método TrimExcess().
29
ESCUELA DE INGENIERÍA EN COMPUTACIÓN Carrera: Técnico en Ingeniería de Sistemas
Informáticos.
Modalidad: Presencial.
Materia: Desarrollo de Aplicaciones de Escritorio.
Borrado de elementos
Todos los elementos de una lista podrán ser borrados mediante el método Clear():
ListaColores.Clear();
Ejemplo
1. Para este ejemplo necesitamos un formulario de tipo Windows Form de C#. Agregar
dos botones Insertar y Eliminar y un Listbox.
2. Iniciamos con la función Ramdon, se requiere que el número que se ingrese en el listbox
sea aleatorio y no escrito en una caja de texto, ubicamos el código en el botón insertar
para que ingrese uno a uno los números aleatorios, luego en el botón eliminar le
decimos que remueva uno por uno, de forma que el primero que entró sea el primero
en salir. de esta manera:
30
ESCUELA DE INGENIERÍA EN COMPUTACIÓN Carrera: Técnico en Ingeniería de Sistemas
Informáticos.
Modalidad: Presencial.
Materia: Desarrollo de Aplicaciones de Escritorio.
Estructuras
Las estructuras se usan para agrupar distintas variables en torno a una unión común, sin aportar
ningún tipo de método para su manejo (esto las distingue directamente de las clases), pero a
diferencia de lenguajes más antiguos, permitiendo que tengan variables privadas y propiedades
para su manejo.
Ejemplo
1. Declaración de una estructura
public struct direccion{
string calle;
int numero;
char letra;
2. Como se emplean
direccion personal;
personal.Calle = "Avenida";
personal.Numero = 6;
personal.Letra = 'C'
Ejemplo
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Collections;
namespace EjemploStruct
{
public class Ejemplo
{
struct tipoPersona
{
public string nombre;
public char inicial;
public int edad;
public float nota;
}
31
ESCUELA DE INGENIERÍA EN COMPUTACIÓN Carrera: Técnico en Ingeniería de Sistemas
Informáticos.
Modalidad: Presencial.
Materia: Desarrollo de Aplicaciones de Escritorio.
persona.nombre = "Juan";
persona.inicial = 'J';
persona.edad = 20;
persona.nota = 7.5f;
Console.WriteLine("La edad de " + persona.nombre +" es " + persona.edad);
Console.ReadKey();
}
}
}
Ejemplo Estructuras de arreglos
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Collections;
namespace ArregloEstructura
{
public class Ejemplo
{
struct tipoPersona
{
public string nombre;
public char inicial;
public int edad;
public float nota;
}
persona[0].nombre = "Juan";
persona[0].inicial = 'J';
persona[0].edad = 20;
persona[0].nota = 7.5f;
Console.WriteLine("La edad de " + persona[0].nombre + " es " + persona[0].edad);
Console.ReadKey();
persona[1].nombre = "Pedro";
persona[1].edad = 30;
Console.WriteLine("La edad de " + persona[1].nombre + " es " + persona[1].edad);
Console.ReadKey();
}
}
}
namespace ArregloEstructura
{
public class Ejemplo
{
32
ESCUELA DE INGENIERÍA EN COMPUTACIÓN Carrera: Técnico en Ingeniería de Sistemas
Informáticos.
Modalidad: Presencial.
Materia: Desarrollo de Aplicaciones de Escritorio.
struct fechaNacimiento
{
public int dia;
public int mes;
public int anyo;
}
struct tipoPersona
{
public string nombre;
public char inicial;
public fechaNacimiento diaDeNacimiento;
public float nota;
}
persona.nombre = "Juan";
persona.inicial = 'J';
persona.diaDeNacimiento.dia = 15;
persona.diaDeNacimiento.mes = 9;
persona.nota = 7.5f;
Console.Write(persona.nombre + " nació en el mes " + persona.diaDeNacimiento.mes);
Console.ReadKey();
}
}
}
EJERCICIOS PRÁCTICOS
1) Implementar una función que recibe una lista de enteros L y un número entero n de
forma que modifique la lista mediante el borrado de todos los elementos de la lista que
tengan este valor.
2) Escribir una función Reemplazar que tenga como argumentos una pila con tipo de
elemento int y dos valores int: nuevo y viejo de forma que si el segundo valor aparece
en algún lugar de la pila,sea reemplazado por el segundo.
3) Construir una función que sume los elementos de una lista de enteros recursivamente.
4) Construir una función imprimeInverso que imprima los elementos de una lista enlazada
de enteros en orden inverso a partir de una posición p.
5) Crear una estructura que almacene datos de una canción en formato MP3: Artista,
Título, Duración (en segundos), Tamaño del fichero (en KB). El programa debe pedir los
datos de una canción al usuario, almacenarlos en dicha estructura y después mostrarlos
en pantalla.
6) Crear un programa que pida el nombre, el apellido y la edad de una persona, los
almacene en un “struct” y luego muestre los tres datos en una misma línea, separados
por comas.
7) Crear un programa que pida datos de 2 personas: nombre, día de nacimiento, mes de
nacimiento, y año de nacimiento (que se deben almacenar en una tabla de structs).
Después deberá repetir lo siguiente: preguntar un número de mes y mostrar en pantalla
los datos de las personas que cumplan los años durante ese mes. Terminará de repetirse
cuando se teclee 0 como número de mes.
33