elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Security Series.XSS. [Cross Site Scripting]


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  Problemas con eliminar en pilas
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Problemas con eliminar en pilas  (Leído 2,577 veces)
suncry

Desconectado Desconectado

Mensajes: 2


Ver Perfil
Problemas con eliminar en pilas
« en: 22 Junio 2017, 09:46 am »

Chicos soy nuevo en el grupo y no se si pueda poner este problema en esta sección pero necesito ayuda X_x, alguien podria decirme como eliminar un elemento de pila segun su posicion?, es decir en un lado aparece la posicion 1-2-3-4-5 y en el otro los numeros que estan alli, de momento ni tengo ni idea de como comenzar esa funcion y de momento solo tengo esto T_T

#include <iostream>
#include <stdlib.h>
#include <conio.h>
using namespace std;
struct Nodo {
   int Numero;
   Nodo *sgt;
};

int acu = 0;
int i ;

void INP(Nodo *&, int  );   //INP = Insertar numeros a la pila
void VNP(Nodo *);         //VNP = Ver numeros de la pila
void BNP(Nodo *&, int &);   //BNP = Borrar numeros de la pila 

int main (){
   Nodo *pila = NULL;
   int  Num , op ,Numero;
   int i = 0;
   while (op != 4){
      system("cls");
      cout << "1 - Ingrese datos a la pila" << endl;
      cout << "2 - Ver el listado de los datos en la pila " << endl;
      cout << "3 - Eliminar un numero en la pila (Seleccione la posicion a eliminar) " << endl;
      cout << "4 - Salir del programa" << endl;
      cin >> op;
      switch (op){
         case 1 :
            system("cls");
            cout << "ingrese un numero a la pila "  << endl;
            cin  >> Num;
            INP(pila,Num);
            acu = acu+1;
         break;
      
         case 2:
            system("cls");
            VNP(pila);
            getch();
         
         break;
   
         case 3:
            system("cls");
            cout << "Ingrese la posicion a eliminar" << endl;
            cin >> Num;
            BNP(pila,Num);
            getch();
          break;
       
          case 4:
          break;
      
         default:
         break;
      }
   }
}

void INP(Nodo *&pila, int dato ){ 
   Nodo *NN = new Nodo();   // la doble N significa nuevo nodo
   NN->Numero = dato;
   NN->sgt = pila;
   pila = NN;
   cout <<"\nEl numero " << dato << " ha sido registrado en la pila " << endl;
   getch();
}

void VNP(Nodo *pila){
   int aux,i = 0;
   cout << "Posicion  " << "       Numero registrado" << endl;
   while (pila != NULL){
      cout << "     "  << i+0;
      cout << "                    "<< pila->Numero << endl;
      pila = pila   ->sgt;
      i++;
   }
}


En línea

Serapis
Colaborador
***
Desconectado Desconectado

Mensajes: 3.351


Ver Perfil
Re: Problemas con eliminar en pilas
« Respuesta #1 en: 22 Junio 2017, 22:19 pm »

Cuando usas una pila programada por otro, sólo tienes disponible (habitualmente) los métodos Push y Pop... Entonces el unico modo de eliminar un elemento es llegar hasta él.

Operando con los datos que dices tener:
Código:
a.Push(1)
a.Push(2)
a.Push(3)
a.Push(4)
a.Push(5)
Ahora necesitas eliminar el elemento 3, que además tiene ese mismo valor (sin consideraciones de elemento 0, por simpliificar)...

1º - Se pasan a otra pila los que estén encima:
Código:
b.push (a.pop) //5
b.Push(a-Pop) //4

2º - Se extrae el elemento que queríamos (hemos excavado hasta llegar a él, ahora está en la superficie, el pico ahora golpea en él)
Código:
a.Pop //3

3º Meter de nuevo los que estaban encima:
Código:
a.Push(b.Pop)  //4
a.Push(b.pop) //5

Ahora bien, cuando la pila la diseña uno mismo, ya provee un método interno para agilizar esto... La solución depende en realidad de la estructura usada para realizar la pila...
Supongamos que fuera un array que es algo simple.

Código:
(privada) Funcion Delete(entero index)
    Recorrer desde index hasta ItemsEnPila-1
        Array(index) = Array(index +1)
    Siguiente
    ItemsEnPila -=1
    // Ojo, no se verifica en este ejemplo si index está en el rango... queda a tu esfuerzo.
Fin Funcion
Como ves todo lo que hemos hecho es bajar una posición todos los que tiene encima. ni siquera necesitamos borrar el último elemento, toda vez que Pop, sacará el último disponible y un Push sobrescribiría ese último valor.

Fijate que en una pila incluso eliminar x elemento del final o vacíar la pila, se limita a ajusta el valor de la propiedad ItemsEnPila, para vaciarla se pone a 0 y listo...


« Última modificación: 22 Junio 2017, 22:21 pm por NEBIRE » En línea

suncry

Desconectado Desconectado

Mensajes: 2


Ver Perfil
Re: Problemas con eliminar en pilas
« Respuesta #2 en: 23 Junio 2017, 09:53 am »

la verdad andaba perdido muy bien en como hacerlo, pero gracias a esa logica que aplicaste logre aplicarsela a mi ejercicio y resulto bien haha, gracias tio!!
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
[Python] Problemas para eliminar carpetas
Scripting
jadtiger 3 3,837 Último mensaje 10 Enero 2013, 00:00 am
por The_Mushrr00m
Mas problemas :( filtrar o eliminar registros iguales « 1 2 3 »
.NET (C#, VB.NET, ASP)
luis456 25 12,274 Último mensaje 26 Marzo 2016, 09:59 am
por luis456
problemas al eliminar filas de una tabla en javascript
Desarrollo Web
evilsoft 3 6,561 Último mensaje 4 Junio 2017, 07:26 am
por LaThortilla (Effort)
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines