¿Sabes qué es una estructura de datos?
¿Sabes por qué es importante?
Son importantes ya que las estructuras de datos y los algoritmos son
patrones utilizados para resolver problemas. Cuando los usamos correctamente,
nos permiten crear soluciones elegantes para algunos problemas en los cuales
encontramos un alto grado de dificultad.
Por tanto, si desarrollamos un conocimiento amplio y profundo de las estructuras de datos y los algoritmos, seremos idóneos de detectar los tipos de patrones a diferentes problemas que de otra manera nos sería difícil de modelar. A medida que experimentamos la identificación de estos patrones, comenzaremos a ver las aplicaciones para nuestro uso en las tareas de desarrollo del día a día..
Ahora te presentamos los diferentes tipos de estructuras...
ESTRUCTURAS CONTIGUAS: Son aquellas que al representarse en el hardware del ordenador, lo hacen situando sus datos adyacentes de memoria; un dato en una estructura contigua se localiza directamente calculado su posición al principio del área de memoria que contiene la estructura.
ESTRUCTURAS ESTÁTICAS: Son aquellas en la que el tamaño ocupado en memoria se define con anterioridad a la ejecución del programa que los usa, de forma que su dimensión no puede modificarse durante la misma, aunque no necesariamente se tenga utilizar toda la memoria reservada al inicio.
ESTRUCTURAS DINÁMICAS: No tiene teóricamente limitaciones en su tamaño, salvo la única restricción de la memoria dispone en el computador.
ESTRUCTURAS ENLAZADAS: son estructuras cuyos datos no contienen por qué situarse de forma contigua en la memoria; en las estructuras enlazadas los datos se relacionan uno con otro mediante punteros.
Pero, sin embargo se clasifican en...
ESTRUCTURAS LÓGICAS DE DATOS: En
un programa, cada variable pertenece a alguna estructura de datos explícita o
implícitamente definida, la cual determina el conjunto de operaciones válidas
para ella.
ESTRUCTURAS PRIMITIVAS Y SIMPLES: Son
primitivos aquellas que no están compuestas por otras estructuras de datos por
ejemplo, enteros, booleanos y caracteres.
ESTRUCTURAS LINEALES Y NO LINEALES: Las
estructuras de datos simples se pueden combinar de varias maneras para formar
estructuras más complejas.
Aunque debemos acotar que tiene Ventajas y Desventajas
ESTRUCTURAS PRIMITIVAS Y SIMPLES: Son primitivos aquellas que no están compuestas por otras estructuras de datos por ejemplo, enteros, booleanos y caracteres.
ESTRUCTURAS LINEALES Y NO LINEALES: Las estructuras de datos simples se pueden combinar de varias maneras para formar estructuras más complejas.
Aunque debemos acotar que tiene Ventajas y Desventajas
VENTAJAS:
* Permite modificar "Global mente" las variables sin tener que recorrer el código buscando cada aparición. * Define variables y evita que cambien entre rutinas. * Separa desde el inicio del programa el espacio en memoria. *Se trabaja mas fácil el paso de datos entre aplicaciones.DESVENTAJAS:
* Puede causar confusión al intentar unir o pasar información entre programas, si no se tiene en cuenta la longitud y tipo de datos. * Si es poca la memoria, puede separar espacio que nunca se utiliza y colgar el equipo.
Recuerda que...
Una estructura de datos tiene como objetivo otorgar al participante el conocimiento, la habilidad y la aptitud para: comprender y manejar las representaciones mas utilizadas para el procesamiento de información en sistemas de computación. Además de ello conocer los diferentes métodos de búsqueda y ordenamiento y seleccionar y aplicar el algoritmo más adecuado para la solución a problemas de ingeniería.
Antes de continuar con los vectores vamos a conocer sobre los ARRAY
¿Ahora bien, te diremos qué son, y un ejemplo ?
Un array es un conjunto de datos del mismo tipo ordenados de
forma lineal uno después de otro. Los componentes de un array se han de referencia por medio del nombre del array y un índice de desplazamiento para
indicar el componente deseado.
Los arrays son usados extensamente por los programadores
para contener listas de datos en la memoria, por ejemplo, los datos almacenados
en un disco suelen leerse y ponerse dentro de un array con el objetivo de
facilitar la manipulación de dichos datos, ya que los datos en memoria pueden
ser modificados, clasificados, marcados para su eliminación, entre otros, para luego
ser reescritos al disco.
VECTORES:
Son agrupaciones en las que cada elemento tienen asociado un
índice (un entero), de manera que se puede acceder a cada uno
de los elementos mediante la utilización de ese índice (operación
de indexación). El índice indica la posición del elemento dentro
del vector.
Supongamos que queremos declarar 10 variables de tipo entero.
La única forma de hacerlo hasta ahora sería declararlos como
variables individuales. La otra forma de hacerlo es utilizando un
vector.
La declaración de un vector la realizaremos de la siguiente
manera: Nombre[Tamaño] : Tipo
Asignación:
Se da un valor determinado a algún elemento del vector. La
manera de hacerlo es mediante el nombre del vector y el índice
que queremos asignar:
Nombre[indice] ← Valor
Ejemplo: Para asignar el valor 4 al índice (o posición del vector)
ocho:
vect [8] ← 4
NO se pueden realizar asignaciones entre vectores. NUNCA se debe realizar la siguiente asignación. Sean:
a[10], b[10]: enteros
a ← b ¡¡¡ERROR!!!
Recorrido:
Se pasa por los elementos del vector para realizar una tarea
concreta en cada elemento.
Recorrido completo
Desde i ← 0 hasta Tamaño-1 hacer
Procesar (Nombre [i])
i ← i+1
Fin_desde
Recorrido parcial
i ← 0
Mientras (Nombre[i] cumpla una cierta condición) hacer
Procesar (Nombre [i])
i ← i+1
Fin_mientras
Para facilitar la realización de bucles y evitar posibles errores en el
recorrido de los vectores se recomienda que el número de
elementos que posee un vector TAM se defina previamente como
una constante.
10
Arrays: Vectores
Iniciación:
En la declaración del vector sólo se reserva espacio. NO se pone
ningún valor en el vector.
Para hacer la iniciación de todos y cada uno de los elementos del
vector, habrá que recorrerlo y asignar un valor (o pedir al usuario
que de valor a cada uno de los elementos).
Ejemplo: Supongamos que queremos pedir al usuario que nos dé
todos los valores del vector:
Desde i ← 0 hasta TAM-1 hacer
leer( vect[i])
i ← i + 1
Fin_desde
Búsqueda en vectores:
Para buscar un cierto elemento en un vector, en principio hay que
ir recorriendo todos y cada uno de los elementos, en busca del
que se busca. En general a esto se le llama búsqueda secuencial.
Ejemplo: Realizar una función que diga si un cierto valor ‘x’ se
encuentra o no en un vector ‘vect’:
Funcion Buscar1 ( vect[TAM]: entero, x : entero) : booleano
Variables
i : entero
encontrado : booleano
Inicio
encontrado ← falso
Desde i ← 0 hasta TAM-1 hacer
Si vect[i] = x entonces
encontrado ← verdadero
Fin_si
i ← i + 1
Fin_desde
Buscar1 ← encontrado
Fin_Funcion
14
Arrays: Vec
MATRICES:
Las matrices o arrays bidimensionales son agrupaciones
similares a los vectores pero en las que cada elemento tiene
asociados dos índices enteros, de manera que se puede acceder
a cada uno de los elementos mediante la utilización de esos
índices.
La declaración de una matriz la realizaremos de la siguiente
manera:
Nombre[Tamaño1][Tamaño2] : Tipo
Donde Tipo es el tipo de los datos guardados en la matriz,
Nombre el nombre que le vamos a dar a la matriz y Tamaño1 y
Tamaño2 son el número de filas y columnas que tiene.
Operaciones:
Asignación:
Se da un valor determinado a algún elemento de la matriz. La
manera de hacerlo es mediante el nombre de la matriz y los
índices (ahora son dos) que queremos asignar:
Nombre[indice1][indice2] ← Valor
Ejemplo: Para asignar el valor 4 a los índices (o posición de la
matriz) ocho, cinco:
vect [8][5] ← 4
Al igual que para los vectores NO se pueden realizar asignaciones
entre matrices.
Por lo tanto, NUNCA una función podrá devolver un vector o
matriz,.. en general, un array.
Recorrido:
Se pasa por los elementos de la matriz para realizar una tarea
concreta en
cada elemento.
Recorrido completo
Desde
1
i ← 0 hasta TAMX-1 hacer
Desde2
j ← 0 hasta TAMY-1 hacer
Procesar ( Nombre[i][j] )
j ← j+1
Fin_desde2
i ← i+1
Fin_desde
1
Recorrido parcial
i ← 0
Mientras 1
(Nombre[i][j] cumpla una cierta condición) hacer
j ← 0
Mientras
2
(Nombre[i][j] cumpla una cierta condición) hacer Procesar (Nombre [i][j])
j ← j+1
Fin_mientras
2
i ← i+1
Fin_mientras
1
Iniciación:
Para hacer la iniciación de todos y cada uno de los elementos de la
matriz, habría que recorrerla y asignar o pedir al usuario que introdujese
cada uno de los elementos. El resto de operaciones también son
similares a la de los vectores pero accediendo con 2 índices.
Ejemplo: Supongamos que queremos pedir al usuario que nos dé todos los valores de
la matriz:
Desde
1
i ← 0 hasta TAM1-1 hacer
Desde2
j ← 0 hasta TAM2-1 hacer
Leer( mat[i][j] )
j ← j+1
Fin_desde2
i ← i+1
Fin_desde
1