En el último tutorial, echamos un vistazo a algunos algoritmos de programación comunesUn complemento de estos algoritmos es un conjunto de estructuras de datos comunes. Los algoritmos de programación necesitan trabajar con datos y esos datos a menudo están contenidos en formatos o estructuras de datos específicos. Ahora es un buen momento para aprender más sobre estas estructuras de datos comunes que se utilizan al crear varios algoritmos. El propósito de las estructuras de datos es organizar la información de manera que sea fácil de operar mediante algoritmos. Es posible que tenga una lista de seguimiento de acciones y es posible que desee poder clasificarlas por rendimiento de dividendos o Relación P / E. Otro ejemplo sería una estructura de árbol que representa una colección de carpetas y archivos donde desea encontrar un archivo específico dentro de todas esas carpetas. Cada escenario tiene datos asociados con una estructura de datos diferente. Las estructuras de datos más comunes en las que debe estar bien versado son matrices, listas enlazadas, pilas, colas, árboles y tablas hash. Las diferentes aplicaciones necesitarán diferentes tipos de estructuras de datos para contener la información con la que los algoritmos necesitan trabajar. En este tutorial, exploraremos estos temas más a fondo.


Matrices

Una matriz es un grupo de elementos donde la posición de cada elemento se identifica mediante un índice o un valor clave. Una matriz unidimensional es el tipo más básico de matriz, y el diagrama siguiente muestra cómo se vería.

Matriz unidimensional

Las posiciones de los elementos se pueden calcular utilizando una expresión matemática que permite acceder directamente a los elementos de la matriz en un enfoque de acceso aleatorio. Lo que esto significa es que dado que la posición de cada elemento se puede calcular directamente, no hay necesidad de navegar o atravesar la estructura de datos para acceder a un elemento. El primer elemento de índice de una matriz siempre está en la posición 0. Aquí hay un ejemplo de una matriz unidimensional simple en Python.

3
6
9
12
15

Accediendo a todos los demás elementos de la matriz

3
9
15

Accediendo a un elemento directamente

15

Las matrices pueden tener varias dimensiones. Para crear una matriz bidimensional, la primera dimensión puede contener matrices. Para acceder a un elemento en una matriz bidimensional, debe proporcionar dos índices. A continuación se muestra un diagrama de una matriz bidimensional con un índice de 2,1 resaltado.

Matriz multidimensional

En Python, es probable que use más comúnmente la estructura de datos de lista, que es un tipo de datos similar a una matriz. Tanto la lista como la matriz en Python se comportan de manera similar, ya que puede iterar sobre ellos y almacenar elementos en un índice específico. La diferencia entre los dos está en las funciones que puede realizar en ellos. Es más trabajo usar matrices verdaderas en Python porque tiene que importar el módulo de matriz y declarar una matriz. Las listas son simplemente una parte de la sintaxis de Python, por lo que se usan con mucha más frecuencia y cubren la mayoría de los casos de uso que necesitará. Los arreglos verdaderos serán mejores para funciones matemáticas así como para trabajar con grandes cantidades de datos. La mayoría de las veces, simplemente puede ir con Listas. Aquí hay algunos ejemplos de algunas listas en Python.


Listas vinculadas

La estructura de datos de la lista vinculada es una colección lineal de elementos de datos que a menudo se denominan nodos. Son similares a las matrices, sin embargo, cada uno de los nodos tiene un campo que apunta al siguiente elemento de la lista, a diferencia de una matriz. Hay listas de enlaces simples y listas de enlaces dobles. Aquí hay un par de diagramas que muestran esto.


Lista vinculada única

El primer elemento de una lista vinculada se llama encabezado. Cada elemento contiene un campo que apunta al siguiente elemento de la lista. El último elemento de una lista vinculada apunta a nulo, lo que significa que es el final de la lista.
lista enlazada única


Lista vinculada doble

En una lista de doble enlace, cada elemento de datos tiene una referencia tanto al elemento anterior como al siguiente.
lista de doble enlace

Lista enlazada en Python (enlace único)

Aquí hay una implementación de una lista vinculada en Python. Utiliza dos clases. Uno para representar los nodos de la lista y otro para representar la propia lista enlazada. La Nodeclase implementa el tipo de nodo que se almacenará en la lista vinculada. Tiene un solo nextcampo, lo que indica que se trata de una lista enlazada individualmente. La LinkedListclase tiene campos para el headasí como un countcampo que realiza un seguimiento de cuántos nodos hay en la lista.

Inicializar una lista vinculada y almacenar algunos valores

Nodo: 15
Nodo: 12
Nodo: 9
Nodo: 6
Nodo: 3

Imprimir el recuento de la lista vinculada

Número de elementos en la lista: 5

Encuentra dos objetos de nodo en la lista vinculada

Buscando elemento: <__ main __. Objeto de nodo en 0x03512FD0>
Buscando elemento: <__ main __. Objeto de nodo en 0x03538028>

Eliminar un nodo en una lista vinculada

Número de elementos en la lista: 4
Buscando elemento: <__ main __. Objeto de nodo en 0x031A8058>
Nodo: 15
Nodo: 12
Nodo: 9
Nodo: 3

Estructura de datos de pila

La estructura de datos de la pila es una colección de elementos que tiene dos operaciones básicas, push y pop. Las pilas son estructuras de datos LIFO, o las últimas en entrar, primero en salir. El último elemento que se coloca en una pila es el primero que aparece. Un ejemplo de pila es cuando usa el botón Atrás en su navegador. Mientras navega por Internet, el navegador agrega cada enlace a una pila para mantener el orden en que fueron visitados. Cuando hace clic en el botón Atrás, la URL agregada más recientemente se extrae de la pila y luego se vuelve a visitar.

Estructura de datos de pila en Python

Puede obtener las características de trabajar con una estructura de datos de pila en Python haciendo uso de una lista.

Inicializar una pila

Empujar (agregar) elementos a la pila

Imprime la pila

['Tom', 'Dick', 'Harry', 'Bosch']

Saca un artículo de la pila

Bosch
['Tom', 'Dick', 'Harry']

Apilar como clase

También puede hacer algo como lo siguiente, que usa una clase definida por el usuario para ofrecer funcionalidad de pila. Esto sigue siendo solo un envoltorio para usar el tipo de lista, pero ahora tiene un método push () real que puede usar.

Pila inicial: [0, 1, 2, 3, 4]
pop (): 4
Después de pop (), la pila ahora es: [0, 1, 2, 3]
Después de presionar (7), la pila ahora es: [0, 1, 2, 3, 7]
El tamaño es: 5

Estructura de datos de la cola

La estructura de datos de la cola también admite la adición y eliminación de elementos, pero utiliza el método FIFO. FIFO es un enfoque de primero en entrar, primero en salir. Una cola vacía a la que se le agrega un elemento, sería el primer elemento de la lista. Hacer cola en más elementos simplemente aumenta la longitud de la lista. Las colas son muy comunes en la programación, ya que imitan gran parte de lo que sucede en la vida real. ¿Ha estado alguna vez en el departamento de vehículos de motor? Entonces sabes muy bien qué es una cola. Camina hasta el final de la línea (cola), espera una gran cantidad de tiempo (procesamiento de la cola) y finalmente obtiene servicio una vez que todos los demás frente a usted han sido atendidos. En software, el procesamiento de mensajes es un uso común de una cola.

Estructura de datos de cola en Python

Inicializar una cola vacía

Agregar algunos elementos a la cola

Imprime la cola

deque (['Lunes', 'Martes', 'Miércoles', 'Jueves', 'Viernes'])

Sacar el artículo de la cola

lunes
deque (['martes', 'miércoles', 'jueves', 'viernes'])

Estructura de datos de la tabla hash

Una tabla hash es básicamente una matriz asociativa. Muchos otros lenguajes de programación tienen matrices asociativas y Python tiene su implementación de esta estructura de datos a través de diccionariosEsta estructura de datos asigna claves a valores, utilizando una función hash. Una función hash usa la clave para calcular un índice para las ranuras y asigna la clave a un valor. La capacidad de asignar de forma única una clave determinada a un valor específico es un gran beneficio de las tablas hash. Esto hace que trabajar con contadores y filtros sea rápido y sencillo. Las tablas hash también son bastante rápidas, lo que las hace buenas para grandes conjuntos de datos. Las tablas hash no ordenan sus elementos de ninguna manera específica, por lo que necesitaría agregar un mecanismo de clasificación si es necesario.

Estructura de datos de la tabla hash en Python

Inicializar una nueva tabla hash

{'firstkey': 1, 'secondkey': 2, 'thirdkey': 'tres'}

Crea una segunda tabla hash con iteración

{'firstkey': 1, 'secondkey': 2, 'thirdkey': 3}

Reemplazar un elemento en una tabla hash

{'firstkey': 1, 'secondkey': 'dos', 'thirdkey': 3}

Iterar sobre la tabla hash para imprimir pares clave-valor

clave: primer valor de clave: 1
clave: segundo valor clave: dos
clave: tercer valor de clave: 3


Resumen de estructuras de datos de Python

  • Las matrices de Python verdaderas son un contenedor de las matrices de C y son buenas para trabajar con elementos del mismo tipo. No son tan fáciles de usar como las listas.
  • Las listas son un estilo más flexible de una matriz que puede contener una combinación de cualquier tipo de datos. Si necesita reducir y hacer crecer su lista sin problemas, son la mejor opción.
  • Es posible que se prefieran las listas vinculadas a las matrices, ya que son más fáciles y rápidas de reorganizar. Este artículo explica por qué querría utilizar una lista vinculada.
  • Las pilas crecen hacia la derecha y se encogen hacia la izquierda y son buenas para las operaciones de último en entrar, primero en salir.
  • Las colas utilizan el enfoque Primero en entrar, primero en salir y son buenas para mensajería, registro y otras aplicaciones.
  • Las tablas hash se implementan en Python mediante diccionarios y son una forma de matriz asociativa con pares clave-valor distintos.