Está en la página 1de 10

Teoría Algoritmos y Estructuras de Datos I

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)

definido por el programador subrango (subrange)


(no estándar)
Enumerativo (enumerated)

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.

Licenciatura en Sistemas de Información – FACENA - UNNE Pág. 1


Teoría Algoritmos y Estructuras de Datos I
6

2. Arreglos unidimensionales: los vectores


Un arreglo (matriz o vector) es un conjunto finito y ordenado de elementos homogéneos.
La propiedad ordenado, significa que el elemento primero, segundo,.., enésimo de un arreglo puede
ser identificado.
La propiedad homogéneo, quiere decir que los elementos son del mismo tipo de datos. Por ejemplo,
un arreglo puede tener todos sus elementos de tipo entero, o todos sus elementos de tipo char.
El tipo más simple de arreglo es el arreglo unidimensional o vector.
Ejemplo: Un vector de una dimensión, denominado NOTAS, que consta de n elementos se puede
representar de la siguiente manera:
NOTAS(1) NOTAS(2) …. NOTAS (i) … NOTAS(n)
EL subíndice o índice de un elemento (1,2,…,i,n) designa su posición en la ordenación del vector.
Otras posibles notaciones del vector son:
a a a
1, 2 ,....., n en matemática y algunos lenguajes (V.B 6.0 y VB.Net)

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

Otro ejemplo de un vector unidimensional, es el vector TEMPERATURA que contiene las


temperaturas horarias registradas en una ciudad durante las 24 horas del día. Este vector constará de
24 elementos del tipo real, ya que las temperaturas no serán enteras siempre.
El valor mínimo del índice permitido de un vector se denomina límite inferior del vector (L) y el valor
máximo permitido se denomina límite superior (U). En este ejemplo el límite inferior es 1 y el
superior 24.
TEMPERATURA (I) donde 1 <= I <= 24
Licenciatura en Sistemas de Información – FACENA - UNNE Pág. 2
Teoría Algoritmos y Estructuras de Datos I
6

Los vectores se almacenan en memoria central de la computadora en un orden adyacente.


Así, un vector de cincuenta números denominado NUMEROS se representa físicamente por treinta
posiciones de memoria sucesivas.
Memoria
1 Dirección x
2 Dirección x + 1
3 Dirección x + 2

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.

Ejemplo 1: Vector X de ocho elementos


X[1] X[2] X[3] X[4] X[5] X[6] X[7] X[8]
14 12 8 7 6.41 5.23 6.15 7.25
Elemento 1° Elemento 2° Elemento 8°

Ejemplo 2: Algunas instrucciones que manipulan el vector X del ejemplo 1.


Acciones Resultados
ESCRIBIR X[1] Visualiza el valor X[1] o 14
X[4] = 45 Almacena el valor 45 en X[4]
SUMA = X[1]+X[3] Almacena la suma de X[1] y X[3] o bien 22 en la variable SUMA
SUMA = SUMA+X[4] Añade en la variable SUMA el valor de X[4], o sea, SUMA= 67
X[5] = X[5] + 3.5 Suma 3.5 a X [5]; el nuevo valor será 9.91
X[6] = X[1] + X[2] Almacena la suma de X[1] y X[2] en X[6]; el nuevo valor será 26

Los arreglos unidimensionales y multidimensionales necesitan ser dimensionados previamente a su


uso dentro del programa. Dimensionar significa reservar el espacio necesario en la memoria
principal.
Ejemplo 3: Uso de subíndice. Tenemos un vector V de ocho elementos:
V[1] V[2] V[3] V[4] V[5] V[6] V[7] V[8]

12 5 -7 14.5 20 1.5 2.5 -10


I= 4
V [I+1] representa el elemento V (5) de valor 20
V [I+2] representa el elemento V (6) de valor 1.5
V [I-2] representa el elemento V (2) de valor 5
V [I+3] representa el elemento V (7) de valor 2.5
Los subíndices de un vector pueden ser enteros, variables o expresiones enteras.

Licenciatura en Sistemas de Información – FACENA - UNNE Pág. 3


Teoría Algoritmos y Estructuras de Datos I
6

3. Operaciones con vectores:


Las operaciones que se pueden realizar con vectores durante el proceso de resolución de un
problema son:
• Asignación
• Lectura/escritura
• Recorrido (acceso secuencial)
• Actualizar (añadir, borrar, insertar)
• Ordenación
• Búsqueda
En general, las operaciones implican el procesamiento o tratamiento de los elementos individuales
del vector. La notación algorítmica es:

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

Licenciatura en Sistemas de Información – FACENA - UNNE Pág. 4


Teoría Algoritmos y Estructuras de Datos I
6

3.2. Lectura/escritura de datos


La lectura/escritura de datos en arreglos u operaciones de entrada/salida normalmente se realizan
con estructuras repetitivas. Las instrucciones simples de lectura/escritura se representarán como:
LEER V [5] // leer el elemento V [5] del vector V

3.3. Acceso secuencial al vector (recorrido)


Se puede acceder a los elementos de un vector para introducir datos (escribir) en él o bien para
visualizar su contenido (leer).
A la operación de efectuar una acción general sobre todos los elementos de un vector se la
denomina recorrido del vector.
Estas operaciones se realizan utilizando estructuras repetitivas, cuyas variables de control (por
ejemplo “i”) se utilizan como subíndice del vector (ej. S [i]). El incremento del contador del bucle
producirá el tratamiento sucesivo de los elementos del vector.

Ejemplo 1: Lectura de veinte valores enteros de un vector denominado F.


Procedimiento 1
ALGORITMO leer_vector
TIPO
ARRAY[1..20] DE ENTERO: Final
VAR
Final: F
ENTERO: i
INICIO
PARA i DESDE 1 HASTA 20
LEER (F [i])
FIN-PARA
FIN
La lectura de veinte valores sucesivos desde el teclado rellenará de valores el vector F, comenzando
con el elemento F [1] y terminando en F [20].

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

La salida o escritura de vectores se representa de un modo similar. La estructura visualiza todo el


vector completo (un elemento en cada línea independiente).

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)

Licenciatura en Sistemas de Información – FACENA - UNNE Pág. 5


Teoría Algoritmos y Estructuras de Datos I
6

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

3.4 Actualización de un vector


La operación de actualizar un vector puede constar a su vez de tres operaciones elementales:
- añadir elementos
- insertar elementos
- borrar elementos

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.

Licenciatura en Sistemas de Información – FACENA - UNNE Pág. 6


Teoría Algoritmos y Estructuras de Datos I
6

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.

Ejemplo 3: El algoritmo de borrado del elemento j-ésimo del vector COCHES


INICIO
// Se utilizará una variable auxiliar –AUX- que contendrá el valor del elemento que se desea borrar
AUX = COCHES [j]
PARA i DESDE i= j HASTA N-1
COCHES [i] = COCHES [i+1] // llevar elemento j+1 hacia arriba
FIN_PARA
// actualizar contador de elementos
// ahora tendrá un elemento menos, N-1
N = N-1
FIN
Licenciatura en Sistemas de Información – FACENA - UNNE Pág. 7
Teoría Algoritmos y Estructuras de Datos I
6

4. Arreglos de varias dimensiones


Se pueden definir tablas o matrices como arreglos multidimensionales, cuyos elementos se pueden
referenciar por dos, tres o más subíndices.
Ejemplos típicos de tablas o matrices son:
- tablas de distancias kilométricas entre ciudades.
- cuadros horarios de trenes o aviones.
Los arreglos no unidimensionales se dividen en dos grandes grupos:
- arreglos bidimensionales (2 dimensiones)
- arreglos multidimensionales (3 o más dimensiones)
En esta materia se tratarán arreglos de 2 dimensiones solamente.
5. Arreglos bidimensionales (tablas/matrices)
El arreglo bidimensional se puede considerar como un vector de vectores.
Es un conjunto de elementos, todos del mismo tipo, en el cual el orden de los componentes es
significativo y en el que se necesita especificar dos subíndices para poder identificar cada elemento
del arreglo.
Ejemplo: A continuación se muestra una tabla o matriz de 30 elementos (5 x 6) con 5 filas y 6
columnas. El primer subíndice se refiere a la fila y el segundo subíndice se refiere a la columna.
Ej. M [2 ,3 ] se refiere al elemento de la segunda fila, tercer columna, que contiene el valor 18.
Fila 1
Fila 2 18
Fila 3
Fila 4
Fila 5

Col. 1 Col. 2 Col. 3 Col. 4 Col. 5 Col. 6


En notación estándar, B [i , j ] es el elemento de B que ocupa la iª (i-ésima) fila y la jª (j-
ésima)columna.
1 2 3 4 . J . N
1
2
.
I B[I,J]
.
M

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.

Licenciatura en Sistemas de Información – FACENA - UNNE Pág. 8


Teoría Algoritmos y Estructuras de Datos I
6

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.

Fila/Columna. T 2.00 2.10 2.20 2.30 2.35 2.40


García X 0 X x X 0
Pérez 0 X X 0 X 0
Gil 0 0 0 0 0 0
Mortimer 0 0 0 X x X

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.

5.1. Declaración de los array bidimensionales


De la misma manera que los arreglos unidimensionales (vectores), los arreglos bidimensionales
(matrices o tablas) se crean con declaraciones TIPO y VAR. Se deben indicar:
1) Nombre del arreglo
2) Tipo del arreglo (recuerde que todos los elementos del arreglo deben ser del mismo tipo)
3) El rango permitido (es decir, el primero y último valores posibles) por cada subíndice.
Formato:
TIPO
ARRAY [rango índice 1, rango índice 2] DE tipo elemento: Identificador

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”.

5.2. Manipulación de matrices o tablas

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

Licenciatura en Sistemas de Información – FACENA - UNNE Pág. 9


Teoría Algoritmos y Estructuras de Datos I
6

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

Licenciatura en Sistemas de Información – FACENA - UNNE Pág. 10

También podría gustarte