Structura de Datos
Structura de Datos
Structura de Datos
2
ÍNDICE
Introducción 4
Mapa conceptual 6
Unidad 1. Arreglos 7
Mapa conceptual 8 Introducción 9
1.1. Conceptos 10
1.2. Arreglos unidimensionales 11
1.3. Arreglos bidimensionales 16
1.4. Arreglos de tres o más dimensiones 19
Autoevaluación 23
3
Mapa conceptual 57
Introducción 58
4.1. Representación en memoria 59
4.2. Listas enlazadas 59
4.3. Listas doblemente enlazadas 64
4.4. Operaciones con listas 66
4.5. Problemas 69
Autoevaluación 73
Unidad 5. Árboles 74
Mapa conceptual 75
Introducción 76
5.1. Terminología 77
5.2. Árboles binarios y representaciones gráficas 78
5.3. Recorrido de un árbol 81
5.4. Árboles enhebrados 83
5.5. Árboles de búsqueda 85
5.6. Problemas 86
Autoevaluación 107
Bibliografía 118
Glosario 119
INTRODUCCIÓN
4
En la actualidad, la eficiencia de un programa informático va de la mano con las
técnicas de programación que se emplean en su desarrollo, partiendo desde la
elaboración de diagramas de flujo de datos, hasta la escritura de los códigos para
el desarrollo del software. Lo anterior busca el acceso a los datos de la
información de una manera ordenada mediante instrucciones válidas, empleando
una secuencia lógica.
UNIDAD 1
ARREGLOS
7
OBJETIVO
Analizar el uso e implementación de los arreglos para la resolución de problemas
de datos estructurados, mejorando el tiempo de desarrollo y eficacia de los
sistemas.
TEMARIO
1.1. CONCEPTOS
1.2. ARREGLOS UNIDIMENSIONALES
1.3. ARREGLOS BIDIMENSIONALES
1.4. ARREGLOS DE TRES O MÁS DIMENSIONES
8
MAPA CONCEPTUAL
INTRODUCCIÓN
9
10
1.1. CONCEPTOS
Un arreglo es una estructura de datos lineal, “un arreglo puede definirse como un
grupo o una colección finita, homogénea y ordenada de elementos.”1 Donde finita
significa que debe tener un límite de elementos, homogénea que los elementos
deben de ser del mismo tipo de datos, y ordenada porque se puede conocer cuál
es el primer elemento, los subsiguientes o el último.
No. Elemento
0 1 2 3 ……. n
Elementos
Fig.1.1. Representación de un arreglo
1
Osvaldo Cairó /Silvia Guardati , Estructuras de datos, pág. 4
11
Indice
0 1 2 3 ……. n
Datos
12 22 45 77
Donde:
Arreglo. Es la palabra reservada para crear los arreglos
Nombre_Arreglo. Representa el Nombre que emplearemos para referirnos
al arreglo
Tipo. Es el tipo de datos que almacenará ese arreglo, hay que recordar que
los arreglos son homogéneos y pueden ser cualquier tipo ordinal (cadena, entero,
booleano, real, etc.)
13
La representación gráfica del anterior arreglo, se presenta en la siguiente
ilustración:
Índice
0
1
2
3
Edad 4
5
… ….
9
Edad [ 0 ] = 33;
14
Para actualizar el contenido de un componente del arreglo, sólo basta con
reasignarle el valor, como una variable simple, el anterior valor se elimina para
dar paso al nuevo valor.
• Lectura.
• Escritura.
• Actualización.
• Ordenación.
• Búsqueda.
Arreglo [ i ] valor
Actualización. En este proceso, las operaciones consideradas como
actualización, son los procesos de eliminar, insertar y modificar datos, tomando
en cuenta si los datos están ordenados o no.
15
Ordenación. Este proceso consiste en reordenar los datos del arreglo tomando
un criterio, por ejemplo, ordenar los datos numéricos de mayor a menor, ordenar
las cadenas alfabéticamente, etc. Los métodos de ordenamiento serán
abordados con detalle más adelante.
Inicio
Definir Max 100 definir arreglo
“Arreglo_Edad” desde i=0 hasta i <
Max
leer Edad;
Arreglo_edad[ i ] edad
Suma Suma + Arreglo_edad [ i ] Fin_desde
PromedioSuma/Max
Des i=0 hasta i < Max
Tempo Arreglo_Edad[i]
Si Tempo > Promedio entonces
Arriba_Prom=Arriba_Prom + 1
Fin_Si
Fin_desde
Imprimir Arriba_Prom
Fin_Inicio
1 import javax.swing.JOptionPane;
2
3 public class ArregloUni {
4 public static void main(String[] args) {
5 int Max=100, Suma=0, Promedio=0,Tempo=0, Arriba_Prom=0;
6 String Edad;
7 int Arreglo_Edad[]=new int[Max]; // Declaraccion del arreglo
8 for (int i=0; i<Max;i++){
9 Edad= JOptionPane.showInputDialog("Edad:");
10 Arreglo_Edad [ i ] = Integer.parseInt (Edad);
16
11 Suma += Arreglo_Edad [ i ];
12 }
13 Promedio=Suma/Max;
14
15 for (int i=0; i<Max;i++){
16 Tempo=Arreglo_Edad[i];
17 if (Tempo>Promedio){
18 Arriba_Prom++;
19 }
20 }
21
22 JOptionPane.showMessageDialog(null, "El número de edades arriba
del promedio es "+Arriba_Prom);
23
24 }
25 }
ACTIVIDAD DE APRENDIZAJE
1.- Desarrolla un programa que permita la captura de las ventas de un
Comisionista de forma mensual, mostrando al final la venta Promedio, la venta
más alta y la más baja.
2
Osvaldo Cairó /Silvia Guardati, Estructuras de datos, p. 19.
18
Las operaciones empleadas en un arreglo como la lectura, escritura,
actualización, ordenamiento y búsqueda, seguirán el mismo método de los
arreglos unidimensionales, con la diferencia de los dos índices.
String Datos[]=
{“Matricula”,”;Materia1”,”Materia2”,”Materia3”,”Materia4”,”Materia5”}; int
Registros [ ] [ ] = new int [ 30 ][ Datos.length ];
1 import javax.swing.JOptionPane;
2
3 public class Bidi {
4
5 public static void main(String[] args) {
6 int NoAlumno=2;
7 String DatoSimple;
8 String Datos[ ] = { "Matricula","Materia 1","Materia 2","Materia
3",
"Materia 4","Materia 5" };
9 int Registros [ ] [ ] = new int [ 30 ][ Datos.length ]; 10
19
14 DatoSimple=JOptionPane.showInputDialog("Ingresa la "
+ Datos[ j ] + " del alumno"+ (i+1));
15 Registros[i][j]=Integer.parseInt(DatoSimple);
16 }
17 }
18
19 JOptionPane.showMessageDialog(null, "Datos capturados
completamente...");
20
21 }
22
23 }
ACTIVIDAD DE APRENDIZAJE
1. Desarrolla un programa que permita la captura de las ventas de 30
Comisionistas de forma mensual, mostrando al final la venta Promedio, la venta
más alta y más baja.
20
El anterior gráfico representa un arreglo de tres dimensiones con un total
de 105 elementos, esto es porque tiene siete filas, cinco columnas y tres
profundidades.
En una empresa desean registrar las ventas de dos empleados que venden
cinco productos, además de controlarlo por las tres semanas que estuvieron
trabajando. La solución sería manejar un arreglo tridimensional de la siguiente
forma:
21
Fig. 1.6.- Arreglo de 3 filas (Semanas), 2 columnas (Empleados) y
5 profundidades (Productos)
12 Arreglo_Datos[i][j][k]=Integer.parseInt(Valor);
13 }
14 }
15 }
22
16 }
17 }
ACTIVIDAD DE APRENDIZAJE
1.- Desarrolla un programa que permita la captura de las ventas de 20
Comisionista de forma mensual y de cinco productos diferentes, mostrando al
final la venta Promedio, la venta más alta y más baja de cada vendedor.
23
AUTOEVALUACIÓN
1.- Puede definirse como un grupo o una colección ( ) int x [ ] [ ]= int [3][4];
finita, homogénea y ordenada de elementos.
9.- Significa que un arreglo debe ser del mismo tipo ( ) Bidimensionales
Respuesta: 6, 5, 10, 1, 9, 8, 2, 7, 3, 4.
UNIDAD 2
PILAS Y COLAS
24
OBJETIVO
Comprender los conceptos de Pilas y Colas, analizando las formas de manejar el
acceso a datos, partiendo de sus fundamentos básicos.
TEMARIO
2.1. DEFINICIONES Y REPRESENTACIONES
2.2. NOTACIONES INFIJAS, PREFIJAS, POSTFIJAS EN EXPRESIONES
2.3. INSERCIÓN Y REMOCIÓN DE DATOS EN UNA PILA (LIFO)
2.4. INSERCIÓN Y REMOCIÓN DE DATOS EN UNA COLA SIMPLE Y CIRCULAR
2.5. PROBLEMAS
25
MAPA CONCEPTUAL INTRODUCCIÓN
Una de las características de los arreglos vistos en la unidad anterior, es que los
datos pueden ser insertado o actualizados en cualquier posición y en cualquier
26
El manejo de las Pilas y las Colas incluye muchas restricciones a la forma
de acceder a los datos, cada una de modo diferente, las cuales también se
detallarán en el transcurso de la presente Unidad.
27
2.1. DEFINICIONES Y REPRESENTACIONES
Uno de los conceptos que más se emplean en las estructuras de datos lineales,
en la elaboración de programas, son las pilas. Éstas son aplicadas en cuanto a
las restricciones sobre el acceso a los datos del arreglo, ya sea para insertar o
eliminar elementos, actualizando el contenido de los registros.
Iniciemos por definir el término fundamental de una pila como “una lista de
elementos en la cual se puede insertar y eliminar elementos sólo por uno de los
dos extremos.”3
Para tener una comprensión más clara de lo que es una pila, imagine el
acomodo de latas de un producto X en un centro comercial. O bien el apilamiento
de libros en una biblioteca.
3
Osvaldo Cairó/Silvia Guardati, Estructuras de datos, p. 75. Cfr.
http://www.cesarportela.com.ar/facultad/08-grafos2005.pdf
28
estructura. Las pilas son empleadas en el desarrollo de sistemas informáticos y
software en general. Por ejemplo, el sistema de soporte en tiempo de compilación
y ejecución de Pascal, utiliza una pila para llevar la cuenta de los parámetros de
procedimientos y funciones, variables locales, globales y dinámicas. Este tipo de
estructuras también son utilizadas para traducir expresiones aritméticas o cuando
se quiere recordar una secuencia de acciones u objetos en el orden inverso del
ocurrido.
Los ejemplos sobre este mecanismo de acceso, son visibles en las filas de
un banco, los clientes llegan (entran) se colocan en la fila y esperan su turno para
salir.
ACTIVIDAD DE APRENDIZAJE
1.-Realizar una investigación y entregar un resumen donde se comprenda el
concepto pilas y colas.
4
Goodrich/Tamassia, Estructura de datos y algoritmos en Java, p. 215.
29
2.2. NOTACIONES INFIJAS, PREFIJAS, POSTFIJAS EN EXPRESIONES
1. Aumentar la pila
2. Inicializar el conjunto de operaciones
3. Mientras no exista error y no es fin de la expresión infija realizar:
o Si el carácter es igual a
1. PARENTESIS IZQUIERDO. Colocarlo en la pila
2. PARENTESIS DERECHO. Extraer y desplegar los valores
hasta encontrar paréntesis izquierdo. Pero NO desplegarlo.
3. UN OPERADOR.
Si la pila está vacía o el carácter tiene más alta
prioridad que el elemento del tope de la pila insertar el
carácter en la pila.
ACTIVIDAD DE APRENDIZAJE
1.- Realizar una investigación y entregar un resumen, donde se comprenda el
concepto de las notaciones.
• Arreglos.
• Listas enlazadas.
31
se debe definir el tamaño máximo de la pila, además de un apuntador al último
elemento insertado en la pila, el cual se denomina SP. La representación gráfica
de una pila es la siguiente, denotando como TOPE al T-enésimo
56 33 22 32
32
Para implementar el concepto de pilas, se usará como base a los arreglos,
éstos estarán limitados a un número máximo de elementos, lo que no permitirá
agregar otros registros.
Existen cuatro operaciones básicas que son válidas para el tipo de datos
pila, las cuales son las siguientes:
• Lleno (Pila).
• Vacio (Pila).
• Agregar (Elementos, Pila).
• Eliminar (Pila).
Res1 Verdadero
Si_no
Res1 Falso
Fin_Si
Fin_Si
ACTIVIDAD DE APRENDIZAJE
1. Desarrolla un programa que permita controlar los autos que entran en un
estacionamiento, empleando el número de placa, a través de pilas.
• Como arreglos.
• Como listas ordenadas.
Al igual que las pilas, trataremos las colas como arreglos, en donde
debemos definir el tamaño de la cola y dos apuntadores, uno para accesar el
34
primer elemento de la lista y otro que guarde el último. En lo sucesivo, al
apuntador del primer elemento se le denominará Inicial, al de el último elemento
Final y Max, para definir el número máximo de elementos en la cola.
35
demás. El sistema operativo mantiene colas para peticiones de imprimir, leer o
escribir en cada uno de estos dispositivos.
• Insertar.
• Eliminar.
Algoritmos 1. InsertarDato
Si Final < Max entonces
Final Final + 1
Cola [ Final ] Dato
Si Final=1 entonces
Inicial 1
Si_no
Mostrar “Error”
Fin_si
Fin_si
36
Colas circulares
Las colas lineales tienen un grave problema, como las extracciones sólo pueden
realizarse por un extremo, puede llegar un momento en que el apuntador Inicial
sea igual al máximo número de elementos en la cola, siendo que al frente de la
misma existan lugares vacíos, y al insertar un nuevo elemento nos mandará un
error.
Inicial Final
21 45 12 32
Max
37
Fig. 2.5. Cola circular
38
ACTIVIDAD DE APRENDIZAJE
1. Desarrolla un programa que permita controlar los autos que entran en un
estacionamiento, empleando el número de placa, a través de colas circulares.
2.5 PROBLEMAS
import javax.swing.JOptionPane;
39
switch(op){ case
1:{AgregarPila(); break;} case
2:{BorrarPila(); break;} case
3:{MostrarPila(); break;}
}
}
40
public void BorrarPila(){
PilaVacia(); if
(Res2==true){
import javax.swing.JOptionPane;
}
}
Dato=JOptionPane.showInputDialog("Codigo:");
42
Cola[Final]=Integer.parseInt(Dato);
Final++; if (Final==1) Frente=0;
} else
JOptionPane.showMessageDialog(null,"No hay elementos
disponibles en Cola..");
System.out.print(Frente+"-"+Final);
Frente=-1;
Final=0;
} else {
Frente++;
}
} else
{
JOptionPane.showMessageDialog(null,"Datos Vacios");
}
}
}
AUTOEVALUACIÓN
43
2.- Estos elementos son eliminados en orden ( ) Agregar
inverso al que se insertaron. Es decir, el último en
entrar es el primero en salir.
Respuestas: 6, 7, 2, 5, 3, 4, 1
44
UNIDAD 3
OBJETIVO
Identificar y analizar los métodos más comunes para el ordenamiento y las
búsquedas de la información dentro de estructuras de datos.
TEMARIO
3.1. MÉTODO DE BURBUJA
3.2. MÉTODO SHELL
3.3. MÉTODO DE QUICKSORT
3.4. BÚSQUEDA SECUENCIAL
3.5. BÚSQUEDA BINARIA
45
MAPA CONCEPTUAL
INTRODUCCIÓN
46
En el procesamiento de datos podemos encontrar dos tipos de
ordenamientos, los de arreglo y los de archivo. Los primeros se refieren a los
datos que se encuentran almacenados en la memoria de la computadora como
pueden ser los arreglos. Los de archivo son aquellos que se encuentran
almacenados en un medio de almacenamiento como los discos duros.
Este método logra la idea básica de la burbuja, que cada valor flote a su
posición adecuada mediante comparaciones en pares. Cada paso hace que el
valor suba a su posición final, como una burbuja. Ilustremos el concepto con los
siguientes valores:
4
7
3
2
9
1
6
Como se ha dicho, la burbuja sube, por lo que cada valor se compara con
el que se encuentra arriba de ella, y se intercambia, si la de arriba es más
pequeña, después de una pasada, habrá cambios en el ordenamiento como se
ilustra a continuación:
47
Fig. 3.1 Método de Burbuja Primer ordenamiento
Algoritmo:
Repetir con I desde 2 hasta N
Repetir con J desde N hasta I
Si A [ J – 1 ] > A [ J ] entonces
Tempo A [ J-1 ]
A [ J-1 ] A [ I ]
A [ I ] Tempo
Fin_Si
Fin_Repetir
Fin_Repetir
48
ACTIVIDAD DE APRENDIZAJE
1. Desarrolla un programa que permita ingresar y ordenar la siguiente numeración
33, 45, 67, 8, 12, 32, 56, 7, 9, 10, 22, 45, 98, 9. De forma ascendente y
descendente, usando el método de burbuja.
Ejemplo: Se desean ordenar las siguientes claves del arreglo : 15, 67, 08,
16, 44, 27, 12, 35, 56, 21, 13, 28, 60, 36, 07, 10
La ordenación produce:
15, 21, 08, 16, 44, 27, 07, 10, 56, 67, 13, 28, 60, 36, 12, 35
La ordenación produce:
15, 21, 07, 10, 44, 27, 08, 16, 56, 36, 12, 28, 60, 67, 13, 35
ACTIVIDAD DE APRENDIZAJE
1. Realizar y entregar una investigación sobre el método Shell con ejemplos 2.
Desarrolla un programa que permita ingresar y ordenar la siguiente numeración
33, 45, 67, 8, 12, 32, 56, 7, 9, 10, 22, 45, 98, 9. De forma ascendente y
descendente, usando el método de Shell.
50
Como se explicó, primero se toma como punto de pivote al primer
elemento, en este caso el 21. En segundo lugar se realizan las búsquedas
(Izquierda-Derecha) se encuentra el valor 40, la otra búsqueda encuentra el valor
10 (Derecha-Izquierda). Se realiza el intercambio quedando de la siguiente forma:
{21,10,4,9,40,35}
El ciclo de las búsquedas se reinicia encontrando el valor 40 como mayor,
y el valor 9 como el elemento menor, en este caso ya se cruzaron las búsquedas,
así que se procede a cruzar el menor con el pivote, quedando:
{9,10,4,21,40,35}
Partiendo del punto del pivote, dividiremos el arreglo en otros dos más
pequeños {9,10,4} y el {40,35}, ahora el método de ordenamiento QuickSort se
aplica a cada uno de los arreglos.
ACTIVIDAD DE APRENDIZAJE
1. Realizar y entregar una investigación sobre el método Quicksort con
ejemplos.
51
se llegue al final del arreglo. La existencia se puede asegurar desde el momento
en que el elemento es localizado, pero no se puede asegurar la no existencia
hasta no haber analizado todos los elementos del arreglo.
Algoritmo:
Iniciar
I1
BanderaFalso
Repetir mientras (I<=N) y (Bandera=Falso)
Si V [ I ] =X entonces Bandera=Verdadedo
Si_no I=I+1
Fin_si
Fin_Repetir
Si Bandera=Verdadero entonces
Mostrar “Elemento en la Posición I”
Si_no
Mostrar “Elemento no encontrado”
Fin_si
Fin_Inicio
ACTIVIDAD DE APRENDIZAJE
1. Realizar y entregar una investigación sobre el término búsqueda y
búsquedas secuenciales.
52
Se utiliza cuando el vector en el que queremos determinar la existencia o no de
un elemento está ordenado, o puede estarlo, este algoritmo reduce el tiempo de
búsqueda considerablemente, ya que disminuye exponencialmente con el
número de iteraciones.
Este algoritmo está altamente recomendado para buscar en arreglos
enormes: En uno de 50 000 000 elementos, tarda 26 iteraciones en ejecutarse 1,
suponiendo que la búsqueda falla, sino, siempre tarda menos en buscarlo.
53
Si X=V [Cen] entonces
BanderaVerdadero
Si_no
Si X>v[Cen] entonces
IzqCen+1
Si_no
Der Cen-1
Fin_si
Fin_si
Fin_si
Si (Bandera=Verdadero) entonces
Mostrar “Elemento en la posición Cen”
Si_No
Mostrar ”Elemento no está en registro”
Fin_si
Fin_Inicio
ACTIVIDAD DE APRENDIZAJE
1. Realizar y entregar una investigación sobre el términos búsqueda binaria.
2. Desarrolla un programa que permita ingresar 30 números. Luego debe permitir
realizar la búsqueda de uno de los números, cualesquiera, empleando la
búsqueda binaria.
AUTOEVALUACIÓN
54
4.- Este método consiste en acomodar los ( ) Búsqueda secuencial vectores
moviendo el mayor hasta la última casilla comenzando desde la casilla cero, esto
se logra comparando valores de llaves e intercambiarlos si no están en una
posición relativa correcta
Respuesta: 5, 6, 4, 7, 3, 8, 2, 1
55