Facultad de Ciencias Exactas, Ingeniería y Agrimensura – UNR Informática
Página 1 de 26
Estructuras de datos ESTRUCTURA DE DATOS: Una estructura de datos es un conjunto de datos agrupados bajo un mismo nombre que pueden ser caracterizados por su organización y por las operaciones que sobre ellos se definen.
Entero
Datos simples Estáticos Real Carácter Lógico Arreglo (vector, matriz) Estáticos Cadena Datos estructurados Registro Dinámicos … (fuera del alcance del
curso)
Las estructuras de datos estáticas son aquellas en las que el tamaño ocupado en la memoria se define antes de que el programa se ejecute y no puede ser modificado durante la ejecución del programa. Las estructuras de datos dinámicas son aquellas en las que el tamaño podrá modificarse durante la ejecución del programa; teóricamente no hay límites a su tamaño, salvo el que impone la memoria disponible en la computadora.
Facultad de Ciencias Exactas, Ingeniería y Agrimensura – UNR Informática
Página 2 de 26
Estructuras de datos: Arreglos
Un arreglo es una estructura de datos estática porque el espacio de memoria que se reserva para todas sus elementos no puede modificarse una vez que se lo haya fijado y homogénea porque sus elementos son todos del mismo tipo de datos.
Los arreglos se caracterizan por las siguientes propiedades: 1. Cantidad de elementos prefijada: esto determina el tamaño del bloque de memoria que ocupará. 2. Elementos directamente accesibles: al ubicarse en posiciones adyacentes son fácilmente individualizables. 3. Elementos de igual tipo: esto determina que, independientemente, todos ocupan la misma cantidad de bytes. Sus elementos se identifican a través de un índice. También se denominan “vectores” por su similitud con los vectores matemáticos, si son arreglos que sólo presentan una dimensión. Por ejemplo: tenemos el conjunto de notas obtenidas por los alumnos durante un parcial. Cada nota individual es guardada en un elemento Nota(i), donde “Nota” indica el nombre del arreglo y el índice i significa a qué valor en particular nos estamos refiriendo.
Nota(1) Nota(2) Arreglo: Nota Elementos: .... .... Nota(i) .... Nota(50)
Facultad de Ciencias Exactas, Ingeniería y Agrimensura – UNR Informática
Página 3 de 26
Arreglos unidimensionales (Vectores) Cómo almacenamos en memoria un arreglo unidimensional ?
MEMORIA
Nota (1) →→→→ Dirección X
Nota (2) →→→→ Dirección X+1
Nota (3) →→→→ Dirección X+2
Nota (i) →→→→ Dirección X+i
Nota (50) →→→→ Dirección X+ 49
Los elementos de un arreglo se almacenan en direcciones consecutivas de memoria • Cada elemento del arreglo tiene asignada una dirección de memoria.
• Cada elemento del arreglo puede ser utilizado como si este fuese una variable simple.
Facultad de Ciencias Exactas, Ingeniería y Agrimensura – UNR Informática
Página 4 de 26
Operaciones
Consideremos el siguiente vector
X(1) X(2) X(3) X(4) X(5) X(6) X(7) X(8)
14.0 12.0 8.0 7.0 5.23 6.15 5.66 0.0 OPERACIONES CON VECTORES Escribir ( X(1) ) Visualiza el valor de X(1)
X(4) ←←←← 45 Asigna el valor 45 al tercer elemento del vector X
SUMA ←←←← X(1) + X(3) Asigna el valor resultante de la suma de los valores almacenados en el primer y tercer elemento de X
SUMA ←←←← SUMA + X(4) Incrementa el valor de SUMA con el valor actual del cuarto elemento de X
X(5) ←←←← X(5) + 3.5 Suma 3.5 al valor que se encuentra almacenado en el quinto elemento de X
X(6) ←←←← X(1) + X(2) Asigna un nuevo valor al sexto elemento de X, resultado de sumar los valores del primer y segundo elemento.
Facultad de Ciencias Exactas, Ingeniería y Agrimensura – UNR Informática
Página 5 de 26
Operaciones: Lectura, Escritura y Asignación
La asignación de valores a un vector se realiza en forma individual para cada uno de los elementos que lo componen.
X(25) ←←←← 5 asigna el valor 5 al elemento 25 del vector X
También se puede utilizar una estructura de repetición para asignar valores a varios o a todos los elementos de un arreglo Ejemplos:
A(1) ←←←← 5
A(2) ←←←← 1.01
A(3) ←←←← 5
A(4) ←←←← 5.5
REPETIR PARA i ���� 1 , 4 LEER (A(i)) FIN PARA
REPETIR PARA i ���� 1 , 4 ESCRIBIR (A(i)) FIN PARA
REPETIR PARA i ���� 1 , 4 A(i) ���� 0 FIN PARA
i ←←←← 1
REPETIR MIENTRAS i <= 4 LEER (A(i))
i ←←←← i + 1
FIN MIENTRAS
ESCRIBIR (A(1), A(3)) ESCRIBIR (A(1)*A(4)+A(2))
Facultad de Ciencias Exactas, Ingeniería y Agrimensura – UNR Informática
Página 6 de 26
Declaración Cómo declaramos una variable de este nuevo tipo de estructura de datos? Variables tipo de dato : nombre del arreglo (tamaño)
Algoritmo leer_vector1
Variables Entero : F(20)
Entero : i
Inicio Repetir Para i ���� 1 , 20
Leer (F(i))
Fin para ……. Fin
Ejemplo: Lectura de 20 valores enteros. Acumular los datos en un arreglo de 20 elementos de nombre F.
Algoritmo leer_vector2
Variables Real : Z(100) Entero : i
Inicio Repetir Para i ���� 1 , 70
Leer (Z(i))
Fin para ……. Fin
Ejemplo: no necesariamente tiene que utilizarse toda la memoria reservada al inicio.
Facultad de Ciencias Exactas, Ingeniería y Agrimensura – UNR Informática
Página 7 de 26
Estructuras de datos: Arreglos de más de una dimensión (matrices)
En los arreglos de más de una dimensión cada uno de los elementos que lo componen se lo ubica por más de un índice. En el caso de arreglos bi-dimensionales se requieren 2 índices para definir al elemento. En general en el caso de n-dimensional habrá n índices para referirse al elemento. Los arreglos bi-dimensionales también se denominan “matrices” por su similitud con las matrices matemáticas. Columna 1 Columna 2 Columna 3 Columna 4 Columna 5
Fila 1
Fila 2
Fila 3
Fila 4
Fila 5
Facultad de Ciencias Exactas, Ingeniería y Agrimensura – UNR Informática
Página 8 de 26
Arreglos de más de una dimensión Cómo almacenamos en memoria un arreglo bidimensional ?
Los lenguajes de programación pueden almacenar en memoria los arreglos en dos formas diferentes: según el orden de fila mayor o según el orden de columna mayor Supongamos el arreglo siguiente:
B(1,1) B(1,2) B(1,3)
B(2,1) B(2,2) B(2,3)
MEMORIA
por fila por columna
B(1,1) →→→→ B(1,1) →→→→ Dirección X
B(1,2) →→→→ B(2,1) →→→→ Dirección X+1
B(1,3) →→→→ B(1,2) →→→→ Dirección X+2
B(2,1) →→→→ B(2,2) →→→→ Dirección X+3
B(2,2) →→→→ B(1,3) →→→→ Dirección X+4
B(2,3) →→→→ B(2,3) →→→→ Dirección X+5
C, Pascal almacenan los arreglos por fila; mientras que FORTRAN lo hace por columnas.
Facultad de Ciencias Exactas, Ingeniería y Agrimensura – UNR Informática I
Página 9 de 26
Declaración y operaciones La declaración es similar a la de los arreglos unidimensionales Variables tipo de dato : nombre del arreglo (cantidad de filas, cantidad de columnas)
Algoritmo leer_matriz
Variables Entero: M(5,8) Entero: i ,j
Inicio Repetir Para i ���� 1 , 5 Repetir Para j ���� 1 , 8 Leer ( M(i,j) )
Fin para Fin para ……. Fin
Ej.: Se declara la matriz M como entero de 5 filas por 8 columnas. La lectura de sus elementos se realiza utilizando 2 estructuras de repetición. También se deben utilizar 2 estructuras de repetición
para la asignación y escritura de los elementos.
Facultad de Ciencias Exactas, Ingeniería y Agrimensura – UNR Informática I
Página 10 de 26
Cadena de caracteres CADENA DE CARACTERES: Una cadena de caracteres o string es un conjunto de caracteres – incluido el blanco – que se almacenan en un área contigua de la memoria.
La longitud de una cadena es el número de caracteres que contiene. La cadena que no contiene ningún carácter se denomina cadena vacía o nula, y su longitud es cero; no se debe confundir con una cadena compuesta sólo de blancos – espacios en blanco -, ya que ésta tendrá como longitud el número de blancos de la misma.
La representación de las cadenas suele ser, en la mayoría de los lenguajes, con comillas simples o dobles.
’12 de octubre 1492’
‘Por fin llegaste’
‘ ‘
‘AMERICA ES GRANDE’
Cadenas de longitud fija
Se consideran vectores con la cantidad de elementos declarados, si la cadena no tiene la cantidad de caracteres declarada los elementos no definidos se rellenan con valores nulos (cod. ASCII 0).
E S T A C A S A E S U N A R U I N A 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
Se declaró con una dimensión de 24 caracteres y los dos últimos se rellenaron con valores nulos.
Facultad de Ciencias Exactas, Ingeniería y Agrimensura – UNR Informática I
Página 11 de 26
Instrucciones básicas con cadenas Las instrucciones básicas con cadenas se realizan de modo similar al tratamiento de las instrucciones ya vistas. Declaración
Variables Cadena(longitud) : nombre donde longitud hace referencia a la cantidad de caracteres máximo que
va contener la cadena Asignar: la instrucción de asignación debe contener en el lado derecho de la asignación una constante tipo
cadena o bien otra variable del mismo tipo.
nombre ←←←← ‘informática I’
Entrada / Salida
Leer(nombre) el texto introducido por alguno de los dispositivos de entrada se asigna a la variable de tipo cadena nombre.
Escribir(nombre) el texto contenido en la variable de tipo cadena nombre aparece en alguno de los dispositivos de salida.
Facultad de Ciencias Exactas, Ingeniería y Agrimensura – UNR Informática I
Página 12 de 26
Operaciones con cadenas
� Cálculo de longitud � Comparación � Concatenación
Cálculo de la longitud de una cadena: la longitud de una cadena es el número de caracteres de la cadena.
Por ejemplo ‘Aprobaron el 55% el primer parcial’’ tiene 34 caracteres.
La operación de determinación de la longitud de una cadena se representará por la función longitud, cuyo formato es
Longitud(cadena)
El resultado de tal función es un valor numérico de tipo entero
Longitud(‘Don Quijote de la Mancha’) Proporciona el valor 24
Longitud(‘� � � ’) Cadena de tres blancos proporciona el valor 3
Longitud(‘� � � Informática’) Cadena ‘Informática’ rellenada con blancos a izquierda proporciona el valor 14
Por ser una función se puede considerar un dato de tipo entero y por consiguiente, puede ser un operando dentro de expresiones aritméticas.
4 + 5 + longitud(‘DEMO� ’) = 4 + 5 + 5 = 13
Facultad de Ciencias Exactas, Ingeniería y Agrimensura – UNR Informática I
Página 13 de 26
Comparación
La comparación de cadenas (igualdad y desigualdad) es una operación muy importante, sobre todo en la clasificación de dato tipo carácter, que se utiliza con mucha frecuencia en aplicaciones de proceso de datos (clasificación de listas, tratamiento de texto, etc). Los criterios de comparación se basan en el orden numérico del código o juego de caracteres ASCII.
El carácter ‘A’ (código 65) < el carácter ‘C’ (código 67)
El carácter ‘8’ (código 56) < el carácter ‘i’ (código 105)
Dos cadenas son iguales si la longitud de ambas cadenas es la misma y si todos sus caracteres son iguales entre si.
Los criterios para comprobar la desigualdad de cadenas utilizan normalmente los operadores de relación usuales <, <=, >=, <> y se ajustan a una comparación sucesiva de caracteres correspondientes en ambas cadenas hasta conseguir dos caracteres diferentes. De este modo, se puede conseguir clasificaciones alfanuméricas
‘GARCIA’ < ‘GOMEZ’
Ejemplos
‘LUIS’ < ‘LUISITO’ � Verdadero
‘TOMAS’ < ‘LUIS’ � Falso
‘LUIS’ < ‘LUIS ALBERTO’ � Verdadero
Facultad de Ciencias Exactas, Ingeniería y Agrimensura – UNR Informática
Página 14 de 26
Concatenación
La concatenación es la operación de reunir varias cadenas de caracteres en una sola, pero conservando el orden de los caracteres de cada una ellas.
El símbolo que representa la concatenación varía de unos lenguajes a otros. Los más utilizados son: +, //, &, O. En nuestro caso utilizaremos el símbolo +
Ejemplos
‘primer’ + ‘parcial’ + ‘informáticaI’ = ‘primerparcialinformáticaI’
Longitud(‘primer’) + Longitud(‘parcial’) + Longitud(‘informáticaI’) = Longitud(‘primerparcialinformáticaI’)
Facultad de Ciencias Exactas, Ingeniería y Agrimensura – UNR Informática
Página 15 de 26
Arreglos de cadenas de caracteres
También se pueden agrupar varias cadenas de caracteres y formar arreglos:
Variables Cadena(15) : Nombres(5)
J U A N C A R L O S A L B E R T O A N A M A R I A M A R C E L O A L E J A N D R A
Ejemplos
Nombres(1) � ‘JUAN CARLOS’
Escribir( Nombres(2) )
Repetir Para i �1 , 5
Leer(Nombres(I)) Fin Para
Facultad de Ciencias Exactas, Ingeniería y Agrimensura – UNR Informática
Página 16 de 26
Estructuras de datos: Registros
Un registro es una estructura de datos estática, porque el espacio de memoria que se reserva para todos sus elementos no puede modificarse una vez que se lo haya fijado y heterogénea porque sus elementos pueden ser de diferentes tipos, aunque esto no invalida que puedan ser de igual tipo. Cada componente o elemento de un registro se llama campo y se identifica por un nombre. Los campos de un registro se corresponden con lugares adyacentes de memoria y su funcionalidad es la misma que la de una variable
Nombre Legajo Nota Trabaja Tipo cadena Tipo cadena Tipo real Tipo lógico
campos
Para acceder a un campo, bastará con mencionar su nombre o identificador y el nombre del registro del que forma parte. Se usa un operador especial para separar ambos nombres: generalmente el símbolo será el punto Notación algorítmica en seudocódigo:
Identificador de la variable registro.Identificador del campo
Facultad de Ciencias Exactas, Ingeniería y Agrimensura – UNR Informática
Página 17 de 26
Declaración de registros La creación por parte del usuario de un registro requiere la creación de un nuevo tipo de dato estructurado. Se debe colocar una nueva sección en el algoritmo denominada “Tipo” Algoritmo EjemRegistro Tipo
Registro Alumno Cadena(longitud): nombre Cadena(longitud):legajo Real: Nota Lógico: Trabaja
Fin Variables
Alumno: R … Declaración del registro de un alumno cuyos campos son: Nombre, Legajo, Nota y Trabaja. La declaración realizada ha creado un tipo de dato estructurado estático llamado “Alumno” con cuatro campos. Una vez creado el tipo de dato por el usuario se lo utiliza en la declaración de variables. Hasta ese momento no existía ninguna variable asociada a este nuevo tipo de datos. Ahora la variable “R” tiene asociado el tipo de dato estructurado “Alumno” (la variable “R” almacena la información relativa a un alumno) No confundir: Alumno NO es una variable, sino un nuevo tipo de datos R es una variable que pertenece al tipo de datos Alumno
Facultad de Ciencias Exactas, Ingeniería y Agrimensura – UNR Informática
Página 18 de 26
Operaciones básicas La asignación de valores a un registro se realiza en forma individual campo por campo. R.nombre � ‘Juan’ asigna el valor “Juan” al campo nombre de la variable R Segmentos de algoritmos: … Leer (R.nombre) Leer (R.legajo) Leer (R.nota) Leer (R.trabaja) … … Escribir (‘El nombre del alumno es: ‘,R.nombre) Escribir (‘Legajo: ‘,R.legajo) Escribir (‘Nota primer parcial: ‘,R.nota) Escribir (‘Situación laboral: ‘,R.trabaja)
Facultad de Ciencias Exactas, Ingeniería y Agrimensura – UNR Informática
Página 19 de 26
Arreglos como campos de registros y arreglos de registros Un campo de un registro puede ser un arreglo: Tipo
Registro Alumno Cadena(longitud):nombre Cadena(longitud):legajo Real: Nota(7) Lógico: trabaja
Fin Variables
Alumno: R
Y también se puede tener un arreglo de registros: Tipo
Registro Alumno Cadena(longitud):nombre Cadena(longitud):legajo Real: Nota(7) Lógico: trabaja
Fin Variables
Alumno: com11(60)
Facultad de Ciencias Exactas, Ingeniería y Agrimensura – UNR Informática
Página 20 de 26
ORDENAMIENTO: MÉTODO de INTERCAMBIO o BURBUJA Problema: ordenar en forma ascendente el siguiente vector 50, 15, 56, 14, 35, 1, 12, 9
Solución: 1, 9, 12, 14, 15, 35, 50, 56 Aplicaremos el método de ordenamiento por intercambio (método de la burbuja)
Se basa en la comparación pares de elementos adyacentes e intercambiarlos si no satisfacen el orden que se quiere imponer.
50 15 56 14 35 1 12 9
A(1) A(2) A(3) A(4) A(5) A(6) A(7) A(8) Recurrencia:
1. Comparar A(1) y A(2); si están en orden, se mantienen como están, en caso contrario, se intercambian entre sí.
2. A continuación se comparan los elementos 2 y 3; de nuevo se intercambian si es necesario.
3. El proceso continúa hasta que cada elemento del vector ha sido comparado con sus elementos adyacentes y se han realizado los intercambios
necesarios.
Vector
Inicial
1ra
Comp.
2da
Comp.
3ra
Comp.
....
A(1) 50 15 15 15 15 15 15 15
A(2) 15 50 50 50 50 50 50 50
A(3) 56 56 56 14 14 14 14 14
A(4) 14 14 14 56 35 35 35 35
A(5) 35 35 35 35 56 1 1 1
A(6) 1 1 1 1 1 56 56 12
A(7) 12 12 12 12 12 12 12 9
A(8) 9 9 9 9 9 9 9 56
Paso 1
Facultad de Ciencias Exactas, Ingeniería y Agrimensura – UNR Informática
Página 21 de 26
MÉTODO de INTERCAMBIO o BURBUJA
Estado Inicial Después del
paso 1
Después del
paso 2
50 15 15
15 50 14
56 14 35
14 35 1
35 1 12
1 12 9
12 9 50
9 56 56
Completar como ejercicio la tabla siguiente.
Inicial Paso 1 Paso 2 .... Final
50 15 15 .... 1
15 50 14 9
56 14 35 12
14 35 1 14
35 1 12 15
1 12 9 35
12 9 50 50
9 56 56 56
Facultad de Ciencias Exactas, Ingeniería y Agrimensura – UNR Informática
Página 22 de 26
SEUDOCÓDIGO: MÉTODO de INTERCAMBIO o BURBUJA
Algoritmo Burbuja
Variables Real: A(100) // podría declararse el tipo Vector como Real o Caracter
Real : aux
Entero: i, j, N
Inicio Escribir (‘ Ingrese número de elementos’)
Leer(N) // cantidad de elementos máxima es 100
Repetir Para i � 1 , N
Leer( A(i) )
Fin para
Repetir Para i � 1 , N –1 // el índice i indica el paso que se está ejecutando
Repetir Para j � 1 , N – 1 // el índice j la comparación dentro de dicho paso
Si A(j) > A(j+1) entonces // de ser necesario se procede al intercambio de valores
Aux ← A(j)
A(j) ← A(j+1)
A(j+1) ← Aux
Fin si
Fin para
Fin para
Repetir Para i � 1 , N
Escribir (A(i))
Fin para
Fin
Facultad de Ciencias Exactas, Ingeniería y Agrimensura – UNR Informática
Página 23 de 26
BÚSQUEDA Dado: 50 15 56 14 35 9 12 19 Se trata de determinar si entre las componentes del vector aparece o no un determinado valor. En caso
afirmativo dar la o las posiciones donde ello ocurre.
Buscar si alguna componente es 9. El elemento 6 del vector satisface ese requerimiento. En cambio, si
buscamos el número 13, no hay ninguna componente con tal valor.
Métodos de búsqueda:
1) Búsqueda secuencial: .El algoritmo de búsqueda en un arreglo no necesariamente ordenado debe
recorrerlo componente por componente. Por esa razón el método se denomina secuencial.
2) Búsqueda dicotómica: El algoritmo de búsqueda requiere que el arreglo tenga sus componentes
ordenadas.
Sea n la cantidad de componentes de un vector ordenado de menor a mayor, en el cual queremos
encontrar un dato. Primero seleccionamos la componente cuyo subíndice es aproximadamente el punto
medio: int( (n+1) / 2 ). Si su valor es el del dato, se terminó la búsqueda. Si no, si el dato es menor que
esta componente, sabemos que habrá que seguir buscándolo en las componentes anteriores solamente, y
si es mayor, sólo en las componentes posteriores.
Facultad de Ciencias Exactas, Ingeniería y Agrimensura – UNR Informática
Página 24 de 26
SEUDOCÓDIGO: método de BÚSQUEDA DICOTÓMICA Algoritmo Bdicotomica
Variables real : x(100) , numero
entero: n, i, izq, der, centro
Inicio leer (n)
Repetir Para i � 1 , n
leer(x(i))
Fin para leer (numero) // dato a buscar
izq ← 1 // comienza la búsqueda
der ← n
centro ← int((izq + der)/2)
Repetir Mientras x(centro) <> numero y izq <= der
Si numero < x(centro) entonces
der ← centro - 1
sino izq ← centro + 1
Fin si centro ← int((izq + der)/2)
Fin mientras Si x(centro) = numero entonces
escribir (numero,’en posición’,centro)
sino escribir (‘no aparece’, numero)
Fin si
Fin
Facultad de Ciencias Exactas, Ingeniería y Agrimensura – UNR Informática
Página 25 de 26
Método de INTERCALACIÓN
Desarrollaremos un método que permita intercalar dos arreglos ordenados de igual forma, los cuales se van a combinar para producir un único arreglo, también ordenado. Dado A y B arreglos de un mismo tipo ordenados de igual manera (supongamos de menor a mayor), de dimensiones N y M respectivamente, se pretende crear un nuevo arreglo C de dimensión N+M con los elementos de A y B intercalados de manera tal que C resulte ordenado. Por ejemplo:
A 9
Intercalación
B 7
=
C 7 35 20 9 41 25 20 35 25 35 35 41
Facultad de Ciencias Exactas, Ingeniería y Agrimensura – UNR Informática
Página 26 de 26
SEUDOCÓDIGO: método de INTERCALACIÓN Algoritmo Intercalación
Variables Real: A(100), B(100), C(200)
Entero : i, j, k, L, N, M
Inicio Leer ( N)
LECTURA ( A, N) // la lectura de los arreglos se hace mediante un subalgoritmo
Leer ( M)
LECTURA (B, M)
i ← 1 // comienza la intercalación
j ← 1
k ← 0
Repetir mientras i <= N y j<= M
k ← k + 1
Si A(i) < B(j) entonces // se comparan los elementos de A y de B y se toma el más pequeño para colocarlo en C
C(k) ← A(i)
i ← i + 1
sino C(k) ← B(j)
j ← j + 1
Fin si
Fin mientras Si i <= N entonces // alguno de los dos arreglos A o B ya se habrán procesado todos sus elementos,
Repetir Para L � i , N // restando colocar en el arreglo C los que faltan procesar del otro arreglo. Pero como estos elementos ya
k ← k + 1 // están ordenados, simplemente se los copian en el arreglo C
C(k) ← A(L)
Fin para
sino Repetir Para L � j , M
k ← k + 1
C(k) ← B(L)
Fin para
Fin si ESCRITURA ( C, K) // la escritura del arreglo se hace mediante un subalgoritmo
Fin