Estructuras de Datos: Arreglos

Las estructuras de datos son conjuntos de datos relacionados y organizados de alguna manera (la forma de organizarlos depende justamente de la estructura usada). Desde un punto de vista más formal, las estructuras de datos son tipos de datos (complejos), ya que determinan los valores que pueden contener y las operaciones que se les pueden aplicar. De acuerdo a cómo se administra la memoria para almacenar la información, las estructuras de datos se pueden clasificar en estáticas y dinámicas. Las estructuras estáticas ocupan una cantidad fija de memoria duran- te toda su vida. El tamaño queda establecido al momento de definir la estructura, es decir, cuando definimos una variable del tipo de la estructura de datos. Las estructuras dinámicas tienen un tamaño inicial, pero pueden crecer durante la ejecución, a medida que se incrementa la cantidad de datos que almacenan.

ARREGLOS

Los arreglos o vectores (Arrays) son estructuras de datos que permiten almacenar una colección de datos del mismo tipo, de manera que pueden ser accedidos en for- ma directa. Dicho de otra manera, los arreglos son una sucesión contigua de n da- tos (donde n es el tamaño del arreglo), cada uno con un índice determinado por la posición. Así, es posible acceder a un elemento del arreglo mediante su índice. Un arreglo tiene un único nombre, y éste abarca a todos los elementos que contiene.

Los elementos de un arreglo ocupan posiciones contiguas de memoria.

Normalmente, los arreglos son estructuras estáticas de datos, pero algunos len-guajes de programación permiten cambiarles el tamaño mientras se ejecutan.

Para entender la utilidad de los arreglos, pensemos que necesitamos almacenar el registro de lluvias de cada mes para una ciudad. Sin usar arreglos, deberíamos tener doce variables para contener el registro pluvial de los doce meses del año. Esta alternativa presenta algunas desventajas: es tediosa para programar, ya que hay que declarar cada una de las variables con un nombre diferente. Además, se hace imposible recorrerlas mediante una estructura de repetición. Por último, si queremos hacer que el usuario ingrese el número de mes y mostrar las lluvias de ese mes, deberíamos hacer un select case para mostrar la variable correspondiente al mes ingresado.

Si en cambio utilizamos un arreglo, tendremos los doce valores bajo un mismo nombre de variable y podremos acceder al registro pluvial del n-ésimo mes directamente leyendo el elemento del arreglo ubicado en la posición n. Supongamos que la variable se denomina lluvias; entonces, podemos escribir un algoritmo como el que sigue para mostrar el registro de lluvias de un mes seleccionado por el usuario:

// Pseudocódigo:
Procedimiento MostrarRegistroPluvial
      Leer un entero y guardarlo en la variable mes
      Mostrar el valor de lluvias[mes]

Aquí vemos una notación sintáctica que hasta ahora no habíamos visto: lluvias[mes]. Esta expresión significa: el dato que se encuentra en la posición mes dentro del arreglo (el valor que está dentro de los corchetes representa el índice al que se quiere acceder). En el ejemplo, hemos usado una variable como índice del arreglo, pero se puede usar también un valor constante, por ejemplo lluvias[2] para acceder a las lluvias de febrero.

EL PRIMER ELEMENTO
Cada lenguaje de programación tiene diferentes posturas a la hora de definir las dimensiones de un arreglo, como así también de definir cuál es el índice del primer elemento. Lenguajes como Delphi permiten definir los índices de un arreglo comenzando con cualquier número (por ejemplo, podemos indicar que los índices van del 50 al 100). Otros lenguajes permiten definir el tamaño del arreglo, y el primer elemento queda fijado por una convención de diseño. En .Net, todos los índices de arreglos y colecciones comienzan siempre en cero.

Arreglos en .Net
Obviamente, los lenguajes de .Net proveen soporte para la creación y uso de arreglos. En C#, los arreglos son estáticos, mientras que, en Visual Basic .Net, pueden ser dinámicos. En ambos lenguajes, los arreglos se definen declarando su tamaño y el tipo de los elementos. El primer índice es siempre el cero.

// C# - Defino un arreglo de 2 enteros
int[] arreglo = new int[2];
arreglo[0] = 1;
arreglo[1] = 20;

‘ VB.Net – Defino un arreglo de 2 enteros
Dim arreglo(2) as Integer
Arreglo(0) = 1
Arreglo(1) = 2