• Embed Doc
  • Readcast
  • Collections
  • CommentGo Back
Download
 
1
Estructura de datos
En programación, una
estructura de datos
es una forma de organizar un conjunto de datoselementales con el objetivo de facilitar su manipulación. Un dato elemental es la mínima información quese tiene en un sistema.Una
estructura de datos
define la organización e interrelación de éstos y un conjunto deoperaciones que se pueden realizar sobre ellos. Las operaciones básicas son:Alta, adicionar un nuevo valor a la estructura.Baja, borrar un valor de la estructura.Búsqueda, encontrar un determinado valor en la estructura para realizar una operación con estevalor, en forma SECUENCIAL o BINARIO (siempre y cuando los datos estén ordenados)...Otras operaciones que se pueden realizar son:Ordenamiento, de los elementos pertenecientes a la estructura.Apareo, dadas dos estructuras originar una nueva ordenada y que contenga a las apareadas.Cada estructura ofrece ventajas y desventajas en relación a la simplicidad y eficiencia para larealización de cada operación. De esta forma, la elección de la estructura de datos apropiada para cadaproblema depende de factores como la frecuencia y el orden en que se realiza cada operación sobre losdatos.
Vector (informática)
Arreglo unidimensional con 10 elementos
En programación, un
array
es un conjunto o agrupación de variables del mismo tipo cuyo accesose realiza por índices.Los vectores o arreglos (array en inglés) de dos o más dimensiones se denominan con frecuenciamatrices, y pueden tener tantas dimensiones como se desee; aunque para evitar confusiones con elconcepto matemático de matriz numérica (que normalmente sólo tiene dos dimensiones), se suele utilizarel termino
array
(o arreglo) para referirse de forma genérica a matrices de cualquier número dedimensiones.
Introducción
Desde el punto de vista de un programa de ordenador, un array (matriz o vector) es una zona dealmacenamiento contiguo, que contiene una serie de elementos del mismo tipo, los elementos de lamatriz. Desde el punto de vista lógico un array se puede ver como un conjunto de elementos ordenados en
 
2
fila (o filas y columnas si tuviera dos dimensiones). En principio, se puede considerar que todos los arraysson de una dimensión, la dimensión principal, pero los elementos de dicha fila pueden ser a su vez arrays(un proceso que puede ser recursivo), lo que nos permite hablar de la existencia de arraysmultidimensionales, aunque los más fáciles de
"mondaa"
o imaginar son los de una, dos y tresdimensiones.Estas estructuras de datos son adecuadas para situaciones en las que el acceso a los datos se realicede forma aleatoria e impredecible. Por el contrario, si los elementos pueden estar ordenados y se va autilizar acceso secuencial sería más adecuado utilizar una lista, ya que esta estructura puede cambiar detamaño fácilmente durante la ejecución de un programa.
Índices
Todo vector se compone de un determinado número de elementos. Cada elemento es referenciadopor la posición que ocupa dentro del vector. Dichas posiciones son llamadas
índice
y siempre soncorrelativos. Existen tres formas de indexar los elementos de un array:
Indexación base-cero (0):
En este modo el primer elemento del vector será la componente cero ('0') delmismo, es decir, tendrá el indice '0'. En consecuencia, si el vector tiene 'n' componentes la última tendrácomo índice el valor 'n-1'. ElCes un ejemplo típico de lenguaje que utiliza este modo de indexación.
Indexación base-uno (1):
En esta forma de indexación, el primer elemento del array tiene el indice '1' y elúltimo tiene el índice 'n' (para un array de 'n' componentes).
Indexación base-n (n):
Este es un modo versátil de indexación en la que el índice del primer elementopuede ser elegido libremente, en algunos lenguajes de programación se permite que los índices puedanser negativos e incluso de cualquier tipo escalar (también cadenas de caracteres).
Notación
La representación de un elemento en un vector se suele hacer mediante el identificador del vectorseguido del índice entre corchetes, paréntesis o llaves:
Notación
 
Ejemplos
 
vector[
 índice_1
,
 índice_2
...,
 índice_N
]
 
(Java, Léxico, etc.)
 
vector[
 índice_1
][
 índice_2
]...[
 índice_N
]
 
(C, C++, PHP, etc.)
 
vector(
 índice_1
,
 índice_2
...,
 índice_N
)
 
(Basic)
 
vector{
 índice_1
,
 índice_2
...,
 índice_N
}
 
(Perl)
 
Aunque muchas veces en pseudocódigo y en libros de matemática se representan como letrasacompañadas de un subíndice numérico que indica la posición a la que se quiere acceder. Por ejemplo,para un vector "
A
":
 A
0
,
 A
1
,
 A
2
,... (vector unidimensional)
 
3
Forma de Acceso
La forma de acceder a los elementos del array es
directa
; esto significa que el elemento deseadoes obtenido a partir de su índice y no hay que ir buscándolo elemento por elemento (en contraposición, enel caso de una lista, para llegar, por ejemplo, al tercer elemento hay que acceder a los dos anteriores oalmacenar un apuntador o puntero que permita acceder de manera rápida a ese elemento.Para trabajar con vectores muchas veces es preciso recorrerlos. Esto se realiza por medio debucles. El siguiente pseudocódigo muestra un algoritmo típico para recorrer un vector y aplicar unafunción '
 f 
(...)' a cada una de las componentes del vector:
i = 0mientras (i < longitud)#Se realiza alguna operación con el vector en la i-ésima posiciónf(v[i])i=i+1fin_mientras
Vectores dinámicos
Lo habitual es que un vector tenga una cantidad fija de memoria asignada, aunque dependiendo deltipo de vector y del lenguaje de programación un vector podría tener una cantidad variable de datos. Eneste caso, se los denomina
vectores dinámicos
, en oposición, a los vectores con una cantidad fija dememoria asignada se los denomina
vectores estáticos
.El uso de vectores dinámicos requiere realizar una apropiada gestión de memoria dinámica. Unuso incorrecto de los vectores dinámicos, o mejor dicho, una mala gestión de la memoria dinámica, puedeconducir a una
fuga de memoria
(Error de software que ocurre cuando un bloque de memoria reservadano es liberado en un programa de computación. Comúnmente ocurre porque se pierden todas lasreferencias a esa área de memoria antes de haberse liberado. Dependiendo de la cantidad de memoriaperdida y el tiempo que el programa siga en ejecución, este problema puede llevar al agotamiento de lamemoria disponible en la computadora. Este problema se da principalmente en aquellos lenguajes deprogramación en los que el manejo de memoria es manual (C o C++ principalmente), y por lo tanto es elprogramador el que debe saber en qué momento exacto puede liberar la memoria. Otros lenguajes utilizanun recolector de basura que automáticamente efectúa esta liberación. Sin embargo todavía es posible laexistencia de fugas en estos lenguajes si el programa acumula referencias a objetos, impidiendo así que elrecolector llegue a considerarlos en desuso. Existen varias formas de luchar contra este problema. Unaforma es el uso de un recolector de basura incluso en el caso en el que éste no sea parte estándar dellenguaje. El más conocido recolector de basura usado de esta manera es el Boehm-Demers-Weiserconservative garbage collector. Otras técnicas utilizadas son la adopción de esquemas de conteo dereferencias o el uso de pools de memoria (técnica menos popular, utilizada en el servidor Apache y en elsistema de versiones Subversion). También hay herramientas para "auscultar" un programa y detectar lasfugas. Una de las herramientas más conocidas es Valgrind).Al utilizar vectores dinámicos siempre habrá que liberar la memoria utilizada cuando ésta ya no sevaya a seguir utilizando.
of 00

Leave a Comment

You must be to leave a comment.
Submit
Characters: ...
You must be to leave a comment.
Submit
Characters: ...