Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Arreglos
1. Introducción a las estructuras de datos
Una estructura de datos es una colección de datos que pueden ser caracterizados por su
organización y las operaciones que se definen en ella.
Las estructuras de datos son muy importantes en los sistemas de computadora. Los tipos de datos
más frecuentes utilizados en los diferentes lenguajes de programación son:
entero(integer)
real (real)
estándar
carácter (char)
Datos Simples o Primitivos
lógico (boolean)
Arreglos (vectores/matrices)
registro (record)
estáticos ficheros (archivos)
Datos Estructurados o conjuntos (set)
Datos compuestos
cadenas (string)
listas (pilas/colas)
dinámicos listas enlazadas
Árboles y grafos
Los tipos de datos simples o primitivos: son aquellos que no están definidos en términos de otros
tipos de datos. Se denominan “primitivos” también porque son los tipos de datos originales que
proporcionan la mayoría de los lenguajes de programación.
Los tipos de datos estructurados o compuestos están construidos en base a los tipos de datos
primitivos. Un ejemplo, es la cadena o string de caracteres.
A su vez, las estructuras compuestas pueden ser:
- Estáticas: cuando el tamaño ocupado en memoria se define antes de que el programa se
ejecute y no puede modificarse dicho tamaño durante la ejecución del programa.
- Dinámicas: no tienen limitaciones o restricciones en el tamaño de memoria ocupada (este
tipo de estructura no se contempla en esta asignatura).
Diferencia entre los tipos de datos
Los tipos de datos simples tienen como característica común que cada variable representa un
elemento. Por ejemplo: Edad, Temperatura, Importe, etc.
Los tipos de datos estructurados tienen como característica común que un identificador (nombre)
puede representar múltiples datos individuales, pudiendo cada uno de éstos ser referenciado
independientemente. Por ejemplo: Vector de temperaturas diarias, Nombre y Apellido, Registro de
alumnos, Matriz Identidad, etc.
A(1), A(2),………,A(I),…..A(N)
A[1], A[2],………,A[I],…..A[N] en programación (C y Pascal)
En el ejemplo de las notas, observe que sólo el vector global, el dato compuesto, tiene nombre
(NOTAS). Los elementos del vector se referencian por su subíndice ó índice, es decir, por su posición
relativa en el vector.
Otra forma de Notación: A (L:U) = {A (I)}
Para I = L, L+1,…,U-1, U donde cada elemento A (I) es de tipo de datos T
A es el vector unidimensional con elementos de datos tipo T, cuyos subíndices varían en el rango L a
U, que significa que el índice no tiene porqué comenzar en 0 o en 1.
El número de elementos de un vector se denomina rango del vector.
El rango del vector A (L: U) es U – L+1.
El rango del vector B (1: n) es n.
Un ejemplo de un vector pueden ser los nombres de los alumnos de una clase. El vector se denomina
ALUMNOS y tiene 30 elementos de rango.
1 Luis
2 Francisco
3 José
…
i Martín
…
30 Graciela
30 Dirección x + 29
Cada elemento de un vector se puede procesar como si fuese una variable simple al ocupar una
posición de memoria. Así:
NUMEROS[25] = 72 almacena el valor entero o real 72 en la posición 25ª del vector NUMEROS y la
instrucción de salida ESCRIBIR NUMEROS[25] visualiza el valor almacenado en la posición 25ª, en
este caso 72.
Esta propiedad significa que cada elemento de un vector y posteriormente una tabla o matriz, es
accesible directamente y es una de las ventajas más importantes de usar un vector.
TIPO
ARRAY [liminf…limsup] DE tipo:nombre_array
nombre_array: nombre válido del arreglo
liminf . . limisup: límites inferior y superior del rango del arreglo
tipo: tipo de datos de los elementos del array: entero, real, carácter
Ejemplo:
TIPO
ARRAY [1..10] DE carácter: NOMBRES
VARIABLES
NOMBRES: N
Significa que NOMBRES es un array unidimensional de diez elementos (1 a 10) de tipo carácter.
3.1. Asignación
La asignación de valores a un elemento del vector se realizará con la instrucción de asignación:
A[20] = 5 asigna el valor 5 al elemento 20 del vector A
Para asignar valores a todos los elementos de un vector, se debe recurrir a estructuras repetitivas
(PARA, MIENTRAS).
Ejemplo 1: Introducir los valores 5, 7, 8, 14 y 12 mediante asignaciones a cada elemento del vector A.
PARA i DESDE 1 HASTA 5
LEER A [ i ]
FIN-PARA
En este ejemplo el índice i deberá ir tomando el valor de la posición siguiente en el vector, utilizando
por ejemplo, la estructura PARA.
Ejemplo 2: Para dar el mismo valor a todos los elementos, la notación algorítmica se simplifica con el
formato:
PARA i DESDE 1 HASTA 5
A [i] = 8
FIN-PARA
Donde A[i] tomará los valores numéricos: A[1] = 8, A[2] = 8, ……. , A[5] = 8
Procedimiento 2
Los elementos del vector se pueden leer también con bucles MIENTRAS o HACER-HASTA.
i= 1 i= 1
MIENTRAS i <= 20 HACER HACER
LEER F [i] o bien LEER F [i]
i = i+1 i = i+1
FIN-MIENTRAS HASTA i > 20
Ejemplo 2: Procesamiento de un arreglo PUNTOS, realiza las operaciones: lectura del array, cálculo
de la suma de los valores del arreglo, cálculo de la media de los valores.
El arreglo se denomina PUNTOS, el límite superior del rango se define como constante y el límite
inferior se considera 1.
Amplíe el ejemplo permitiendo la visualización de los elementos del arreglo, cuyo valor es superior a
la media. (Ejercite)
ALGORITMO media_puntos
CONST
limite = 40
TIPO
ARRAY [1 . . limite] DE real: puntuacion
VAR
puntuacion: puntos
real: suma , media
entero: i
INICIO
suma = 0
ESCRIBIR ‘datos del array’
PARA I DESDE 1 HASTA limite
LEER puntos [i]
suma = suma + puntos [i]
FIN-PARA
media = suma/limite
ESCRIBIR ‘La media es’, media
FIN
Se denomina añadir datos a un vector a la operación de añadir un nuevo elemento al final del vector.
La única condición necesaria para esta operación es la comprobación de espacio de memoria
suficiente para el nuevo vector.
Ejemplo 1: Un arreglo TOTAL se ha dimensionado a seis elementos, pero sólo se le han asignado
cuatro valores a los elementos TOTAL[1], TOTAL[2], TOTAL[3] y TOTAL[4]. Se podrán añadir dos
elementos más con una simple acción de asignación.
TOTAL [5] = 14
TOTAL [6] = 12
La operación insertar un elemento consiste en introducir dicho elemento en el interior del vector. En
este caso se necesita un desplazamiento previo hacia abajo para colocar el elemento nuevo en su
posición relativa.
Ejemplo 2
Se tiene un array COCHES de nueve elementos que contiene siete marcas de automóviles en orden
alfabético y se desea insertar dos nuevas marcas: OPEL y CITROËN
Como Opel está comprendido entre Lancia y Renault, se deberá desplazar hacia abajo los elementos
5 y 6, que pasaran a ocupar la posición relativa 6 y 7. Posteriormente debe realizarse la operación
con Citroën, que ocupará la posición 2.
El algoritmo que realiza esta operación para un vector de n elementos, suponiendo que haya
suficiente espacio en el vector, es:
1. // Calcular la posición ocupada por el elemento a insertar (ej. P)
2. // Inicializar contador de inserciones i = n
3. MIENTRAS i >= P // transferir el elemento actual i-ésimo a la posición i+1
COCHES [i+1] = COCHES [i]
i = i-1 // decrementar contador
FIN_MIENTRAS
4. // insertar el elemento en la posición P
COCHES [P] = ’nuevo elemento’
5. // actualizar el contador de elementos del vector
6. n = n+1
7. FIN
a) COCHES b) Insertar OPEL c) Insertar Citroën
1 Alfa Romeo 1 Alfa Romeo 1 Alfa Romeo
2 Fiat 2 Fiat 2 Citroën
3 Ford 3 Ford 3 Fiat
4 Lancia 4 Lancia 4 Ford
5 Renault 5 Opel 5 Lancia
6 Seat 6 Renault 6 Opel
7 7 Seat 7 Renault
8 8 8 Seat
9 9 9
La operación de borrar un elemento al final del vector no presenta ningún problema; el borrado de
un elemento del interior del vector provoca el movimiento hacia arriba de los elementos inferiores a
él para reorganizar el vector.
El elemento B [i , j ] se puede representar en notación algorítmica. El array B con elementos del tipo T
(numéricos, alfanuméricos) con subíndice fila que varían en el rango de 1 a M y subíndice columna en
el rango de 1 a N es:
B (1 : M, 1: N) = B [I, J]
Donde I = 1, ….. , M o 1 <=I<= M
Donde J = 1, ….. , N 1 <=J<= N
Cada elemento B [I , J] es de tipo T.
Ejemplo: La matriz T representa una tabla de notaciones de saltos de altura (Primer salto de una
competencia), las filas representan el nombre del atleta y las columnas las diferentes alturas
saltadas. Los símbolos almacenados en la tabla son: X: salto válido; 0: salto nulo o no intentado.
Esta estructura de datos permite tener en la memoria principal (en el mismo momento) toda la
información de los competidores y los resultados del primer salto, de manera de poder realizar
distintos tipos de análisis y cálculos. Por ejemplo: Qué competidor realizó todos los saltos en las
distintas alturas; Cuántos competidores lograron saltar más de 2.30 m.?; Cuál fue la altura más
fácilmente superada?, etc.
Ejemplos:
TIPO
ARRAY [1..10, 1..5] DE REAL: MATRIZ
VAR
MATRIZ: tabla
Se define una matriz de 10 filas por 5 columnas con elementos de tipo real.
Luego se declara una variable “tabla” del tipo “Matriz”.
En general, el orden natural para procesar los vectores es el orden secuencial: del primero al último
elemento. En el caso de los arreglos multidimensionales, existen diferentes ordenamientos para sus
recorridos. Los más usuales son: recorrido por filas y recorrido por columnas.
Ejemplo: Leer y almacenar los siguientes datos en una matriz A de 3 filas por 4 columnas:
25 35 0 0
A= 0 1 18 34
6 12 18 24
Por filas:
Los elementos de la primera fila se procesan primero, luego los de la segunda y así sucesivamente.
Eso implica que primero se hace variar el índice de fila y dentro de éste al índice de columna. Al
iniciar cada nueva fila se recorre desde la primera columna nuevamente.
Ejemplo en código Pascal:
For Fila := 1 to 3 do
For Columna := 1 to 4 do
ReadLn (A [Fila, Columna]);
Los valores deben introducirse en este orden: 25, 35, 0, 0, 0, ….18, 24
Por columnas:
Los elementos de la primera columna se procesan primero, luego los de la segunda y así
sucesivamente. Eso implica que primero se hace variar el índice de columna y dentro de éste al
índice de fila. Al iniciar cada nueva columna se recorre desde la primera fila nuevamente.
Ejemplo en código Pascal:
For Columna := 1 to 4 do
For Fila := 1 to 3 do
ReadLn (A [Fila, Columna]);
Los valores deben introducirse en este orden: 25,0, 6, 35, 1, 12, …34, 24.
Ejemplo de carga y recorrido de una matriz
Introducir desde teclado números enteros en una matriz Z(20,20). Luego recorrer e imprimir
los elementos de la diagonal principal.
ALGORITMO Diagonal
TIPO
ARRAY [1 . . 20, 1 .. 20] DE entero: TIPOMATRIZ
VAR
TIPOMATRIZ: numeros
INICIO
// Cargar matriz de números
ESCRIBIR ‘Ingresar números enteros’
PARA i DESDE 1 HASTA 20
PARA j DESDE 1 HASTA 20
LEER numeros [i, j]
FIN-PARA
FIN-PARA
// Imprimir diagonal
PARA i DESDE 1 HASTA 20
PARA j DESDE 1 HASTA 20
SI i = j
ESCRIBIR numeros [i, j]
FIN-SI
FIN-PARA
FIN-PARA
FIN