Ocho estructuras de datos comunes

Ocho estructuras de datos comunes

La estructura de datos es una forma especial de organizar y almacenar datos, que nos permite realizar operaciones en los datos almacenados de manera más eficiente. Las estructuras de datos tienen una amplia gama de usos en los campos de la informática y la ingeniería de software.

Casi todos los programas o sistemas de software que se han desarrollado utilizan estructuras de datos. Además, las estructuras de datos pertenecen a la base de la informática y la ingeniería de software. Este es un tema clave cuando se trata de preguntas de entrevistas de ingeniería de software. Por lo tanto, si necesita usar habilidades de programación, debe tener un conocimiento completo de las estructuras de datos.

1. Matriz

Una matriz es una estructura de tamaño fijo que puede contener elementos del mismo tipo de datos. Puede ser una matriz de números enteros, una matriz de números de punto flotante, una matriz de cadenas o incluso una matriz de matrices (como una matriz bidimensional). La matriz está indexada, lo que significa que es posible el acceso aleatorio.

Fig 1. Visualización de la terminología básica de matrices

Operaciones de matriz

  • Atravesar: atraviesa todos los elementos e imprímelos.
  • Insertar: inserta uno o más elementos en la matriz.
  • Eliminar: elimina elementos de la matriz.
  • Buscar: busca elementos en la matriz. Puede buscar elementos por su valor o índice.
  • Actualizar: actualice el valor de un elemento existente en un índice determinado

Aplicación de matriz

  • Se utiliza como base para construir otras estructuras de datos, como listas de matrices, montones, tablas hash, vectores y matrices.
  • Se utiliza para diferentes algoritmos de clasificación, como clasificación por inserción, clasificación rápida, clasificación por burbujas y clasificación por combinación

2. Lista vinculada

Una lista vinculada es una estructura secuencial, que consta de una secuencia de elementos vinculados entre sí en un orden lineal. Por lo tanto, debe acceder a los datos de forma secuencial y no es posible el acceso aleatorio. La lista enlazada proporciona una representación sencilla y flexible del Dynaset.

Consideremos los siguientes términos relacionados con listas enlazadas. Puede hacerse una idea clara consultando la Figura 2:

  • Los elementos de la lista vinculada se denominan nodos.
  • Cada nodo contiene una clave y un puntero a su nodo sucesor (llamado siguiente).
  • El atributo denominado encabezado apunta al primer elemento de la lista vinculada.
  • El último elemento de la lista vinculada se llama cola.


Fig 2. Visualización de la terminología básica de listas enlazadas A
continuación, se muestran varios tipos de listas enlazadas disponibles:

  • Lista de cadena única: los elementos solo se pueden recorrer en la dirección de avance
  • Los elementos de lista de doble enlace se pueden recorrer hacia adelante y hacia atrás. El nodo consta de un puntero adicional llamado anterior, que apunta al nodo anterior.
  • Lista enlazada circular: lista enlazada, donde el puntero anterior de la cabeza apunta a la cola y el siguiente puntero del número de la cola apunta a la cabeza.

Operación de lista vinculada

  • Búsqueda: busque el primer elemento con la clave k en la lista vinculada dada mediante una búsqueda lineal simple y devuelva un puntero a ese elemento.
  • Insertar: inserta una clave en la lista vinculada. La inserción se puede hacer de 3 formas diferentes: insertar al principio de la lista, insertar al final de la lista y luego insertar en el medio de la lista.
  • Eliminar: elimina el elemento x de la lista vinculada dada. No puede eliminar nodos en un solo paso. La eliminación se puede realizar de 3 formas diferentes;
    • Eliminar del principio de la lista,
    • Eliminar del final de la lista,
    • Luego elimínelo del medio de la lista.

Aplicación de lista enlazada

  • Se utiliza para la gestión de tablas de símbolos en el diseño de compiladores.
  • Se usa para cambiar entre programas que usan Alt Tab (implementado usando una lista enlazada circular).

3. Apilar

La pila es una estructura LIFO (último en entrar, primero en salir, se puede acceder primero al último elemento colocado), que generalmente se encuentra en muchos lenguajes de programación. Esta estructura se denomina "pila" porque es similar a una pila del mundo real: una pila de tablas.

Operación de pila

A continuación se presentan dos operaciones básicas que se pueden realizar en la pila. Consulte la Figura 3 para comprender mejor el funcionamiento de la pila.

  • Empujar: inserta un elemento en la parte superior de la pila.
  • Pop: Elimina el elemento superior y vuelve.


Fig 3. Visualización de operaciones básicas de pilas

Además, se proporcionan las siguientes funciones adicionales para que la pila verifique su estado.

  • Peep: Devuelve el elemento superior de la pila sin eliminarlo.
  • isEmpty: comprueba si la pila está vacía.
  • isFull: comprueba si la pila está llena.

Aplicación de pila

  • Se utiliza para la evaluación de expresiones (por ejemplo: algoritmo de patio de maniobras para analizar y evaluar expresiones matemáticas).
  • Se utiliza para implementar llamadas a funciones en programación recursiva.

4. Cola

Una cola es una estructura FIFO (primero en entrar, primero en salir; primero se puede acceder al elemento colocado primero), que generalmente se encuentra en muchos lenguajes de programación. Esta estructura se llama "cola" porque es similar a una cola en el mundo real: la gente espera en una cola.

Operación en cola

A continuación se presentan dos operaciones básicas que se pueden realizar en la cola. Consulte la Figura 4 para comprender mejor el funcionamiento de la pila.

  • Avanzando: Inserta el elemento al final de la cola.
  • Dequeue: Elimina elementos del principio de la cola.


Fig 4. Visualización de operaciones básicas de colas

Aplicación de cola

  • Se utiliza para administrar subprocesos en varios subprocesos.
  • Se utiliza para implementar un sistema de cola (por ejemplo: cola de prioridad).

## 5. Tabla
hash Una tabla hash es una estructura de datos utilizada para almacenar valores que tienen una clave asociada con cada clave. Además, si conocemos la clave asociada con el valor, efectivamente admite búsquedas. Por lo tanto, independientemente del tamaño de los datos, la inserción y la búsqueda son muy efectivas.
Cuando se almacena en una tabla, el direccionamiento directo utiliza un mapeo uno a uno entre valores y claves. Sin embargo, cuando hay una gran cantidad de pares clave-valor, este método presenta problemas. La tabla tendrá muchos registros y es muy grande, considerando la memoria disponible en una computadora típica, la tabla puede ser poco práctica o incluso imposible de almacenar. Para evitar este problema, usamos una tabla hash.

Función hash

Se utiliza una función especial denominada función hash (h) para superar los problemas mencionados anteriormente en el direccionamiento directo.
En acceso directo, el valor con la tecla k se almacena en la ranura k. Usando una función hash, podemos calcular el índice de la tabla (ranura) al que apunta cada valor. El valor calculado mediante la función hash de una clave determinada se denomina valor hash, que representa el índice de la tabla a la que se asigna el valor.

  • h: función hash
  • k: la clave cuyo valor hash debe determinarse
  • m: el tamaño de la tabla hash (número de espacios disponibles). Un número primo que no se acerque a una potencia exacta de 2 es una buena opción para m.


Fig 5. Representación de una función hash
1 → 1 → 1
5 → 5 → 5
23 → 23 → 3
63 → 63 → 3
De los dos últimos ejemplos dados anteriormente, podemos ver que cuando la función hash es más Cuando dos claves generan el mismo índice, se producen conflictos. Podemos resolver conflictos eligiendo la función hash apropiada hy usando técnicas como vinculación y direccionamiento abierto.

Aplicación de la tabla hash

  • Se utiliza para implementar índices de bases de datos.
  • Se utiliza para implementar matrices asociativas.
  • Se utiliza para implementar la estructura de datos de "configuración".

6. Árbol

Un árbol es una estructura jerárquica en la que los datos se organizan jerárquicamente y se vinculan entre sí. Esta estructura es diferente de las listas enlazadas, donde los elementos están enlazados en un orden lineal.
En las últimas décadas, se han desarrollado varios tipos de árboles para adaptarse a ciertas aplicaciones y cumplir con ciertas restricciones. Algunos ejemplos son árboles de búsqueda binaria, árboles B, árboles rojo-negro, árboles expandidos, árboles AVL y árboles n-arios.

Árbol de búsqueda binaria

Como su nombre lo indica, un árbol de búsqueda binaria (BST) es un árbol binario en el que los datos se organizan en una estructura jerárquica. Esta estructura de datos almacena valores en orden ordenado, y estudiaremos estos valores en detalle en este curso.
Cada nodo del árbol de búsqueda binaria contiene los siguientes atributos:

  • clave: el valor almacenado en el nodo.
  • left: el puntero al niño izquierdo.
  • Derecha: puntero al niño correcto.
  • p: puntero al nodo principal.

El árbol de búsqueda binaria tiene propiedades únicas que pueden distinguirlo de otros árboles. Este atributo se denomina atributo de árbol de búsqueda binaria. Sea x un nodo en el árbol de búsqueda binaria:

  • Si y es un nodo en el subárbol izquierdo de x, entonces y.key≤x.key
  • Si y es un nodo en el subárbol derecho de x, entonces y.key≥x.key

    Fig 6. Visualización de la terminología básica de árboles.

Aplicación de árbol

  • Árbol binario: se utiliza para implementar el analizador de expresiones y el solucionador de expresiones.
  • Árbol de búsqueda binaria: se utiliza en muchas aplicaciones de búsqueda que ingresan y generan datos de manera continua.
  • Montón: utilizado por JVM (máquina virtual Java) para almacenar objetos Java.
  • Trampa: se utiliza para redes inalámbricas.

7. Montón

Heap es un caso especial de árbol binario, en el que los valores del nodo principal y sus nodos secundarios se comparan y organizan en consecuencia.
Veamos cómo representar el montón. El montón se puede representar mediante árboles y matrices. Las Figuras 7 y 8 muestran cómo usamos árboles y arreglos binarios para representar montones binarios.

Fig 7. Representación de árbol binario de un montón

Fig 8. Representación de matriz de un montón El
montón puede tener 2 tipos:

  • Montón mínimo: la clave del elemento principal es menor o igual que la clave del elemento secundario. Esto se denomina atributo min-heap. La raíz contendrá el valor mínimo del montón.
  • Número máximo de almacenamiento dinámico: la clave del elemento principal es mayor o igual que la clave del elemento secundario. Esto se denomina atributo max-heap. La raíz contendrá el valor máximo del montón.

### Montón de aplicaciones

  • Se utiliza para implementar colas de prioridad, porque los valores de prioridad se pueden ordenar según los atributos del montón.
  • Puede usar el montón para implementar la función de cola en tiempo O (log n).
  • Se usa para encontrar los k valores más pequeños (o más grandes) en una matriz dada.
  • Se utiliza para algoritmos de clasificación de montón.

8. Figura

Un gráfico consta de un conjunto limitado de vértices o nodos y un conjunto de aristas que conectan estos vértices.
El orden del gráfico es el número de vértices en el gráfico. El tamaño del gráfico es el número de aristas del gráfico.
Si dos nodos están conectados entre sí por el mismo borde, se denominan nodos adyacentes.
### Gráfica dirigida
Si todas las aristas de la gráfica G tienen direcciones que indican cuál es el vértice inicial y cuál es el vértice final, entonces la gráfica se llama gráfica dirigida.
Decimos que (u, v) entra o sale del vértice u desde el vértice u, y luego entra o entra en el vértice v.
Self-loop: el borde del vértice a sí mismo.
### Gráfica no dirigida
Si todas las aristas de la gráfica G no tienen dirección, se denomina gráfica no dirigida. Puede extenderse entre dos vértices de dos formas. Si un vértice no está conectado a ningún otro nodo del gráfico, se dice que está aislado.

Fig 9. Visualización de terminología de gráficos

Aplicación gráfica

  • Se utiliza para representar las redes sociales. Cada usuario es un vértice y se crea un borde cuando el usuario se conecta.
  • Se utiliza para representar páginas web y enlaces para motores de búsqueda. Las páginas web en Internet están vinculadas entre sí a través de hipervínculos. Cada página es un vértice y el hipervínculo entre dos páginas es un borde. Se utiliza para el ranking de páginas en Google.
  • Se usa para indicar ubicación y ruta en GPS. Las posiciones son vértices y las rutas que conectan las posiciones son bordes. Se utiliza para calcular la ruta más corta entre dos ubicaciones.

Supongo que te gusta

Origin blog.csdn.net/GodfatherTye/article/details/109081186
Recomendado
Clasificación