Compartir tecnología

[Estructura de datos] Tabla de secuencia

2024-07-12

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina


Insertar descripción de la imagen aquí

mesa lineal

queremos hablartabla de secuenciaPrimero tenemos que hablar de tablas lineales, porque las tablas secuenciales son un tipo de tablas lineales.

Definición de tabla lineal

Como sugiere el nombre, una tabla lineal es una tabla que organiza datos como líneas.
Se puede entender pensando en hacer cola en la realidad.

Características de las mesas lineales:

  • Existe un orden entre los elementos de datos de una tabla lineal.
  • Excepto el primer elemento y el último elemento, cada elemento tiene un predecesor y un sucesor.

tabla de secuencia

La tabla de secuencia usa un párrafo.Las direcciones físicas son consecutivas.Las unidades de almacenamiento son como personas haciendo fila una al lado de la otra.
Una estructura lineal que almacena elementos de datos en secuencia, generalmente usandoformaciónalmacenamiento.
Complete la adición, eliminación, verificación y modificación de datos en la matriz.
Cómo se ve la tabla de secuencia

Implementación de la interfaz de la tabla de secuencia.

Implemente una tabla de secuencia usted mismo (almacenamiento de datos de tipo int), use la tabla de secuencia como una clase, implementamos algunas interfaces, es decir, algunasmétodo miembroRealizar la alta, supresión, comprobación y modificación de datos.

public class SeqList {
     private int[] elem;
     private int usedSize;
     // 默认构造方法
     SeqList(){   }
     // 将顺序表的底层容量设置为initcapacity
     SeqList(int initcapacity){   }
     // 新增元素,默认在数组最后新增
     public void add(int data) { }
     // 在 pos 位置新增元素
     public void add(int pos, int data) { }
     // 判定是否包含某个元素
     public boolean contains(int toFind) { return true; }
     // 查找某个元素对应的位置
     public int indexOf(int toFind) { return -1; }
     // 获取 pos 位置的元素
     public int get(int pos) { return -1; }
     // 给 pos 位置的元素设为 value
     public void set(int pos, int value) {   }
     //删除第一次出现的关键字key
     public void remove(int toRemove) {   }
     // 获取顺序表长度
     public int size() { return 0; }
     // 清空顺序表
     public void clear() {   }
     
 }
  • 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

Constructor predeterminado

De forma predeterminada, inicialmente abrimos 10 espacios de datos.

private static final int DEFAULT_SIZE = 10;
    public SeqList() {
        this.elem= new int[DEFAULT_SIZE];
    }
  • 1
  • 2
  • 3
  • 4

Establezca la capacidad subyacente de la tabla de secuencia en initcapacity

Pase la longitud de la matriz y use la longitud de la matriz para abrir espacio.

private static final int DEFAULT_SIZE = 10;
    public SeqList(int initcapacity) {
        this.elem= new int[initcapacity];
    }
  • 1
  • 2
  • 3
  • 4

enchufe de cola

Los nuevos elementos se agregan al final de la matriz de forma predeterminada.
Puntos a considerar:

  • Compruebe si la tabla de secuencia actual está llena. Si está llena, agregue espacio.
  • Se agrega un elemento y el tamaño usado se incrementa en 1.
 public void add(int data) {
        if(isFull()){
            elem = Arrays.copyOf(elem,elem.length * 2);
        }
        elem[usedSize++] = data;
    }
     /**
     * 判断当前的顺序表是不是满的!
     *
     * @return true:满   false代表空
     */
    private boolean isFull() {
        return usedSize == elem.length;
    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

Agregar elemento en la posición pos

Insertar elemento en el subíndice pos.
Precauciones:

  • Compruebe si la tabla de secuencia actual está llena. Si está llena, agregue espacio.
  • ¿Es legal la posición dada? De lo contrario, se lanzará una excepción.
  • Utilice un bucle de atrás hacia adelante para mover los elementos después de la posición pos hacia atrás.
  • Se agrega un elemento y el tamaño usado se incrementa en 1.
private boolean checkPosInAdd(int pos) throws PosIllegalException{

        if(pos < 0 || pos > usedSize){
            throw new PosIllegalException("位置不合法");
        }
        return true;
    }

    // 在 pos 位置新增元素
    public void add(int pos, int data) {
        try{
            if(checkPosInAdd(pos)){
                if(isFull()){
                    elem = Arrays.copyOf(elem,elem.length * 2);
                }
                for (int i = usedSize; i > pos ; i--) {
                    elem[i] = elem[i-1];
                }
                elem[pos] = data;
                usedSize++;
            }
        }catch(PosIllegalException e){
            e.printStackTrace();
        }

    }
  • 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

Determinar si un elemento está contenido

Vea si los datos dados están incluidos en la tabla de secuencia.
Simplemente recorralo directamente, devuelva verdadero si lo encuentra y devuelva falso si no lo encuentra.

public boolean contains(int toFind) {
        for (int i = 0; i < usedSize; i++) {
            if(elem[i] == toFind){
                return true;
            }
        }
        return false;
    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

Encuentra la posición correspondiente a un elemento.

Mire el índice de los datos dados en esta tabla de secuencia.
Simplemente recorra directamente y busque el subíndice de retorno sin devolver -1.

public int indexOf(int toFind) {
        for (int i = 0; i < usedSize; i++) {
            if(elem[i] == toFind){
                return i;
            }
        }
        return -1;
    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

Obtener el elemento en la posición pos.

Salida del elemento en la posición pos.
Precauciones:

  • Compruebe si pos es legal
public int get(int pos) {
        try{
            if(checkPosInAdd(pos)){
                return elem[pos];
            }
        }catch(PosIllegalException e){
            e.printStackTrace();
        }
        return 0;
    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

Establecer el elemento en la posición pos al valor

Modifique el elemento de posición pos.
Precauciones:

  • Compruebe si pos es legal.
public void set(int pos, int value) {
        try{
            if(checkPosInAdd(pos)){
                elem[pos] = value;
            }
        }catch(PosIllegalException e){
            e.printStackTrace();
        }
    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

Eliminar la primera aparición de la clave de palabra clave

Elimine la primera aparición de la clave.
Precauciones:

  • Recorre la búsqueda.
  • Utilice los elementos después de la clave encontrada para cubrirlos uno por uno hacia el frente.
  • El tamaño usado disminuye en 1.
public void remove(int key) {
        for (int i = 0; i < usedSize; i++) {
            if(elem[i] == key){
                for (int j = i; j < usedSize - 1; j++) {
                    elem[j] = elem[j + 1];
                }
                usedSize--;
            }
        }
    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

Obtener la longitud de la tabla de secuencia

Obtener la longitud de la tabla de secuencia aquí se refiere a la cantidad de datos útiles, es decir, usedSize.

public int size() {
        return usedSize;
    }
  • 1
  • 2
  • 3

Borrar lista de secuencias

Establezca el contenido de la tabla de secuencia en vacío.
Precauciones:

  • Debido a que la tabla secuencial real almacena genéricos, los elementos se configuran en vacío cuando se recorren uno por uno. Se reemplazan configurándolos en 0 a continuación.
  • UsedSize también se establece en 0.
public void clear() {
        for (int i = 0; i < usedSize; i++) {
            elem[i] = 0;
        }
        usedSize = 0;
    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

Lista de matrices en Java

La clase ArrayList se proporciona en Java para representar una lista secuencial.

interfaz implementada

interfaz implementada

Descripción de la interfaz:

  1. La interfaz RandomAccess indica soporte para acceso aleatorio.
  2. La interfaz Cloneable indica compatibilidad con la clonación.
  3. La interfaz Serializable indica soporte para la serialización.

Método de construcción

Java proporciona 3 métodos de construcción como se muestra en la tabla:

métodoIntroducción al uso del método.
Lista de arreglo()Construcción sin argumentos
ArrayList(Colección<? extends E> C)Construya ArrayList usando otras colecciones
ArrayList(int CapacidadInicial)Especificar la capacidad inicial de la tabla de secuencia.

Métodos comunes

Los métodos comunes proporcionados son similares a los que implementamos anteriormente.
Métodos comunes

Ventajas y desventajas de las listas de secuencias

ventaja

Las ventajas de las tablas de secuencia son las siguientes:

  1. Se admite el acceso aleatorio.
  2. Consultar un subíndice determinado es rápido.

defecto

  1. Si no hay suficiente espacio, es necesario ampliarlo y se desperdiciará memoria.
  2. La inserción y eliminación en el encabezado y en el medio moverán los datos.

práctica

Los enlaces a los ejercicios se encuentran a continuación:
Triángulo de Yang Hui