Está en la página 1de 26

Facultad de Ciencias Exactas, Ingeniería y Agrimensura – UNR Informática

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.

Página 1 de 26
Facultad de Ciencias Exactas, Ingeniería y Agrimensura – UNR Informática

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)

Página 2 de 26
Facultad de Ciencias Exactas, Ingeniería y Agrimensura – UNR Informática

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.

Página 3 de 26
Facultad de Ciencias Exactas, Ingeniería y Agrimensura – UNR Informática

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.

Página 4 de 26
Facultad de Ciencias Exactas, Ingeniería y Agrimensura – UNR Informática

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 REPETIR PARA i 1,4 REPETIR PARA i 1 , 4


A(2) ← 1.01 LEER (A(i)) ESCRIBIR (A(i))
A(3) ← 5 FIN PARA FIN PARA
A(4) ← 5.5

REPETIR PARA i 1,4 i←1 ESCRIBIR (A(1), A(3))


A(i) 0 REPETIR MIENTRAS i <= 4 ESCRIBIR (A(1)*A(4)+A(2))
FIN PARA LEER (A(i))
i←i+1
FIN MIENTRAS

Página 5 de 26
Facultad de Ciencias Exactas, Ingeniería y Agrimensura – UNR Informática

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 Ejemplo: Lectura de 20 valores enteros. Acumular los
Leer (F(i)) datos en un arreglo de 20 elementos de nombre F.
Fin para
…….
Fin
Algoritmo leer_vector2
Variables
Real : Z(100)
Entero : i Ejemplo: no necesariamente tiene que utilizarse toda la
Inicio memoria reservada al inicio.
Repetir Para i 1 , 70
Leer (Z(i))
Fin para
…….
Fin

Página 6 de 26
Facultad de Ciencias Exactas, Ingeniería y Agrimensura – UNR Informática

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

Página 7 de 26
Facultad de Ciencias Exactas, Ingeniería y Agrimensura – UNR Informática

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


C, Pascal almacenan los arreglos por fila;
B(1,2) → B(2,1) → Dirección X+1 mientras que FORTRAN lo hace por
columnas.
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

Página 8 de 26
Facultad de Ciencias Exactas, Ingeniería y Agrimensura – UNR Informática I

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 Ej.: Se declara la matriz M como entero de 5 filas por 8
Inicio columnas. La lectura de sus elementos se realiza
Repetir Para i 1 , 5 utilizando 2 estructuras de repetición.
Repetir Para j 1 , 8
Leer ( M(i,j) ) También se deben utilizar 2 estructuras de repetición
Fin para para la asignación y escritura de los elementos.
Fin para
…….
Fin

Página 9 de 26
Facultad de Ciencias Exactas, Ingeniería y Agrimensura – UNR Informática I

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.

Página 10 de 26
Facultad de Ciencias Exactas, Ingeniería y Agrimensura – UNR Informática I

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.

Página 11 de 26
Facultad de Ciencias Exactas, Ingeniería y Agrimensura – UNR Informática I

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

Página 12 de 26
Facultad de Ciencias Exactas, Ingeniería y Agrimensura – UNR Informática I

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

Página 13 de 26
Facultad de Ciencias Exactas, Ingeniería y Agrimensura – UNR Informática

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’)

Página 14 de 26
Facultad de Ciencias Exactas, Ingeniería y Agrimensura – UNR Informática

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

Página 15 de 26
Facultad de Ciencias Exactas, Ingeniería y Agrimensura – UNR Informática

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

Página 16 de 26
Facultad de Ciencias Exactas, Ingeniería y Agrimensura – UNR Informática

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

Página 17 de 26
Facultad de Ciencias Exactas, Ingeniería y Agrimensura – UNR Informática

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)

Página 18 de 26
Facultad de Ciencias Exactas, Ingeniería y Agrimensura – UNR Informática

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)

Página 19 de 26
Facultad de Ciencias Exactas, Ingeniería y Agrimensura – UNR Informática

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 1ra 2da 3ra ....


Inicial Comp. Comp. 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

Página 20 de 26
Facultad de Ciencias Exactas, Ingeniería y Agrimensura – UNR Informática

MÉTODO de INTERCAMBIO o BURBUJA


Estado Inicial Después del Después del
paso 1 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

Página 21 de 26
Facultad de Ciencias Exactas, Ingeniería y Agrimensura – UNR Informática

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

Página 22 de 26
Facultad de Ciencias Exactas, Ingeniería y Agrimensura – UNR Informática

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.

Página 23 de 26
Facultad de Ciencias Exactas, Ingeniería y Agrimensura – UNR Informática

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

Página 24 de 26
Facultad de Ciencias Exactas, Ingeniería y Agrimensura – UNR Informática

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 B 7 C 7
35 20 9
41 25 20
Intercalación
35 = 25
35
35
41

Página 25 de 26
Facultad de Ciencias Exactas, Ingeniería y Agrimensura – UNR Informática

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

Página 26 de 26

También podría gustarte