Java - Eliminar elemento en cualquier lugar de una pila (Sin clase Stack).

   
Vista:

Eliminar elemento en cualquier lugar de una pila (Sin clase Stack).

Publicado por Camilo Fonseca (1 intervención) el 20/10/2015 01:54:32
Hola! estoy estancado con una tarea de pilas en java y quería saber si alguno puede colaborarme, tengo 2 clases, un constructor:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
public class Nodo {
	int codigo;
	 String nombre;
	 double sueldo;
	 Nodo next;
 
	 public Nodo(int codigo, String nombre, double sueldo){
		 this.codigo = codigo;
		 this.nombre = nombre;
		 this.sueldo = sueldo;
		 this.next = null;
		 }
 
	 public int getCodigo() {
		 return codigo;
		 }
 
	 public void setCodigo(int codigo) {
		 this.codigo = codigo;
		 }
 
	 public Nodo getNext() {
		 return next;
		 }
 
	 public String getNombre() {
		 return nombre;
		 }
 
	 public void setNombre(String nombre) {
		 this.nombre = nombre;
		 }
 
	 public double getSueldo() {
		 return sueldo;
		 }
 
	 public void setSueldo(int sueldo) {
		 this.sueldo = sueldo;
		 }
 
	 public void setNext(Nodo next) {
		 this.next = next;
		 }
 
	 public String toString(){
		 String s=codigo+" "+nombre+" "+sueldo;
		 return s;
		 }
	 }

Y una clase que manipula y muestra los datos, llamada pila:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
import java.util.Scanner;
 
public class Pila {
	private Nodo cima;
	private Nodo p;
 
	public Pila(){
		this.cima=null;
		}
 
	public Nodo getCima() {
		return cima;
		}
 
	public void setCima(Nodo cima) {
		this.cima = cima;
		}
 
	public static void main(String args[ ])throws Exception {
	Scanner teclado=new Scanner(System.in);
	String num;
	Pila ps = new Pila();
	int opc;
 
	do {
		System.out.println("\n"+"Menu principal:"+"\n");
		System.out.println("1. Ingresar dato a la Pila");
		System.out.println("2. Eliminar dato en la pila");
		System.out.println("3. Eliminar dato especifico de la pila");
		System.out.println("4. Imprimir datos de la pila");
		System.out.println("5. Salir");
		System.out.print("\n"+"Digite una Opción: ");
 
		num = teclado.next();
		opc=Integer.parseInt(num);
 
		switch (opc) {
		case 1:ps.apilar();
		break;
		case 2:try{ps.eliminar();}
		catch (Exception e){
			System.out.print("La pila esta vacia."+"\n");
		}
		break;
		case 3:try{ps.eliminardato();}
		catch (Exception e){
			System.out.print("La pila esta vacia."+"\n");
		}
		break;
		case 4:ps.imprimir_datos();
		break;
		case 5:System.exit(0);
		break;
		default:System.exit(0);
		break;
		}
		}while(opc!=5);
		}
 
	void apilar() {
		 Scanner teclado=new Scanner(System.in);
		 int dato;
		 String aux;
		 double su;
		 System.out.print("\n"+"Digite codigo: ");
		 dato = Integer.parseInt(teclado.next());
		 System.out.print("Digite nombre: ");
		 aux = teclado.next();
		 System.out.print("Digite sueldo: ");
		 su = Double.parseDouble(teclado.next());
		 p = new Nodo(dato, aux, su);
		 p.setNext(this.cima);
		 this.cima = p;
		 }
 
	void eliminar() {
		int dato=cima.getCodigo();
		String aux=cima.getNombre();
		double su=cima.getSueldo();
		this.cima=cima.getNext();
		}
 
	void eliminardato() {
		Scanner teclado=new Scanner(System.in);
		int dato_c;
		System.out.print("\n"+"Digite el codigo del usuario a eliminar: ");
		dato_c= Integer.parseInt(teclado.next());
 
		if(dato_c==cima.getCodigo()){
			eliminar();
			System.out.print("\n"+"Los datos del usuario han sido eliminados."+"\n");
		}
		if(dato_c!=cima.getCodigo()){
 
 
			System.out.print("\n"+"Los datos del usuario han sido eliminados."+"\n");
		}
	}
 
	void imprimir_datos() {
		String salida="";
		Nodo q=this.cima;
		while(q!=null){
			salida=salida+q.toString()+"\n";
			q=q.getNext();
			}
		System.out.print(salida);
		}
	}

El problema esta justo en la parte de eliminar un dato en especifico, tengo el metodo para eliminar el primer dato, o la cima hablando de pilas, pero piden ahora eliminar uno que puede estar en cualquier posicion segun el codigo.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
void eliminardato() {
		Scanner teclado=new Scanner(System.in);
		int dato_c;
		System.out.print("\n"+"Digite el codigo del usuario a eliminar: ");
		dato_c= Integer.parseInt(teclado.next());
 
		if(dato_c==cima.getCodigo()){
			eliminar();
			System.out.print("\n"+"Los datos del usuario han sido eliminados."+"\n");
		}
		if(dato_c!=cima.getCodigo()){
 
 
			System.out.print("\n"+"Los datos del usuario han sido eliminados."+"\n");
		}
	}

Si alguien puede orientarme seria genial, no puedo usar mas que este código. Lo que intente fue cambiar el orden segun el codigo y mandarlo a la cima, pero no lo logre...
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder