Array: el estacionamiento numerado de la memoria
Primer artículo técnico de la saga sobre estructuras de datos: el array como memoria ordenada, acceso por índice y base fundamental del software.

Lic. Carlos Enrique Loria Beeche.

Primer artículo técnico de la saga “Estructuras de datos: cuando la memoria se convierte en inteligencia”

Este artículo forma parte de la saga que inicié con Estructuras de datos: cuando la memoria se convierte en inteligencia, donde presenté las ocho estructuras de datos fundamentales que iremos recorriendo paso a paso.

En aquella primera entrega quise abrir la puerta desde una memoria personal: el curso de Lenguaje de Máquinas, la IBM System/360 Model 40, la instrucción BALR 14,15, el recuerdo del profesor Adolfo Di Mare Hering, el libro de Shan S. Kuo y la gratitud hacia quienes hicieron posible mi formación.

Ahora empezamos la parte más técnica de la saga.

La primera estructura que vamos a estudiar es el array, también llamado arreglo. Es una de las estructuras de datos más sencillas de entender, pero también una de las más importantes. Muchas otras estructuras, directa o indirectamente, se apoyan en la idea básica de guardar elementos en posiciones ordenadas.

Un array nos enseña una idea fundamental: cuando la información está bien ordenada y numerada, encontrar un dato puede ser casi instantáneo.

¿Qué es un array?

Un array es una estructura de datos que guarda varios elementos en una secuencia ordenada. Cada elemento ocupa una posición, y cada posición se identifica mediante un número llamado índice.

La analogía del estacionamiento ayuda mucho. Imaginemos un estacionamiento con espacios numerados. Si sabemos que el carro que buscamos está en el espacio 4, no tenemos que revisar todos los espacios anteriores. Vamos directamente al espacio 4.

Eso mismo ocurre con un array. Si conocemos el índice, podemos acceder directamente al dato.

Índices: la clave del acceso directo

En muchos lenguajes de programación, los arrays empiezan a contar desde cero. Esto significa que el primer elemento está en la posición 0, no en la posición 1.

Por ejemplo, si tenemos este arreglo:

Índice:   0   1   2   3   4
Valor:   A   B   C   D   E

El elemento en el índice 0 es A. El elemento en el índice 3 es D. El elemento en el índice 4 es E.

Esta capacidad de ir directamente a una posición es la gran fortaleza del array.

El índice convierte una posición en una dirección lógica. Por eso el array es tan rápido cuando sabemos exactamente qué elemento queremos consultar.

Memoria contigua

En su forma clásica, especialmente en lenguajes como C y C++, un array guarda sus elementos en posiciones contiguas de memoria. Es decir, un elemento queda colocado después del otro.

Esto permite que la computadora calcule rápidamente dónde está cada elemento. Si sabe dónde empieza el array, y sabe el tamaño de cada elemento, puede calcular la dirección de cualquier posición usando una fórmula muy sencilla.

dirección del elemento = dirección inicial + (índice * tamaño del elemento)

Esta es la razón técnica detrás del acceso rápido por índice.

En lenguajes modernos, algunas estructuras se comportan como arrays dinámicos aunque internamente tengan detalles adicionales. Por ejemplo, en Python una lista no es exactamente igual a un array clásico de C o C++, pero sí permite acceso por índice y funciona, en muchos casos, como una estructura secuencial dinámica.

Ventaja principal: acceso rápido

La mayor ventaja del array es el acceso directo.

Si quiero consultar el elemento número 100, puedo pedir directamente el índice 100. No necesito recorrer los 99 elementos anteriores.

En análisis de algoritmos, esta operación suele considerarse de tiempo constante:

Acceso por índice: O(1)

Eso significa que acceder a un elemento por su índice toma, en condiciones normales, un tiempo prácticamente constante, sin importar si el array tiene 10, 1.000 o 1.000.000 de elementos.

Limitación: insertar o borrar en medio puede ser costoso

Pero no todo es ventaja. El array también tiene limitaciones.

Si queremos insertar un elemento en medio del array, posiblemente tengamos que mover otros elementos para abrir espacio.

Por ejemplo:

A   B   C   D   E

Si queremos insertar una X entre B y C, los elementos C, D y E deben desplazarse hacia la derecha:

A   B   X   C   D   E

Ese movimiento tiene un costo. Mientras más grande sea el array, más elementos podrían tener que moverse.

Inserción o eliminación en medio: O(n)

En otras palabras: el array es excelente para acceder rápidamente a posiciones conocidas, pero no siempre es ideal cuando necesitamos insertar o eliminar elementos constantemente en el centro de la colección.

Operaciones básicas de un array

OperaciónDescripciónCosto típico
Acceder por índiceLeer un elemento conociendo su posiciónO(1)
Modificar por índiceCambiar el valor de una posición conocidaO(1)
RecorrerVisitar todos los elementosO(n)
Buscar sin ordenEncontrar un valor revisando uno por unoO(n)
Insertar en medioAgregar un elemento desplazando otrosO(n)
Eliminar en medioQuitar un elemento y reacomodarO(n)

Ejemplo en C++

En C++, podemos declarar un array clásico de tamaño fijo:

#include <iostream>
using namespace std;

int main() {
    int numeros[5] = {10, 20, 30, 40, 50};

    cout << "Elemento en índice 0: " << numeros[0] << endl;
    cout << "Elemento en índice 3: " << numeros[3] << endl;

    numeros[2] = 99;

    cout << "Después de modificar el índice 2:" << endl;

    for (int i = 0; i < 5; i++) {
        cout << numeros[i] << endl;
    }

    return 0;
}

En este ejemplo, el array tiene cinco elementos. Podemos acceder directamente a cualquier posición usando su índice.

Ejemplo en C#

En C#, los arrays también permiten acceso directo por índice:

using System;

class Program
{
    static void Main()
    {
        int[] numeros = { 10, 20, 30, 40, 50 };

        Console.WriteLine("Elemento en índice 0: " + numeros[0]);
        Console.WriteLine("Elemento en índice 3: " + numeros[3]);

        numeros[2] = 99;

        Console.WriteLine("Después de modificar el índice 2:");

        for (int i = 0; i < numeros.Length; i++)
        {
            Console.WriteLine(numeros[i]);
        }
    }
}

En C#, el array tiene una propiedad llamada Length, que indica cuántos elementos contiene.

Ejemplo en Python

En Python usamos normalmente listas. Técnicamente, una lista de Python no es idéntica a un array clásico de C o C++, pero para este nivel introductorio se puede entender como una estructura secuencial con acceso por índice.

numeros = [10, 20, 30, 40, 50]

print("Elemento en índice 0:", numeros[0])
print("Elemento en índice 3:", numeros[3])

numeros[2] = 99

print("Después de modificar el índice 2:")

for numero in numeros:
    print(numero)

Python permite trabajar con listas de forma muy flexible. Se pueden agregar, quitar y modificar elementos con facilidad. Sin embargo, internamente sigue existiendo una idea importante: los elementos están organizados en una secuencia y se accede a ellos mediante índices.

¿Cuándo conviene usar un array?

Un array conviene cuando:

  • Necesitamos acceder rápidamente a elementos por posición.
  • Sabemos de antemano cuántos elementos vamos a manejar, o el tamaño no cambia mucho.
  • Queremos recorrer una colección de forma ordenada.
  • Trabajamos con datos homogéneos, como números, códigos, precios, mediciones o posiciones.
  • Necesitamos una estructura simple, eficiente y fácil de entender.

En cambio, si necesitamos insertar y eliminar elementos constantemente en medio de la colección, tal vez convenga estudiar otras estructuras, como las listas enlazadas.

Aplicaciones reales

Los arrays aparecen en muchísimas situaciones:

  • Listas de precios.
  • Notas de estudiantes.
  • Registros ordenados.
  • Vectores matemáticos.
  • Matrices.
  • Buffers de memoria.
  • Tablas internas.
  • Procesamiento de imágenes.
  • Datos de sensores.
  • Resultados de consultas.

Cuando una imagen digital se representa como una matriz de píxeles, allí hay una idea cercana a los arrays. Cuando una aplicación guarda una lista ordenada de elementos y permite acceder a una posición específica, allí también aparece esta estructura.

La lección del array

El array parece sencillo, pero enseña una de las ideas más importantes de la programación: la forma en que organizamos los datos determina la forma en que podemos usarlos.

Si los datos están ordenados en posiciones consecutivas y conocemos el índice, podemos acceder a ellos muy rápido. Pero si queremos insertar o borrar en medio, ese mismo orden puede obligarnos a mover elementos.

Así empezamos a comprender que ninguna estructura de datos es perfecta para todo. Cada una ofrece ventajas y costos. Elegir bien consiste en entender el problema antes de escoger la herramienta.

El array nos recuerda que la memoria ordenada puede convertirse en velocidad. Pero también nos enseña que toda forma de orden tiene un costo.

Próxima entrega

En el próximo artículo de esta saga estudiaremos la linked list, o lista enlazada. Allí veremos una estrategia muy distinta: en lugar de depender de posiciones consecutivas, cada elemento conocerá el camino hacia el siguiente.

Pasaremos del estacionamiento numerado a la búsqueda del tesoro.


Referencias para profundizar

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *