Definición de pila
El último en entrar, el primero en salir, el primero en entrar, el último en salir, es una tabla lineal con operaciones limitadas, que permite que solo un extremo inserte y elimine datos. La mayoría de las escenas que usan la pila pueden ser reemplazadas por matrices o listas enlazadas, pero las matrices y listas enlazadas exponen demasiadas interfaces de operación, que parecen ser muy flexibles, pero los riesgos correspondientes han aumentado y se vuelven más incontrolables.
Pila de volumen constante
Es decir, el tamaño de una pila se especifica cuando se crea.
Crea una pila de volumen constante
Paradigma no utilizado
package com.pjh.Stack;
public class FixedCapacityStack {
/*定义一个数组*/
private String[] a;
/*定义一个大小*/
private int N;
/*有参构造方法*/
public FixedCapacityStack(int n) {
a=new String[n];
}
/*判断数组是否为空*/
public boolean isEmpty(){
return N==0;
}
/*返回数组的大小*/
private int size(){
return N;
}
/*出栈*/
public String pop(){
return a[--N];
}
/*入栈*/
public void push(String item){
a[N++]=item;
}
}
Usar paradigma
Nota: No está permitido crear una matriz genérica debido a algunas razones históricas y técnicas.
Código de implementación
package com.pjh.Stack;
public class FixedCapacityStack2<Item> {
/*定义一个数组*/
private Item a[];
/*定义一个大小*/
private int N;
/*有参构造方法*/
public FixedCapacityStack2(int n) {
a=(Item[]) new Object[n];
}
/*判断数组是否为空*/
public boolean isEmpty(){
return N==0;
}
/*返回数组的大小*/
private int size(){
return N;
}
/*出栈*/
public Item pop(){
return a[--N];
}
/*入栈*/
public void push(Item item){
a[N++]=item;
}
}
Optimización de código
Pregunta 1
Resumen del problema
Elegir una matriz para indicar que el contenido de la pila debe preestimar la capacidad máxima de la pila. En Java, el tamaño de la matriz no se puede cambiar una vez que se crea, por lo que el espacio utilizado por la pila solo puede ser una parte de esta capacidad máxima. Los casos de uso con gran capacidad desperdiciarán mucha memoria cuando la pila esté vacía o casi vacía Por ejemplo, un sistema de transacciones puede involucrar miles de millones de transacciones y una colección de miles de transacciones. Aunque este sistema generalmente limita cada transacción para que aparezca en un solo conjunto, el caso de uso debe garantizar que todos los conjuntos tengan la capacidad de almacenar todas las transacciones. Por otro lado, si el conjunto se vuelve más grande que la matriz, el caso de uso puede desbordarse . Por lo tanto, necesitamos un método para detectar si la pila está llena y un método para expandir la pila. Esta es en realidad la idea de una matriz dinámica.
solución
El método isFull () determina si la pila está llena
/*判满方法,只供内部方法调用*/
private void isFull(){
/*如果满了则调用数组扩容方法,扩容的倍数可以根据实际的需要调节*/
if (N==a.length){
resize();
}
}
método de expansión resize ()
private void resize(){
int newCapacity= (int) (a.length * 2);
int lastCapacity=a.length;
Item[] newArray = (Item[]) new Object[newCapacity];
for (int i = 0; i < lastCapacity; i++)
newArray[i]=a[i];
/*将a数组的首地址指向newArray数组*/
a=newArray;
}
Pregunta 2
Resumen del problema 2
Si extraemos una gran cantidad de datos durante el uso, pero el espacio de la matriz anterior es muy grande, también debemos reducir dinámicamente la capacidad de la pila para maximizar el uso de la memoria
solución
Al llamar a la función pop () pop, primero eliminamos el elemento en la parte superior de la pila, y luego, si la matriz es demasiado grande, reduciremos a la mitad la longitud de la matriz
Escenarios de uso de la pila
Tomemos como ejemplo el navegador que usamos habitualmente. Cuando hacemos clic en varias páginas web en la misma página, a menudo usamos los botones de avance y retroceso del navegador para volver a la página abierta anterior y a la siguiente página abierta.
Por ejemplo, hemos abierto en la página unificada.
taobao.com
jd.com
tx.com
Cuando hacemos clic en la flecha izquierda, regresamos a jd.com
Cuando volvemos a hacer clic en la flecha derecha, volvemos a taobao.com
Esta operación se puede lograr utilizando el diagrama de pila
**
Cuando hacemos clic en la flecha izquierda, regresamos a jd.com
Cuando volvemos a hacer clic en la flecha derecha, volvemos a taobao.com
Los escenarios de aplicaciones similares también tienen la función de deshacer y recuperar del software