Skip to content
This repository has been archived by the owner on Aug 9, 2024. It is now read-only.

Commit

Permalink
Implementar Impresion como Pila de la pila
Browse files Browse the repository at this point in the history
  • Loading branch information
Laifsyn committed May 21, 2024
1 parent 233e9b7 commit 28540f4
Showing 1 changed file with 156 additions and 11 deletions.
167 changes: 156 additions & 11 deletions src/main/java/com/utp/clsEstructuraDatos/Estructuras/Pila.java
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,26 @@
import java.util.ArrayList;

public class Pila<T> {
public static void main(String[] args) {
Pila<Integer> pila = new Pila<>(5);
pila.insertar(1);
pila.insertar(2);
pila.insertar(3);
pila.insertar(4);
pila.insertar(5);
System.out.println("Cima: " + pila.getCima());
System.out.println(pila.imprimirPila());
pila.quitarCima();
System.out.println("Quitar cima");
System.out.println(pila.imprimirPila());
pila.insertar(6);
System.out.println("Insertar 6");
System.out.println(pila.imprimirPila());
pila.limpiarPila();
System.out.println("Limpiar pila");
System.out.println(pila.imprimirPila());
}

private int cima = 0;
private final int capacidad;
private ArrayList<T> inner;
Expand Down Expand Up @@ -55,19 +75,53 @@ public boolean pilaLLena() {
return this.cima == this.capacidad;
}

// public String impresion_sencilla() {
// StringBuilder sb = new StringBuilder();
// Integer index_width = 0;
// int cima = this.cima;
// while (cima > 0) {
// cima /= 10;
// index_width++;
// }
// String encabezado_indice = "Indice";
// String encabezado_valores = "Valores";

// if (encabezado_indice.length() > index_width) {
// index_width = encabezado_indice.length();
// }
// int cell_width = encabezado_valores.length();
// for (T cell : this.inner) {
// int cell_length = cell.toString().length();
// if (cell_length > cell_width) {
// cell_width = cell_length;
// }
// }

// String encabezado = String.format("| %" + index_width + "s | %" + cell_width
// + "s |\n", encabezado_indice,
// encabezado_valores);
// sb.append(encabezado);
// sb.append(String.format("├%" + (encabezado.length() - 3) + "s┤\n",
// "").replace(" ", "─"));
// for (int i = 1; i <= this.cima; i++) {
// String cell = this.inner.get(i - 1).toString();
// sb.append(String.format("| %" + index_width + "s | ", i));
// sb.append(String.format("%" + cell_width + "s |", cell));
// sb.append("\n");
// }
// return sb.toString();
// }

public String imprimirPila() {
StringBuilder sb = new StringBuilder();
int width = 0;
int cima = this.cima;
while ((cima /= 10) > 0) {
width++;
}
for (int i = 0; i < this.cima; i++) {
sb.append(String.format("| %0" + width + "s | ", i));
sb.append(this.inner.get(i).toString());
sb.append("\n");
// Imprimimos de cima a base de la pila.
DrawTable tabla = new DrawTable();

for (int indice = this.cima; indice > 0; indice--) {
tabla.insertar_fila(new String[] { String.valueOf(indice), this.inner.get(indice - 1).toString() });
}
return sb.toString();

tabla.insertar_fila(new String[] { "Indice", "Valores" });
return tabla.toString();
}

public int getCima() {
Expand All @@ -79,3 +133,94 @@ public int getCapacidad() {
}

}

class DrawTable {
private int cantidad_columnas = 0;
private ArrayList<String[]> table;

public DrawTable() {
this.table = new ArrayList<>();
}

public void insertar_fila(String[] row) {
if (this.cantidad_columnas == 0) {
this.cantidad_columnas = row.length;
}
// Todas las filas tienen que tener la misma cantidad columna
if (this.cantidad_columnas != row.length) {
throw new IllegalArgumentException("La fila no tiene la misma cantidad de columnas que las anteriores");
}
this.table.add(row);
}

public String toString() {
StringBuilder sb = new StringBuilder();
// Guardo la posicion de los vertices de la tabla.
Integer[] columns_widths = new Integer[this.cantidad_columnas];

// Obtener los vertices de la tabla
for (int indice_columna = 0; indice_columna < this.cantidad_columnas; indice_columna++) {
int ancho_columna = 0;
for (String[] fila : this.table) {
String celda = fila[indice_columna];
if (celda.length() > ancho_columna) {
// +1 para el caracter que encierra la celda
ancho_columna = celda.length() + 1;
columns_widths[indice_columna] = ancho_columna;
}
}
}

StringBuilder borde_superior = new StringBuilder("┌");
StringBuilder separador_fila = new StringBuilder("├");
StringBuilder borde_inferior = new StringBuilder("└");
// Construimos los separadores
for (int indice_columna = 0; indice_columna < this.cantidad_columnas; indice_columna++) {
int padding = columns_widths[indice_columna];
// El ultimo caracter se encierra con algo distinto.

borde_superior.append(String.format("%" + padding + "s", "┬").replace(" ", "─"));
separador_fila.append(String.format("%" + padding + "s", "┼").replace(" ", "─"));
borde_inferior.append(String.format("%" + padding + "s", "┴").replace(" ", "─"));
if (indice_columna == this.cantidad_columnas - 1) {
borde_superior.setLength(borde_superior.length() - 1);
separador_fila.setLength(separador_fila.length() - 1);
borde_inferior.setLength(borde_inferior.length() - 1);
}
}
borde_superior.append("┐\n");
separador_fila.append("┤\n");
borde_inferior.append("┘\n");

sb.append(borde_superior);
char barra_vertical = '│';
// Usamos Vanilla For para poder insertar separador de fila despues del
// encabezado
for (int indice_fila = 0; indice_fila < this.table.size(); indice_fila++) {
sb.append(barra_vertical);
for (int indice_columna = 0; indice_columna < this.cantidad_columnas; indice_columna++) {
String celda = this.table.get(indice_fila)[indice_columna];
int padding = columns_widths[indice_columna];
sb.append(String.format("%" + padding + "s", celda + barra_vertical));
}
sb.append("\n");
if (indice_fila == this.table.size() - 2) {
sb.append(separador_fila);
}
}
sb.append(borde_inferior);
return sb.toString();
}

public static void main(String[] args) {

String[][] mi_tabla = new String[][] { { "Hola mundo", "asdfa", "Nostradamus" },
{ "1", "23jgadsdsavghgh", "3" },
{ "4", "5", "6" } };
DrawTable table = new DrawTable();
for (String[] fila : mi_tabla)
table.insertar_fila(fila);
System.out.println(table.toString());
System.exit(0);
}
}

0 comments on commit 28540f4

Please sign in to comment.