Ads 468x60px

Perfil

martes, 15 de enero de 2013

Estructura de datos ejemplos basados en arreglos


Ejemplos basados en arreglos.

Acceso a componentes del arreglo.
El acceso a componentes se realiza vĂ­a indirecciĂłn de un puntero constante que es el nombre del
arreglo, con un offset dado por el Ă­ndice del elemento.

Se definen tipos de datos.

typedef int Tipo;         /* tipo de item del arreglo */
typedef int Indice;      /* tipo del Ă­ndice */
Es práctica usual, definir mediante una constante el tamaño máximo del arreglo
#define MaxEntradas  10
Se definen e inician con valores dos arreglos
Tipo A[MaxEntradas]={0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
Tipo B[MaxEntradas]={ 10,11,12,13,14,15,16,17,18,19};
A las funciones que manipulan arreglos se les suele pasar el arreglo por referencia.
Por ejemplo la funciĂłn que imprime en una lĂ­nea las componentes de un arreglo a.
void mostrar(Tipo *a, Indice inferior, Indice superior)
{
    Indice i;
for (i = inferior; i <= superior; i++) printf(" %d ", a[i]);
putchar('\n');
}
Note que el primer argumento de la funciĂłn tambiĂ©n puede escribirse:  Tipo a[].


Ejemplos de uso:
     mostrar(A, 0, 4);      imprime  0  1  2  3  4 
     mostrar(A+2, 0, 4);  imprime  2  3  4  5  6
La manipulaciĂłn de arreglos no suele verificar el rango del Ă­ndice. En el caso de haberse 
definido adyacentes los arreglos A y B, la referencia a A[12] está accesando efectivamente a 
B[2], por eso se muestra un 12; pero es un error por acceso fuera de rango. 
     printf(" %d  \n", A[12]);      imprime 12
     printf(" %d  \n", B[-2]);       imprime   8
     printf(" %d  \n", A[-1]);   imprime cualquier cosa que estuviera almacenada antes de A  
     printf(" %d  \n", 1[-1+B] );  imprime 10
     printf(" %d  \n", -1[B] );      imprime  -11  (es una referencia correcta)
Similares errores pueden generarse accesando componentes indireccionando vĂ­a puntero:
     printf(" %d  \n", *(A+12));  imprime 12
     printf(" %d  \n", *(-2+B));   imprime 8
Los ejemplos anteriores ilustran que el acceso a componentes de un arreglo se efectĂşa mediante 
indirecciĂłn con el puntero que es el nombre del arreglo. 
La expresiĂłn: A[c] se interpreta como el contenido de la direcciĂłn:
A + c*(tamaño del tipo del arreglo).
Donde A es la direcciĂłn de la primera componente del arreglo.
Empleando el lenguaje: 
A[c] equivale a:  *(A+c)  y  A es equivalente a &A[0].