1 matriz dispersa
- La llamada matriz dispersa es cuando la mayoría de los valores de contenido de la matriz no se utilizan (o son todos cero) y solo se utiliza una pequeña parte del espacio de la matriz. Esto da como resultado una pérdida de espacio de memoria.Para ahorrar espacio de memoria y no afectar los valores de contenido originales en la matriz, podemos usar matrices dispersas para comprimir datos.
1.1 Escenarios de aplicación de arreglos dispersos
1.2 Introducción básica a arreglos dispersos
- Cuando la mayoría de los elementos en una matriz son 0, o el mismo valor, puede usar una matriz dispersa para almacenar la matriz
- Cómo lidiar con arreglos dispersos
- La matriz de registros tiene un total de varias filas y columnas, y cuántos valores diferentes hay
- Reduzca el tamaño del programa grabando las filas y columnas de elementos con diferentes valores en una pequeña matriz
1.3 Aplicaciones de arreglos dispersos
- Convierta una matriz 2D en una matriz dispersa
- Atraviese la matriz bidimensional original para conocer el número total de datos válidos
- Cree una matriz dispersa basada en la cantidad de datos válidos [matriz válida + 1]
- Almacene datos válidos en una matriz 2D en una matriz dispersa
- Escriba una matriz dispersa en el disco a través de IO
- Convierta una matriz dispersa en una matriz bidimensional original
- Lea la matriz dispersa del disco y cree la matriz bidimensional original de acuerdo con los datos en la primera fila como se muestra arriba int [15] [15]
- Lea las pocas líneas de datos restantes en la matriz dispersa y asígnelas a una matriz bidimensional
1.4 Implementación de código de matriz dispersa
1.4.1 Crear una matriz bidimensional y asignar valores iniciales
public static int[][] twoDimensionalGoBang() {
int goBang[][] = new int[15][15];
goBang[3][3] = 1;
goBang[4][4] = 2;
return goBang;
}
复制代码
1.4.2 Convierta la matriz bidimensional original en una matriz dispersa
public static int[][] twoDimensionalToSparse() {
int[][] goBang = twoDimensionalGoBang();
int valid = 0;
for (int i = 0; i < goBang.length; i++) {
for (int j = 0; j < goBang.length; j++) {
if (goBang[i][j] != 0) {
valid++;
}
}
}
int[][] sparse = new int[valid + 1][valid + 1];
sparse[0][0] = goBang.length;
sparse[0][1] = goBang.length;
sparse[0][2] = valid;
int count = 0;
for (int i = 0; i < goBang.length; i++) {
for (int j = 0; j < goBang.length; j++) {
if (goBang[i][j] != 0) {
count++;
sparse[count][0] = i;
sparse[count][1] = j;
sparse[count][2] = goBang[i][j];
}
}
}
return sparse;
}
复制代码
1.4.3 Convertir una matriz dispersa en una matriz bidimensional original
public static void main(String[] args) {
int[][] sparse = twoDimensionalToSparse();
int[][] two = new int[sparse[0][0]][sparse[0][1]];
for (int i = 1; i < sparse.length; i++) {
two[sparse[i][0]][sparse[i][1]] = sparse[i][2];
}
traverse(two);
}
复制代码
1.4.4 Recorriendo una matriz bidimensional
public static void traverse(int[][] array) {
for (int[] row : array) {
for (int data : row) {
System.out.printf("%d\t", data);
}
System.out.println();
}
}
复制代码
2 colas
- Una cola es un tipo especial de tabla lineal. La característica especial es que solo permite operaciones de eliminación en la parte delantera de la tabla y operaciones de inserción en la parte posterior de la tabla. Al igual que las pilas, las colas son una operación sujeta a restricciones de la tabla lineal. El extremo que realiza la operación de inserción se denomina cola de la cola, y el extremo que realiza la operación de eliminación se denomina cabeza de la cola.
2.1 Escenarios de aplicación de colas
- Por ejemplo: se consideran colas los depósitos y retiros bancarios, las llamadas al hospital, etc.
2.2 Introducción básica a las colas
- Una cola es una lista ordenada, que se puede implementar usando una matriz o una lista enlazada
- Siga el principio de primero en entrar, primero en salir, es decir, los datos almacenados en la cola primero deben sacarse primero, y los datos almacenados después se sacarán.
2.3 Implementación de simulación de cola unidireccional
2.3.1 Usando una matriz para simular una cola
public class ArrayImitateQueue {
private int maxSize;
private int front;
private int rear;
private int[] arr;
public ArrayImitateQueue(int maxSize) {
this.maxSize = maxSize;
arr = new int[maxSize];
front = -1;
rear = -1;
}
public boolean isFull() {
return rear == maxSize - 1;
}
public boolean isEmpty() {
return rear == front;
}
public void addQueue(int num) {
if (isFull()) {
System.err.println("队列已满不能添加数据");
return;
}
rear++;
arr[rear] = num;
}
public int getQueue() {
if (isEmpty()) {
throw new RuntimeException("ERROR:index out of bounds");
}
front++;
return arr[front];
}
public void showQueue() {
if (isEmpty()) {
System.err.println("Queue is Null~");
return;
}
for (int i : arr) {
System.out.println(i);
}
}
public int getFirstQueue() {
if (isEmpty()) {
throw new RuntimeException("ERROR:index out of bounds");
}
return arr[front + 1];
}
}
复制代码
2.3.2 Uso de una lista enlazada para simular una cola
public class ChainImitateQueue<T> {
private Node first;
private Node last;
private int n;
public void addQueue(T item) {
Node oldLast = last;
last = new Node();
last.item = item;
last.next = null;
if (isEmpty()) {
first = last;
} else {
oldLast.next = last;
}
n++;
}
public T removeQueue() {
if (isEmpty()) {
throw new RuntimeException("ERROR: There is no more data in the queue to delete");
}
T item = first.item;
first = first.next;
n--;
return item;
}
public boolean isEmpty() {
return n == 0 ? true : false;
}
public int size() {
return n;
}
class Node {
Node next;
T item;
}
public static void main(String[] args) {
ChainImitateQueue<Integer> queue = new ChainImitateQueue<>();
queue.addQueue(10);
queue.addQueue(100);
System.out.println(queue.size());
System.out.println(queue.removeQueue());
System.out.println(queue.removeQueue());
System.out.println(queue.size());
System.out.println(queue.removeQueue());
}
}
复制代码
2.4 Implementación de simulación de cola circular