Arrays Estaticos
Un Array estatico siempre tiene el mismo tamaño (Tambien se dice que son de fixed size) sin importar que hagamos, no decidimos donde se guardaran nuestros valores, solo sabemos que tenemos un bloque de X tamaño y que los elementos estan de forma continua.
# Obtener datos en un Indice Especifico
Para obtener datos se tiene que hacer desde un indice especifico.
Para obtener una posicion exacta dentro de un array primero se debe multiplicar un offset de memoria por la posicion deseada. Gracias a los lenguajes con sistema de tipos el offset es inferido por el tipo de dato y nada mas tenemos que obtener la posicion deseada
| |
Efectivamente lo que hace este codigo es Desde el inicio desplazate una unidad de memoria de 32 bits (int) y guardamela en la variable ‘val’. De esta manera, obtenemos el valor 5.
Esta operacion siempre sera de tiempo constante, debido a que, si conocemos su indice, podremos obtener cualquier valor en cualquier momento.
# Manipular datos en un Indice Especifico
Para insertar y eliminar datos dentro de un array no se reduce ni incrementa el tamaño del array, sino directamente sobreescribe los datos que se encuentren en la posicion deseada.
| |
En caso de querer conservar todos los datos de una rray sin querer sobreescribir nada, estariamos frente a una operacion bastante ineficiente debido a que esta necesita mover todos los otros elementos para guardar un espacio para el nuevo elemento que queremos insertar (Esta tardaria O(n)).
Lo mismo ocurre cuando queremos remover un elemento sin preservar espacios blancos, nos quedariamos con una operacion que necesita mover todos los elementos.
# Operaciones
| Operacion | Big O |
|---|---|
| Leer / Escribir el elemento iTh | O(1) |
| Insertar / Remover el ultimo elemento | O(1) |
| Insertar en el Medio | O(n) |
| Remover del medio | O(n) |
# Compromiso
# Ventajas
- Acceso por indice a cualquier valor (Debido a que por aritmetica de pointers podemos acceder a cualquier valor). Acceso Aleatorio
- O(1) Todo, traer y guardar informacion.
- Insertar un elemento a una posicion especifica sin afectar al resto requiere de O(n) para mover todos los elementos a otras posiciones.
# Desventajas
- Usa memoria de forma constante, no cambia hasta cuando esta sin usar
- Imposible agregar mas elementos de los requeridos inicialmente