Arreglos

Una exploración sobre los arreglos en lenguaje C y su uso como estructuras de datos, así como ventajas y desventajas.

¿Qué son los arreglos?

Los arreglos son la estructura no primitiva (es decir que no es un dato) más básica que existe, su configuración es una representación de datos de un mismo tipo contiguos (uno en la posición inmediatamente siguiente al otro) en la memoria RAM. Podemos identificar los componentes de un arreglo como:

Dirección.
Es decir la posición dentro de la RAM en la que se está alojado el arreglo, sin importar el número de datos, siempre deberemos tener en consideración la ubicación del primer dato.
Tipo.
Este nos indicará el espacio que ocupará cada dato del arreglo en memoria, siendo el mínimo estandarizado de 8 bits, es decir 1 byte.
Tamaño.
Necesitamos saber con cuantos elementos cuenta nuestro arreglo para poder saber en donde inicia y termina, es necesario para evitar cualquier tipo de desbordamiento, en este caso out bounding, es decir salir de los límites.
Identificador.
Nos permite referenciar a nuestro arreglo dentro de nuestros programas. Debemos recordar que tanto este como el tamaño y el tipo, al momento de compilar "dejan de existir", pues terminan sirviendo simplemente como interpretaciones a tomar en cuenta y el identificador es remplazado por la dirección asignada al arreglo (no reservado en ejecución).

Representación de memoria RAM.
Figura 1: Representación de un arreglo dentro de la memoria RAM.

Implementación.

Dentro de lenguaje C, la estructura a seguir para la definición de un arreglo consta de lo siguiente:
tipo identificador[ tamaño ] = { ...datos };
Bajo las siguientes consideraciones:


Podemos ver la implementación de ellos en lenguaje C.

int main() {
	// Definición de un arreglo de 5 números enteros de 32 bits.
	int numeros[5] = { 1, 2, 3, 4, 5 };

	//Definición de un arreglo de 10 caracteres.
	char caracteres[] = { 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L' };

	// Definición de un arreglo de 10 reales de 64 bits.
	float reales[10];

	return 0;
}
C

Para acceder a la información o modificarla necesitamos hacer uso del operador [], con el nos posicionamos en el "offset" (desplazamiento relativo al origen del arreglo) deseado y podemos modificar o extraer el dato.

Eficiencia.

Los arreglos como estructura de datos tienen grandes ventajas y desventajas, entre las ventajas tenemos:


Pero por otro lado:

Tipo de consultaEficiencia temporalRazón
InserciónO(n)Debe reservar el nuevo espacio necesario y mover todos los datos.
BúsquedaO(n)En el peor de los casos debe recorrer todo el arreglo para encontrar la coincidencia.
EliminaciónO(n)Debe extraer el dato y mover a los huecos el resto de datos.
ConsultaO(1)Está indexado, así que es muy rápido acceder a un dato concreto.
Tabla 1: Comparación de eficiencia temporal de las diferentes consultas a una estructura de datos.

Conclusión.

Por su fácil implementación y concepto, los arreglos son la estructura de datos por excelencia cuando inicias en el mundo de la programación, sin embargo saber cuales son sus limitaciones y aprender sobre otras que tengan características diferentes (mejores unas, peores otras) y sobre todo aplicarlas en el momento correcto, es una de las grandes habilidades que debe tener un desarrollador..

Vídeo 1: Introducción a los arreglos.
Vídeo 2: Arreglos como estructuras de datos.