JP_GUIA DE PRÁCTICA_S8
CURSO ESTRUCTURA DE DATOS
CARRERA Ingeniería de Sistemas Computacionales
DOCENTE Ing. Genrry Alcántara V.
OBJETIVO • Repaso.
EJERCICIOS 01:
En CinePlanet se requiere vender entradas de lo cual para poder acelerar el
proceso y optimizar ganancias se pide al área de TI que genere un aplicativo de
listas (Pilas) teniendo los siguientes requerimientos:
a) Ingresar Alimentos de la pila.
b) Generar búsquedas de elementos de la pila por cada entrada.
c) Generar una modificación por dicha entrada.
d) Eliminar un nodo de la lista de entrada.
e) Desplegar una pila de entrada.
f) Eliminar la lista de las filas por completo.
g) Generar una salida final cuenta.
/////////////////////////////// NODO /////////////////////////////
class Nodo
{
//Estructura del nodo
private int dato;
private Nodo siguiente;
//Encapsulamiento - Propiedades de las variables
public int Dato
{
get { return dato; }
set { dato = value;}
}
public Nodo Siguiente
{
get { return siguiente;}
set { siguiente = value; }
}
}
/////////////////////////////// LISTA /////////////////////////////
class Pila
{
private Nodo Primero = new Nodo();
//Constructor
public Pila()
{
Primero = null;
}
//DEfinir métodos
//Insertar nodo
public void InsertarNodo()
{
//Construir el nodo - Objeto
Nodo Nuevo = new Nodo();
//Ingresar dato al nodo
Console.Write("Ingrese el dato para el nodo: ");
Nuevo.Dato = int.Parse(Console.ReadLine());
//20/10/15/80
Nuevo.Siguiente = Primero;
Primero = Nuevo;
Console.WriteLine("Nodo ingresado");
}
//Método para desplegar/imprimir la pila
public void DesplegarPila()
{
//Instanciar al nodo
Nodo Actual = new Nodo();
Actual = Primero; //Cima de la pila - 80
//Verificar si la pila está vacía
if (Primero != null)//80
{
//Imprimir los datos de los nodos de la pila
while (Actual != null)//80/15//10/20
{
Console.WriteLine(" " + Actual.Dato); //80-15-
10-20
Actual = Actual.Siguiente; //15-10-20-null
}
}
else
{
Console.WriteLine("Pila vacia");
}
}
public void BuscarNodo()
{
Nodo Actual = new Nodo();
Actual = Primero; //Cima de la pila -80
//Variable de control
bool Encontrado = false;
//Ingresar nodo a buscar
Console.Write("Ingrese nodo a buscar : ");
int nodoBuscado = int.Parse(Console.ReadLine()); //15
//Validar que la pila este vacia
if (Primero != null) //80
{
while (Actual != null && Encontrado != true) //80
y false --> V//15 y false --> V // 20 y true --> F
{
if (Actual.Dato == nodoBuscado) //80 = 15 -->
F // 15 = 15 --> V
{
Console.WriteLine("El nodo con el dato
({0}) Encontrado ", nodoBuscado); //15
Encontrado = true; // false --> true
}
Actual = Actual.Siguiente; //80 --> 15 -- > 20
}
if (!Encontrado) // negación true = false
{
Console.WriteLine("Nodo no encontrado");
}
}
else
{
Console.WriteLine("Pila vacia");
}
}
public void ModificarNodo()
{
Nodo Actual = new Nodo();
Actual = Primero;
bool Encontrado = false;
Console.WriteLine("Ingrese elemento a
modificar:");
int nodoBuscado = int.Parse(Console.ReadLine());
if (Primero != null)
{
while (Actual != null && Encontrado != true)
{
if (Actual.Dato == nodoBuscado)
{
Console.WriteLine("El nodo con el dato
({0}) Encontrado ", nodoBuscado);
Console.Write("Ingrese el nuevo valor ");
Actual.Dato =
int.Parse(Console.ReadLine());
Console.Write("Nodo modificado");
Encontrado = true;
}
Actual = Actual.Siguiente;
}
if (!Encontrado)
{
Console.WriteLine("Nodo no encontrado");
}
}
else
{
Console.WriteLine("Pila vacia");
}
}
public void EliminarNodo()
{
Nodo Actual = new Nodo();
Actual = Primero;
Nodo Anterior = new Nodo();
Anterior = null;
bool Encontrado = false;
Console.WriteLine("Ingrese dato a eliminar : ");
int nodoBuscado = int.Parse(Console.ReadLine());
if(Primero != null)
{
while (Actual != null && Encontrado != true)
{
if (Actual.Dato == nodoBuscado)
{
Console.WriteLine("Nodo encontrado ({0})
", nodoBuscado);
if(Actual == Primero)
{
Primero =
Primero.Siguiente;
}
else
{
Anterior.Siguiente = Actual.Siguiente;
}
Console.WriteLine("Nodo eliminado");
Encontrado = true;
}
Anterior = Actual;
Actual = Actual.Siguiente;
}
if (!Encontrado){
Console.WriteLine("Nodo no encontrado");
}
}
else
{
Console.WriteLine("Pila Vacia");
}
}
public void EliminarPila()
{
Primero = null;
}
}
//////////////////////// PRINCIPAL////////////////////////////////
namespace S05_Pilas
{
class Program
{
static void Main(string[] args)
{
//Instanciar la clase Pila
Pila P = new Pila();
//Definir variable de opción
int opcionMenu;
do
{
Console.WriteLine("Menú Pilas con
listas enlazadas");
Console.WriteLine(" 1.- Insertar elemento");
Console.WriteLine(" 2.- Buscar elemento");
Console.WriteLine(" 3.- Modificar elemento");
Console.WriteLine(" 4.- Eliminar Nodo de pila");
Console.WriteLine(" 5.- Desplegar Pila");
Console.WriteLine(" 6.- Eliminar Pila");
Console.WriteLine(" 7.- Salir");
Console.Write(" Ingrese su opción : ");
opcionMenu = int.Parse(Console.ReadLine());
switch (opcionMenu)
{
case 1:
Console.WriteLine("INSERTAR NODO EN LA
PILA");
P.InsertarNodo();
break;
case 2:
Console.WriteLine("BUSCAR NODO EN LA
PILA");
P.BuscarNodo();
break;
case 3:
Console.WriteLine("MODIFICAR NODO EN LA
PILA");
P.ModificarNodo();
break;
case 4:
Console.WriteLine("ELIMINAR NODO EN LA
PILA");
P.EliminarNodo();
break;
case 5:
Console.WriteLine("IMPRIMIR PILA");
P.DesplegarPila();
break;
case 6:
Console.WriteLine("ELIMINAR PILA");
P.EliminarPila();
break;
case 7:
Console.WriteLine("FINALIZAR PROGRAMA");
break;
default:
Console.WriteLine("ERROR, LA OPCION NO ES
VALIDA. INTENTE DE NUEVO");
break;
}
Console.ReadKey();
Console.Clear();
}
while (opcionMenu != 7);
}
}
}
EJERCICIOS 02:
Se requiere la presentación de ventas de un salón de belleza con 8 clientes (código,
nombre, apellidos y precio) con el promedio en general, utilizando la estructura de pila
se requiere lo siguiente:
A. Apilar clientes en la presentación de ventas.
B. Mostrar el reporte de ventas (detalle de cada cliente y el promedio de ventas
obtenido).
EJERCICIOS 03:
En un almacén se necesita registrar el ingreso de los productos (código, tipo, nombre,
cantidad y precio) y realizar lo siguiente:
A. Apilar productos al almacén.
B. Mostrar un reporte que contenga la cantidad total de productos agrupados por
tipo (Oficina, utilitarios, juegos) con su valor respectivo en soles (cantidad x
precio) y mostrar el valor total del almacén.