Hola ante todo que tenga un buen dia. Tengo una duda del cual no puedo salir, ando intentandolo y no me resulta.
el problema es: Como modifico un dato que se encuentra dentro de una Pila, claro la pila fue llanado anteriormente por numeros aleatorios.
Random r = new Random();
int n, i, a;
n = 20;
for (i = 1; i <= n; i++)
{
a = r.Next(1, 100);
pilaPrincipal.Push(a);
Console.WriteLine(a);
}
Console.WriteLine();
Console.Write("Ingrese un numero: ");
int b = int.Parse(Console.ReadLine());
int palabra;
for (byte x = 1; x < 20; x++)
{
palabra = (int)pilaPrincipal.Pop();
if (pilaPrincipal.Contains(b))
{
palabra = 0;
}
Console.WriteLine(palabra);
}
Console.Read();
como muestra en el codigo quiero buscar un dato y si se encuentra que lo cambie por el 0 en las posiciones que se encuentra, Por ejemplo cuando busco el numero 2 todos los 2 que se encuentren en la Pila se cambien por 0, no me resulta y no se como hacerlo espero me ayuden de antemano gracias.
Cual es el problema con lo que planteas? Que con pop estas extrayendo el elemento de la pila, por lo que lo más sencillo para hacerlo de manera lineal es sacar todos los datos y volverlos a poner modificados.
De cualquier modo mi sugerencia es revisar el planteo porque tu problema por sobre todo es de lógica
Saludos
Hola, si necesitaras la pila despues de modificar los valores, te recomendaria utilizar una pila auxiliar, aca te dejo un pseudo:
Pila p1 = LlenarAleatoriamente()
Pila pAux
While p1 no es vacia
x = p1.Pop()
If x es 2
x = 0
pAux.Push(x)
While pAux no es vacia
p1.Push(pAux.Pop())
En C# seria algo como:
Stack<int> p1 = new Stack<int>();
Stack<int> pAux = new Stack<int>();
while(p1.Count != 0){
int item = p1.Pop();
pAux.Push(item == 2? 0 : item);
}
// Para voltear la pila aux en la pila de origen
while(pAux.Count != 0)
p1.Push(pAux.Pop());
Saludos