-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathPilaNombres.java
188 lines (163 loc) · 4.75 KB
/
PilaNombres.java
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
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
/**
* @author: Raul Guadarrama (c) 2018
* @description:
* Programa que almacenará n cadenas de caracteres en una
* pila.
*
* La pila es una estructura de datos PEPS (Primeras Entradas | Primeras Salidas)
* Para ingresar un dato, se utiliza un método llamado Push
* Para eliminar un dato, se utiliza un método llamado Pop
*
* Contacto:
* -> mail: raul.guadarrama5102@gmail.com
*
*
* Si deseas saber más de mi, visita:
* * Github: github.com/RutilaXD
* * IG, FB, TW: @SoyRuloGM
*/
import java.util.Scanner;
public class PilaNombres {
/*
Las siguientes variables se declararon globales puesto que se usarán
en todo el programa.
-> nombres[] guardará las cadenas de caracteres
-> in es la variable que permitirá leer los datos inbgresados en el teclado
-> tam servirá para saber el tamaño del arreglo nombres[]
-> tope nos indicará el número de cadenas en la pila
*/
static String nombres[];
static Scanner in;
static int tam, tope;
/**
* Constructor
*/
public PilaNombres (){
tope = 0;
tam = 0;
}
/*
* Metodo para agregar datos
*/
public static void push(){
// Verificamos que la pila tenga espacio disponible
if(tope<=tam-1){
System.out.print("Ingresa el nombre: ");
/*
En caso de que la pila tenga más de un elemento,
al ingresar un nuevo dato, se tiene que mover a la
posición siguiente los demás elementos.
-> j es una variable que va a ayudar a saber la posición
anterior, para con ello, mover el elemento a la siguiente
posición.
-> i es una variable que permitirá mover los elementos
de lugar, puesto que con ella se sabe la posición siguiente
a la cual mover los elementos en la pila
*/
if(tope != 0){
int j = 1;
for (int i = tope; i >= 1; i--) {
nombres[i] = nombres[tope-j];
j++;
}
}
//El nuevo dato siempre se añade al principio
nombres[0] = in.next();
//Como se aumenta el numero de elementos en la pila, se aumenta el tope
tope++;
System.out.println("Dato agregado!!");
}else{
System.out.println("Pila llena, ya no se pueden agregar mas datos");
}
}
/**
* Método que elimina datos de la pila
*/
public static void pop(){
//Verificamos si hay elementos para eliminar
if (tope > 0) {
/*
En esta sección se recorre todo el arreglo, pero si
sólo tiene un elemento, no tiene caso recorrerlo.
Por ello se evalua si el tope es mayor a uno.
*/
if (tope > 1) {
int i = 0;
//Recorre los elementos a la posición anterior.
for (i = 1; i < tope; i++) {
nombres[i-1] = nombres[i];
}
//Se elimina el último elemento
nombres[i-1] = null;
//Como hay un datos menos, se reduce el tope
tope--;
}else{
nombres[0] = null;
tope = 0;
}
System.out.println("Dato eliminado");
}else{
System.out.println("La pila esta vacia!!");
}
}
/*
* Regresa el tamaño de la pila
* Verificando primero si está vacía.
*/
public static void tamanio(){
if(tope==0) System.out.println("Pila vacia");
else System.out.println("Tiene "+tope+" Datos");
}
/*
* Imprime los elementos de la pila
*/
public static void imprimir(){
if (tope > 0) {
for (int i = 0; i < tope; i++) {
System.out.println((i+1)+".- "+nombres[i]);
}
}else{
System.out.println("No hay elementos para imprimir!!");
}
}
/*
* Programa principal.
*
* Se utilizará un menú para poder realizar operaciónes push y pop en la pila
* cuantas veces el usuario lo requiera, para ello se utilizan las siguientes variables
*
* -> opc: para inidicar al programa qué operación hacer con la pila
* -> seguir: para preguntar al usuario si desea permanecer en el programa
*
* Se utiliza un arreglo, el cual, por definición, ya tiene un tamaño establecido,
* por este motivo se pregunta al usuario, al inicio del programa, que indique cuántos
* elementos agregará.
*/
public static void main(String[] args) {
int opc = 0;
in = new Scanner(System.in);
char seguir = 's';
System.out.print("Ingresa cuantos nombres guardaras: ");
tam = in.nextInt();
nombres = new String[tam];
do {
System.out.println("Que accion quieres hacer?");
System.out.println("\t1. Push\n\t2. Pop");
System.out.println("\t3. Comprobar tamanio\n\t4. Imprimir Pila");
opc = in.nextInt();
switch (opc) {
case 1: push();
break;
case 2: pop();
break;
case 3: tamanio();
break;
case 4: imprimir();
break;
}
System.out.print("Seguir? s/n ");
seguir = in.next().charAt(0);
}while(seguir=='s' || seguir=='S');
System.out.println("Nos vemos pronto! ;)");
}
}