Professional Documents
Culture Documents
Tercer semestre
COLABORADORES
DIRECTOR DE LA FCA
Dr. Juan Alberto Adam Siade
SECRETARIO GENERAL
L.C. y E.F. Leonel Sebastin Chavarra
COORDINACIN GENERAL
Mtra. Gabriela Montero Montiel
Jefe de la Divisin SUAyED-FCA-UNAM
COORDINACIN ACADMICA
Mtro. Francisco Hernndez Mendoza
FCA-UNAM
AUTORES
Mtro. Juan Manuel Martnez Fernndez
Lic. Ramn Castro Liceaga
DISEO INSTRUCCIONAL
L.P. Joel Guzmn Mosqueda
CORRECCIN DE ESTILO
Mtro. Francisco Vladimir Aceves Gaytan
DISEO DE PORTADAS
L.CG. Ricardo Alberto Bez Caballero
Mtra. Marlene Olga Ramrez Chavero
L.DP. Ethel Alejandra Butrn Gutirrez
DISEO EDITORIAL
Mtra. Marlene Olga Ramrez Chavero
Tercer semestre
2 de 51
OBJETIVO GENERAL
Al finalizar el curso el alumno ser capaz de entender la abstraccin; implantar, en un
lenguaje de programacin, las estructuras de datos fundamentales y avanzadas y
realizar ordenamientos y bsquedas.
TEMARIO OFICIAL
(64 horas)
Horas
1. Fundamentos de las estructuras de datos
16
16
4. Mtodos de ordenamiento
12
5. Mtodos de bsqueda
12
3 de 51
Tercer semestre
INTRODUCCIN
Las computadoras fueron diseadas como una herramienta mediante la cual se puede
realizar operaciones de clculo complicadas en un tiempo mnimo. La mayora de sus
aplicaciones son las de almacenamiento, clasificacin y acceso de grandes cantidades
de informacin, como por ejemplo el caso de un buscador en Internet.
Debido a que por lo general tenemos que tratar con grandes volmenes de datos, y no
con datos simples (enteros, reales, booleanos, etc.) que por s solos no nos dicen nada,
ni nos sirven de mucho, es necesario tratar con estructuras de datos adecuadas a cada
necesidad.
Las estructuras de datos son objetos con los cuales se representa el manejo y
ubicacin de la informacin en la memoria interna de la computadora. Se explican a
travs de modelos con los cuales se interpreta el manejo de la informacin en la
memoria interna de la computadora, por lo cual se administra el espacio en dicha
memoria.
4 de 51
Tercer semestre
ESTRUCTURA CONCEPTUAL
5 de 51
Tercer semestre
Unidad 1.
Fundamentos de las
estructuras de datos
6 de 51
Tercer semestre
OBJETIVO PARTICULAR
Al terminar la unidad, el alumno conocer las estructuras de datos, su relacin con los
tipos de datos y su importancia para la abstraccin de datos.
TEMARIO DETALLADO
(8 horas)
1. Fundamentos de las estructuras de datos
1.1. Definicin de estructura de datos
1.2. Tipos de datos
1.3. Tipos de datos abstractos
7 de 51
Tercer semestre
INTRODUCCIN
Los tipos de datos complejos se componen de varios tipos de datos simples ya sean
del mismo tipo o de distintos, segn las necesidades, pero aquellos se dividen en
estticos y dinmicos. En esta unidad estudiaremos los diferentes tipos de datos,
especialmente los abstractos y las estructuras ms simples alojadas en la memoria
principal que se estudian por dos razones fundamentales: la primera porque de ellas
se forman otras estructuras ms complejas y, la segunda, porque varios compiladores
actualmente tienen incluidos los tipos de datos estndar.
8 de 51
Tercer semestre
Los Tipos de Datos son objetos que representan tipos de informacin determinada
almacenada y manejada en las pginas de memoria interna de la computadora y se
utilizarn para una aplicacin.
9 de 51
Tercer semestre
Los tipos de datos ofrecidos por defecto en los compiladores son llamados estndar o
primitivos. Estos los abordaremos ms adelante.
Los tipos de datos manejados por la computadora bsicamente son dos, los numricos
y los alfanumricos. Los primeros estn representados por los nmeros naturales y
reales (enteros y fraccionarios) los cuales tienen ciertos rangos, en los cuales su
capacidad de alojar informacin est representada en primer instancia con un entero
(mantisa) y un exponente (fraccin) que en notacin cientfica sera 1000 = 10 * 10 2 o
10 E 3. En el mbito de la computacin; adems de considerar la mantisa y la fraccin,
hay que representar el signo, que para el positivo se usa el cero (0) y los negativos se
representan con el nmero uno (1).
10 de
51
Tercer semestre
Los tipos de datos estn ntimamente relacionados con las estructuras de datos, ya
que los tipos los ofrecen los compiladores actuales, posteriormente se les asignarn
nombres a variables, y las estructuras son organizaciones de datos que conforman
estructuras con propiedades y formatos englobados bajo identificadores asignados por
el usuario para emplearse en estructuras de programacin y as ofrecer una mayor
versatilidad que imponen las aplicaciones actuales del mundo real.
Los datos de tipo carcter se pueden unir y formar una cadena y despus otro tipo de
estructuras llamadas arreglos. Los de tipo entero pueden ser convertidos en su punto
decimal que estar en posiciones flotantes y no de manera fija como en el entero. En
el caso de Visual Basic hay otro tipo de dato particular como el Fix cuyo punto flotante
est fijo y el nmero de decimales se determinar como constante.
Los tipos de datos los podemos abordar como: tipos de datos simples estndar, que
son un conjunto de datos ms amplio que los tipos de datos primitivos, que son datos
necesarios para formar estructuras de datos; adems de los datos definidos por el
programador, tambin conocidos como datos incorporados . Veamos de qu se trata
cada uno.
Los tipos de datos estndar son aquellos que no presentan una estructura, son
unitarios y nos permiten almacenar un solo dato.
Entero
Real
El tipo real define un conjunto de nmeros que puede ser representado con
la notacin de punto-flotante, por lo que nos permite representar datos muy
grandes o muy especficos.
Carcter
Lgicos
Tercer semestre
Float
Subrango
Enumerativo
Como ejemplo de esta jerarqua de datos, podemos mencionar los siguientes tipos de
datos en el lenguaje Visual Basic.
String
Integer
Long integer
Puede
tener
cualquier
nmero
entero,
desde
(floating point)
13 de
51
Tercer semestre
Double-precision
(floating point)
Variant
Currency
Bolean
Byte
Otro tipo de datos de este lenguaje, son los de tipo fecha (Date), que pueden tener varios
formatos, con o sin separador, como puede ser DDMMYY (da, mes y ao) con sus
diferentes combinaciones como AAAAMMDD (ao, mes y da).
constante booleana o lgica, acepta el valor falso o verdadero (false o true), que se
representan con 0 y 1 respectivamente, en muchos lenguajes de programacin. El
valor de una constante booleana no cambia durante la ejecucin del programa.
Una variable booleana o lgica tambin acepta solamente uno de dos valores:
verdadero (true) o falso (false), pero el valor en cuestin puede cambiar durante la
ejecucin del programa.
En el siguiente ejemplo se muestra la implementacin de una variable de tipo Boolean
en lenguaje Visual Basic que almacena un nico parmetro de tipo s / no.
En otros casos, para generar un dato o valor lgico a partir de otros tipos de datos,
tpicamente, se emplean los operadores relacionales (u operadores de relacin), por
ejemplo: 0 es igual a falso y 1 es igual a verdadero. Por ejemplo:
(3>2)= 1 = verdadero
(7>9)= 0 = falso
sta define el tipo booleano y asigna a sus elementos FALSE y TRUE, los valores 0 y
1 respectivamente.
15 de
51
Tercer semestre
En Visual Basic, los booleanos o de tipo lgico son de tamao de un byte y slo podrn
contener un valor, ya sea un cero o un nmero uno; es decir falso o verdadero, y son
muy tiles en programacin para asignar un valor inicial a una bandera en un
programa de computadora, lo que podr cambiar dicho valor y entonces el programa
realizar otras acciones.
Operandos
Operador
Operacin
Resultado
35,9 (enteros)
>
35 > 9
verdadero
35,9 (enteros)
<
35 < 9
falso
35,9 (enteros)
==
35 = = 9
falso
35,9 (enteros)
!=
35 ! = 9
verdadero
5,5 (enteros)
<
5<5
falso
5,5 (enteros)
<=
5< =5
verdadero
5,5 (enteros)
!=
5!=5
falso
a, c
==
a = = c
falso
>=
a >= c
falso
<=
a < = c
verdadero
(caracteres)
a, c
(caracteres)
a, c
(caracteres)
17 de
51
Tercer semestre
Los Tipos de Datos Abstractos son modelos con los cuales se representan estructuras
con propiedades relativas a un tipo de dato que involucra objetos, los cuales tienen
atributos, y todos ellos servirn para desarrollar una aplicacin en particular.
Los TDA no hacen referencia a un tipo de dato especfico, sino que su finalidad es la
generalizacin de la definicin del objeto dentro del TDA con sus propiedades
establecidas. Los datos abstractos son el resultado de empacar un tipo de datos junto
con sus operaciones, de modo que pueda considerarse en trminos de sus
generalidades, sin que el programador tenga que preocuparse por una representacin
en memoria o la instruccin de sus operaciones.
Por ejemplo:
Siempre hay que tomar en cuenta que un TDA es un modelo abstracto para resolver
un problema en particular y generar el programa correspondiente. La finalidad es
aplicarse de forma general a los problemas semejantes, al originalmente planteado,
por lo que resulta independiente del compilador al cual se le encargar de interpretar
el programa fuente que cre el programador.
Parte de un sistema que no admite las variaciones que afectan a otras partes del
mismo.(http://www.wordreference.com/definicion/invariante, ref. 28/01/2013)
19 de
51
Tercer semestre
20 de
51
Tercer semestre
Precondici
n
Object1
Funcionalidad
A
Postcondi
cin
X(I J)
Dominio
X(A,J)
Object2
Propiedad
Altura
Anchura
Largo
Centmetros
Motor
Centmetros
CAPACIDAD
Cbicos
TDA de Auto
21 de
51
Tercer semestre
22 de
51
Tercer semestre
RESUMEN
En esta unidad estudiamos el concepto de lo que es una estructura de datos,
considerando los diferentes tipos de datos que se procesan.
Hemos visto que las Estructuras de Datos son modelos tericos que muestran la forma
en que la computadora maneja la informacin en la memoria interna. Son
organizaciones de datos que conforman estructuras con propiedades y formatos
englobados bajo identificadores asignados por el usuario para emplearse en
estructuras de programacin, simples o complejas y as ofrecer una mayor versatilidad
de manejo de informacin a las aplicaciones informticas actuales.
De igual modo, conceptualizamos los tipos de datos como un conjunto de valores que
se pueden tomar durante la ejecucin de un programa determinado.
23 de
51
Tercer semestre
BIBLIOGRAFA
SUGERIDA
Autor
Joyanes (1996)
Captulo
Pginas
7. Estructuras de datos I
274-283
24 de
51
Tercer semestre
Unidad 2.
Estructuras de
datos fundamentales
25 de
51
Tercer semestre
OBJETIVO PARTICULAR
Al terminar la unidad, el alumno conceptualizar los tipos de datos complejos, su
construccin a partir de datos simples y sus caractersticas principales para su
aplicacin en la solucin de problemas especficos.
TEMARIO DETALLADO
(16 horas)
2. Estructuras de datos fundamentales
2.1. Arreglos
2.1.1. Unidimensionales
2.1.2. Multidimensionales
2.1.3. Operaciones con arreglos
2.2. Pilas
2.2.1. Operaciones con pilas
2.3. Colas
2.3.1. Operaciones con colas
2.3.2. Bicolas
2.4. Listas
2.4.1. Listas simplemente enlazadas
2.4.2. Listas doblemente enlazadas
2.4.3. Listas circulares
2.4.4. Operaciones con listas
26 de
51
Tercer semestre
INTRODUCCIN
El manejo de los datos complejos se integran de varios tipos de datos simples, puede
ser procesando datos simples ya sea del mismo tipo o de varios tipos, segn sus
necesidades, para lo cual se dividen en Estticos y Dinmicos. Los tipos de datos
simples ocupan solo una casilla de memoria en los que podemos mencionar en
lenguaje C a los de tipo int, byte, short, long, doubl, float, char y boolean. Tenemos
tambin a los tipos de datos estructurados que hacen referencia a un grupo de casillas
de memoria como los Arreglos o vectores, archivos, rboles, registros, etc. En esta
unidad explicaremos las estructuras ya mencionadas.
27 de
51
Tercer semestre
2.1. Arreglos
Los arreglos son estructuras de datos compuestos en las que se utilizan uno o ms
subndices para identificar los elementos individuales almacenados, a los que es
posible tener acceso en cualquier orden (Cf. Joyanes, 1996).
Un arreglo tiene dos tipos de datos asociados, los numricos y los caracteres. Las dos
operaciones bsicas a realizar en un arreglo son la alimentacin y la extraccin. La
primera operacin, acepta un acceso a una posicin del arreglo con la ayuda de un
dato de tipo ndice, ya sea ordinario (entero), inicializndolo desde el 0. La segunda
operacin hace uso del ndice para llegar al elemento deseado para despus
eliminarlo.
28 de
51
Tercer semestre
Ejemplo.
A=
34
45
12
05
93
(0)
(1)
(2)
(3)
(4)
ndices
Datos
#include <stdio.h>
main() /* Rellenamos el arreglo del 0 al 9 */
{
int vector[10],i;
for (i=0;i<10;i++) vector[i]=i;
for (i=0;i<10;i++) printf(" %d",vector[i]);
}
29 de
51
Tercer semestre
Por ejemplo, en lenguaje C se definen igual que los vectores, excepto que se requiere
un ndice por cada dimensin. Su sintaxis es la siguiente:
Para el caso de un arreglo con estructura tridimensional, estar especificado por medio
de tres subndices: El primer ndice precisa el nmero del plano; el segundo el de la
fila; y el tercero, el de la columna. Este tipo de arreglo es til cuando se determina un
valor mediante tres entradas.
30 de
51
Tercer semestre
El ltimo subndice vara rpidamente y no aumenta, sino hasta que todas las
combinaciones posibles de los subndices a su derecha hayan sido completadas.
Lectura/Escritura
Asignacin
Actualizacin
31 de
51
Tercer semestre
- Insercin
- Eliminacin
- Modificacin
- Ordenacin
Bsqueda
6
7
Tercer semestre
Arreglos bidimensionales
Por ejemplo, una matriz de 2X3 (2 filas por 3 columnas), se inicializa de este modo
usando el lenguaje C/C++:
int matriz[2][3] = {
{ 20,50,30 },
{ 4,15,166 }
};
Una matriz de 3X4 (3 filas por 4 columnas), usando los mismos lenguajes, se inicializa
de este modo:
int numeros[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};
numeros[0][2]=3
numeros[0][3]=4
numeros[1][0]=5 numeros[1][1]=6
numeros[1][2]=7
numeros[1][3]=8
Otra manera de llenar el arreglo, es mediante una instruccin FOR anidada, como se
muestra en el siguiente cdigo:
33 de
51
Tercer semestre
En este ejemplo leemos los valores del arreglo con una instruccin scanf y los
mostramos con una instruccin printf. Ntese que en ambos casos utilizamos una
instruccin FOR anidada.
2.2 Pilas
Una pila (stack) es un tipo especial de lista en la que la insercin y borrado de nuevos
elementos se realiza slo por un extremo que se denomina cima o tope (SUA
Informtica II, 1998, pp. 63 y ss.).
35 de
51
Tercer semestre
Asimismo, una pila cuenta con 2 operaciones imprescindibles: apilar y desapilar. Sin
embargo las implementaciones modernas consideran otras operaciones adicionales
como son creacin de la pila, obtener el nmero de elementos de la pila, verificar el
elemento que est en el tope de la pila y saber si la pila se encuentra vaca.
bD
B
cA
Movimiento en la Pila
37 de
51
Tercer semestre
38 de
51
Tercer semestre
En la siguiente funcin, usando C++, cada vez que get() retira un elemento, el SP se
incrementa.
/* retirar elemento de la Pila */
int get()
{
if ( ! empty() ) {
SP ++;
ITEMS --;
}
return PILA[SP];
}
Implantacin de una Pila Dinmica
Esta implantacin es igual a la anteriormente mencionada, con la diferencia de que
una pila enlazada dinmicamente no tiene, de forma natural, el mecanismo de acceso
por ndices, por lo tanto el programador puede crear los algoritmos necesarios para
permitir tal comportamiento utilizando apuntadores o ligas a los nodos. Para tal efecto,
se crean estructuras conocidas como nodos o registros. Un registro en Lenguaje C o
C++, se define de la siguiente forma.
/* tipo de dato que contendr la Pila */
typedef char DATA_TYPE;
En esta estructura nodo, de tipo carcter, se define un apuntador que liga a next
(siguiente).
class StackDin {
// atributos
int ITEMS; /* nmero de elementos en la lista */
int ITEMSIZE; /* tamao de cada elemento */
40 de
51
Tercer semestre
nodo *SP;
/* puntero de lectura/escritura */
public:
// constructor de la pila dinmica
StackDin() : SP(NULL), ITEMS(0), ITEMSIZE(sizeof(DATA_TYPE)) {}
// destructor
~StackDin() {}
/* agregar componente a la lista */
DATA_TYPE put(DATA_TYPE valor)
{
nodo *temp;
temp = new nodo;
if (temp == NULL) return -1;
temp->data = valor;
temp->next = SP;
SP = temp;
ITEMS ++;
return valor;
}
int empty() { return ITEMS == 0; }
/* retirar elemento de la lista */
DATA_TYPE get()
{
nodo *temp;
DATA_TYPE d;
if ( empty() ) return -1;
d = SP->data;
temp = SP->next;
if (SP) delete SP;
SP = temp;
ITEMS --;
return d;
}
}; // fin de la clase StackDin
41 de
51
Tercer semestre
Con esta forma de implantacin de Pilas concluimos este tema, para pasar al siguiente,
de igual importancia en el mbito de estructuras de datos, como son las Colas.
2.3. Colas
En la vida cotidiana es muy comn ver las colas como formas organizativas para
agilizar los servicios de una empresa u organizacin escolar. En informtica, una cola
representa una estructura de datos en la cual slo se pueden insertar nodos en uno
de los extremos de la lista y slo se pueden eliminar nodos en el otro extremo. Tambin
se le llama estructura FIFO (First In First Out), debido a que el primer elemento en
entrar ser tambin el primero en salir. Al igual que las pilas, las escrituras de los datos
son inserciones de nodos y las lecturas siempre eliminan el nodo ledo.
Las colas se utilizan en sistemas informticos, bancos, empresas, servicios,
transportes y operaciones de investigacin (entre otros), donde los objetos,
transacciones, personas o eventos, son tomados como datos que se almacenan y se
guardan mediante colas para su posterior procesamiento. Este tipo de estructura de
datos abstracta tambin se implementa en lenguajes orientados a objetos mediante
clases, en forma de listas enlazadas.
42 de
51
Tercer semestre
// definicin de atributos
int ITEMS, ITEMSIZE;
nodo *cola, *cabeza;
public:
// constructor
QueueDin() : cola(NULL), cabeza(NULL), ITEMS(0),
ITEMSIZE(sizeof(DATA_TYPE)) {}
En la siguiente funcin de C++, cada vez que put() inserta un elemento a la
cola queda como cabeza y se incrementan los elementos (ITEMS) .
/* encolar un componente */
DATA_TYPE put(DATA_TYPE valor)
{
nodo *temp;
temp = new nodo;
if (temp == NULL) return -1;
ITEMS ++;
temp->data = valor;
temp->next = NULL;
if (cabeza == NULL)
{
cabeza = temp;
cola = temp;
} else
{
cola->next = temp;
cola = temp;
}
return valor;
}
44 de
51
Tercer semestre
En la siguiente funcin de C++, cada vez que get() saca un elemento de la cola la
cabeza se van recorriendo o disminuyendo los elementos (ITEMS)
/* desencolar un elemento */
DATA_TYPE get()
{
nodo *temp;
DATA_TYPE d;
if ( empty() ) return -1;
d = cabeza->data;
temp = cabeza->next;
if (cabeza) delete cabeza;
cabeza = temp;
ITEMS --;
return d;
}
Como ejercicio personal, puedes integrar los cdigos anteriores y hacer un programa
en C++ llamado ColaDinmica, y probarlo en un compilador para que tengas mayor
claridad de su funcionamiento.
Colas de prioridades
En ocasiones necesitaremos un algoritmo que nos ayude a seleccionar un elemento
de un grupo. A uno de los valores de la informacin agrupada en la estructura se le
llama prioridad, este es un valor entero, y el menor valor entero est asociado a la
estructura que tiene mayor prioridad. Prioridad se entiende como sinnimo de lo ms
importante. Puede haber varias estructuras con igual prioridad y en este sentido no
sern conjuntos.
Para efectos de estructuras de datos, una cola de prioridades, es una estructura en la
que los elementos se procesan en el orden indicado por una prioridad asociada a cada
uno de estos. En el caso de que varios elementos tengan la misma prioridad, el
45 de
51
Tercer semestre
Como un ejemplo de este tipo de estructura, es la que aplican los bancos al atender a
clientes especiales. Otro ejemplo tpico es la programacin, formando colas de
prioridades en el sistema de tiempo compartido necesario para mantener un conjunto
de procesos que esperan servicio para trabajar. Los diseadores y programadores de
esta clase de sistemas asignan cierta prioridad a cada proceso.
Crear
Aadir
Eliminar
Frente
Destruye
46 de
51
Tercer semestre
La doble cola con entrada restringida (DCER) donde se permite hacer eliminaciones
por cualquiera de los extremos mientras que las inserciones se realizan solo por el final
47 de
51
Tercer semestre
de la cola. La doble cola con salida restringida (DCSR) donde las inserciones se
realizan por cualquiera de los dos extremos, mientras que las eliminaciones solo por
el frente de la cola. Si bien estas estructuras estn ligadas a la computacin, impresin
y los sistemas de tiempo compartido, tambin las podemos observar en las vas de los
trenes.
Crear
Esvacia
InsertIzq
InserDer
Aade
un
elemento
por
el
extremo
derecho
(EncolarDerecha)
ElimnIzq
EliminDer
Vase en : http://www.geocities.ws/profeprog/P2TP05.PDF
48 de
51
Tercer semestre
size(),
49 de
51
Tercer semestre
items ++;
if (cabeza == NULL )
{
temp->next = NULL;
temp->prev = NULL;
cabeza = temp;
cola = temp;
} else
{
cabeza->prev = temp;
temp->next = cabeza;
cabeza = temp;
cabeza->prev = NULL;
}
return valor;
}
51 de
51
Tercer semestre
2.4. Listas
Una lista lineal es un conjunto de elementos de un tipo dado que se encuentren
ordenados (pueden variar en nmero). Los elementos de una lista se almacenan
normalmente de manera contigua (un elemento detrs de otro) en posiciones de la
memoria (vase, SUA, 1998, pp. 37 y ss.).
Una lista enlazada es una estructura de datos fundamental que se utiliza para
implementar otras estructuras de datos como fue el caso de las pilas y las colas
simples y doble cola. Tiene una secuencia de nodos, en los que se guardan campos
de datos arbitrarios y una o dos referencias, enlaces o apuntadores al nodo anterior o
posterior.
52 de
51
Tercer semestre
53 de
51
Tercer semestre
En algn lenguaje de muy bajo nivel, como XOR-Linking, ofrece una va para
implementar listas doblemente enlazadas, usando una sola palabra para ambos
enlaces, aunque el uso de esta tcnica no suele utilizarse.
Vase en
http://users.dcc.uchile.cl/~bebustos/apuntes/cc30a/Estructuras/http://users.dcc.uchile.cl/~bebustos/apuntes/cc30a/Estructuras/
54 de
51
Tercer semestre
55 de
51
Tercer semestre
En esta implantacin de lista enlazada en C se definen las libreras stdio.h para utilizar
instrucciones de salida como printf y stdlib.h, para facilitar el manejo dinmico de la
memoria con la funcin malloc. Se define la funcin list_add para agregar nuevos
elementos a la lista. En algunos compiladores no requieren un casting del valor del
retorno para malloc. La funcin list_remove eliminar los nodos de la lista. Se define
la funcin list_search para buscar nodos en la lista. Se define la funcin list_print
para mostrar los nodos de la lista. Al final del programa tenemos la funcin main() o
principal que ejecuta diferentes operaciones realizadas en esta lista enlazada.
57 de
51
Tercer semestre
Este lenguaje nos especifica que formar listas es algo que todos hacemos, ya que es
una estructura de longitud arbitraria con un nmero indeterminado de datos, por
ejemplo: cuando planeamos una fiesta se hace una lista de invitados, en un acuario se
hace una lista de las especies disponibles de peces, etc.
Vase en http://www.eng.utah.edu/~cs1410-20/f10/lecture7.pdf
Este ejemplo del acuario nos muestra las diferentes combinaciones de peces,
empezando con la lista vaca empty. Esta es la base por la cual se puede construir
una lista mayor, mediante la operacin cons. Por ejemplo:
(cons 'piraa empty)
La caja cons contiene dos campos: first y rest (el primer elemento y el resto de la lista).
En el ejemplo de los peces, el campo first contiene 'piraa y el campo rest contiene
empty.
Una vez que se cuenta con una lista que contiene un elemento, se pueden construir
con dos o ms elementos, empleando cons nuevamente.
Su campo rest contiene una caja que contiene una caja a su vez (pueden incluir
estructuras ms complejas).
Para analizar mejor la relacin que tiene first, rest y cons, se pueden emplear
ecuaciones similares a las ecuaciones que gobiernan la adicin, resta, creacin de
estructuras y extraccin de campos.
Ejemplos:
59 de
51
Tercer semestre
RESUMEN
En esta unidad estudiamos las estructuras de datos fundamentales, ya que el manejo
de los datos complejos se integra a partir de datos simples. stos se dividen en
estticos y dinmicos, a fin de optimizar el uso de memoria a travs del procesamiento
de estructuras de datos adecuadas. Las estructuras de datos estticas se identifican
como aquellas que, desde la compilacin, reservan un espacio fijo de elementos en
memoria como son los arreglos, vectores de una dimensin y matriz de n dimensiones.
Por otro lado, las estructuras de datos dinmicas son las que, en tiempo de ejecucin,
vara el nmero de elementos y uso de memoria a lo largo del programa; entre ellas
estn las lineales: son estructuras de datos bsicas porque se caracterizan en que
todos sus elementos estn en secuencia, en forma relacionada y lineal, uno luego del
otro. Donde cada nodo puede estar formado por uno o varios elementos que pueden
pertenecer a cualquier tipo de dato de los cuales normalmente son tipos bsicos; las
listas, que pueden ser listas simples enlazadas, doblemente enlazadas o enlazadas
circulares.
En las listas simples enlazadas siempre tienen un enlace o relacin por nodo, este
enlace apunta al siguiente o al valor NULL (indicador de que la lista esta vaca, si es
el ltimo nodo). En la lista doblemente enlazada tenemos una estructura de datos en
forma de lista enlazada de dos vas donde cada nodo tiene dos enlaces uno apunta al
nodo anterior, o apunta al valor NULL si es el primer nodo; y otro que apunta al nodo
siguiente, o apunta al valor NULL si es el ltimo nodo. En una lista enlazada circular,
el primer y el ltimo nodo estn enlazados en forma de anillo o crculo. Esto se puede
hacer tanto para listas enlazadas simples como para las doblemente enlazadas.
60 de
51
Tercer semestre
61 de
51
Tercer semestre
BIBLIOGRAFA
SUGERIDA
Autor
Captulo
Olimpiadas de
Estructura
Informtica
datos
Pginas
de http://www.olimpiadadeinformatica.org.mx/arc
hivos/apuntes/EstructurasDeDatos.htm
Cair, Osvaldo; Silvia Guardati. (2006) Estructura de datos. (3 ed.) Mxico: McGrawHill.
Toledo Salinas, Ana Mara. (2005). Qu es pilas?, (22/03/05), disponible en lnea.
62 de
51
Tercer semestre
Unidad 3.
Estructuras de datos avanzadas
63 de
51
Tercer semestre
OBJETIVO PARTICULAR
Al finalizar la unidad, el alumno conocer las estructuras de datos avanzadas y sus
principales aplicaciones en la solucin de problemas especficos mediante el uso
dinmico de la memoria.
TEMARIO DETALLADO
(16 horas)
3. Estructura de datos avanzadas
3.1. rboles
3.1.1. rboles binarios de bsqueda
3.1.2. Recorridos
3.1.3. Operaciones con rboles binarios de bsqueda
3.2. Grafos
3.2.1. Grafos dirigidos
3.2.2. Grafos ponderados
3.2.3. Operaciones con grafos
64 de
51
Tercer semestre
INTRODUCCIN
En esta unidad veremos dos de las estructuras ms importantes por el nmero de
aplicaciones que tienen en la vida real: los rboles y los grafos.
Los rboles y grafos son estructuras de datos que de alguna manera les llamamos
complejos porque permiten organizar y mantener informacin flexible y dinmica en
una computadora. Esta forma sale de la idea de organizar informacin con lpiz y papel
usando nodos y flechas entre los nodos (a esas flechas tambin se les llama arcos, a
los nodos tambin se les llama vrtices). Los grafos y rboles en papel son muy
utilizados en informtica y teora de redes, son muy apropiados para capturar slo una
parte de la informacin de objetos, situaciones y otros tipos de informacin relacional.
65 de
51
Tercer semestre
3.1. rboles
La organizacin de la informacin en la memoria interna de la computadora se
representa con estructuras de datos y el contenido de las pginas se representa con
tipos de datos simples con los cuales se pueden acceder, manejar y almacenar la
informacin.
Definiciones
a) Son un conjunto no vaco de vrtices (nodos) y aristas (enlaces) que cumple una
serie de requisitos (Sedgewick, 2000, p. 40).
b) Son Estructuras de Datos no lineales. Es una coleccin de nodos donde cada uno,
adems de almacenar informacin, guarda la direccin de sus sucesores (Guardati,
2007, p. 313).
Los rboles pueden tener o no Nodos Hijos. En caso de tenerlos, pueden existir
Nodos Hermanos.
66 de
51
Tercer semestre
Elementos de un rbol
67 de
51
Tercer semestre
Llenos
Binarios
Completos
Equilibrados
Por su
estructura
Degenerados
Balanceados
Tipos de
rboles
Binarios
Por su
recorrido
Binarios de
bsqueda
Multicamino
B
B+
B*
B+ Prefijos
De Bits
2-4
R
Obsrvese que:
a) B es un sucesor izquierdo y C un sucesor derecho del nodo A.
b) El subrbol izquierdo de la raz A consiste en los nodos B, D, E y F, y el subrbol
derecho de A consiste en los nodos C, G, H, J, K y L.
69 de
51
Tercer semestre
3.1.2. Recorridos.
Las dos maneras ms usuales de representar un rbol binario en memoria son:
Por medio de datos tipo puntero, tambin conocidos como variables dinmicas
Los nodos del rbol binario se representan como registros. Cada uno de ellos contiene
como mnimo tres campos. En un campo se almacenar la informacin del nodo. Los
dos restantes se utilizarn para apuntar los subrboles izquierdo y derecho,
respectivamente, del nodo en cuestin.
Dado el nodo T
IZQ
INFO
DER
70 de
51
Tercer semestre
3.
5
+
*
A
^
B
/
3.5
C
71 de
51
Tercer semestre
72 de
51
Tercer semestre
Como ejercicio personal, puedes integrar los cdigos que te sugiere la siguiente
pgina: http://c.conclase.net/edd/?cap=007c, para insertar un elemento y eliminar un
elemento de un rbol. Posteriormente obtener toda la aplicacin completa para
comprender mejor su funcionamiento.
3.2. Grafos
Un Grafo Simple G = (V,E) consiste en un conjunto de V de vrtices y un conjunto
posiblemente vaco E de aristas (edges), siendo cada arista un conjunto de dos
vrtices de V (Drozdek, 2007, p. 376).
Los grafos son Estructuras de Datos no lineales, en las cuales cada elemento puede
tener cero o ms sucesores y cero o ms predecesores. Estn formados por nodos
(vrtices: representan informacin) y por arcos (aristas: relaciones entre la
informacin) (Guardati, 2007, p. 391).
73 de
51
Tercer semestre
Representacin de un Grafo
Tipos de Grafos (vase, Sedgewick, 2000, pp. 515-547 y Guardati, 2007, pp. 393-446)
Tambin un grafo es una terna G = (V, A, j), en donde V y A son conjuntos finitos y j
es una aplicacin que hace corresponder a cada elemento de A un par de elementos
de V. Los elementos de V y de A se llaman, respectivamente, "vrtices" y "aristas" de
G, y j asocia entonces a cada arista con sus dos vrtices.
Si el dibujo puede efectuarse sin que haya superposicin de lneas, se dice que G es
un grafo plano. Por ejemplo, el siguiente es un grafo plano:
75 de
51
Tercer semestre
Vase:
http://docencia.udea.edu.co/regionalizacion/teoriaderedes/informaci%F3n/C3_minimos.pdf
Bsqueda
profundidad (BEP)
77 de
51
Tercer semestre
78 de
51
Tercer semestre
Bsqueda en anchura A diferencia con la BEP ahora se visitan todos los vecinos
(BEA)
80 de
51
Tercer semestre
A A A ... A
2
Implantacin de Grafos
Pgina: http://www.myjavazone.com/2010/12/estructura-de-datos-grafos.html
// Clase Principal
package Clases;
import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Vector;
import javax.swing.*;
public class Principal extends JApplet{
PanelDibujo pd;
int max=0;
JTextField valor;
public void init(){
pd=new PanelDibujo();
add(pd);
JPanel pdatos=new JPanel();
JButton agregar=new JButton("Agregar Nodo");
agregar.addActionListener(new ActionListener(){
@Override
public void actionPerformed(ActionEvent e) {
if(max<10){
try{
Grafo gf=new Grafo(""+Integer.parseInt(valor.getText()));
pd.getVgrafos().add(gf);
pd.repaint();
repaint();
max++;
}catch(NumberFormatException ne){
JOptionPane.showMessageDialog(null, "Digite un numero valido");
}
82 de
51
Tercer semestre
}
}
});
valor=new JTextField(5);
pdatos.add(new JLabel("Valor Vertice" + ""));
pdatos.add(valor);
pdatos.add(agregar);
add(pdatos,BorderLayout.SOUTH);
}
}
// Clase PanelDibujo
package Clases;
import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.util.Vector;
import javax.swing.*;
public class PanelDibujo extends JPanel {
int x=150;
int y=150;
int ancho=30;
int alto=30;
public Vector<Integer> xvs;
public Vector<Integer> yvs;
public Vector<Grafo> vgrafos;
int indice=0;
public PanelDibujo(){
vgrafos=new Vector(); xvs=new Vector<Integer>();
yvs=new Vector<Integer>();
setDoubleBuffered(true);
}
public void paintComponent(Graphics grafico){
super.paintComponents(grafico);
Graphics2D g=(Graphics2D)grafico;
if(vgrafos.size()!=0){
g.setColor(Color.WHITE);
g.fillRect(0, 0, getWidth(), getHeight());
83 de
51
Tercer semestre
g.setColor(Color.BLACK);
int radio = 100;
float angulo = 360/10;
angulo = (float) Math.toRadians(angulo);
for(int i=indice;i<vgrafos.size();i++){
int xv=(int)(x+radio*Math.cos(i * angulo));
int yv=(int) (y- radio * Math.sin(i * angulo));
xvs.add(xv);
yvs.add(yv);
indice++;
}
}
for(int i=0;i<vgrafos.size();i++){
for(int j=0;j<vgrafos.size();j++){
g.setStroke(new BasicStroke(2));
g.setColor(Color.BLACK);
g.drawLine(xvs.get(i)+15,yvs.get(i)+15,xvs.get(j)+15,yvs.get(j)+15);
g.setColor(Color.WHITE);
g.fillOval(xvs.get(i), yvs.get(i), ancho, alto);
g.setColor(Color.BLACK);
g.drawOval(xvs.get(i),yvs.get(i), ancho, alto);
g.drawString(""+vgrafos.get(i).obtenerDato(),xvs.get(i)+((ancho/2)-3),
yvs.get(i)+((alto/2)+3));
g.setColor(Color.WHITE);
g.fillOval(xvs.get(j), yvs.get(j), ancho, alto);
g.setColor(Color.BLACK);
g.drawOval(xvs.get(j),yvs.get(j), ancho, alto);
g.drawString(""+vgrafos.get(j).obtenerDato(),xvs.get(j)+((ancho/2)-3),
yvs.get(j)+((alto/2)+3));
}
}
}
public Vector<Grafo> getVgrafos() {
return vgrafos;
}
public void setVgrafos(Vector<Grafo> vgrafos) {
this.vgrafos = vgrafos;
}
}
// Clase Grafo
package Clases;
import java.util.Vector;
84 de
51
Tercer semestre
85 de
51
Tercer semestre
RESUMEN
En esta unidad hemos definido las estructuras de rbol e identificado sus elementos y
los tipos de rboles ofrecidos por los compiladores ms comunes, de igual modo,
entendimos que un rbol binario T se define como un conjunto finito de elementos,
llamados nodos, de forma que:
Por otra parte, tambin abordamos el tema de los grafos, que se han definido como
Estructuras de Datos no lineales, en las cuales cada elemento puede tener cero o ms
sucesores, y cero o ms predecesores; estn formados por nodos (vrtices:
representan informacin) y por arcos (aristas: relaciones entre la informacin). La
teora de Grafos se aplica hoy en da en muchos campos, tales como en Internet, redes
sociales, etc., ya que cada computador es un vrtice y la conexin entre ellos son las
aristas; adems se puede usar para hallar la ruta ms corta en empresas de transporte
y en muchas otras reas.
86 de
51
Tercer semestre
BIBLIOGRAFA
SUGERIDA
Autor
Captulo
Pginas
Lipschutz (1988)
337 y ss.
Guardati (2007)
--
87 de
51
Tercer semestre
Unidad 4.
Mtodos de ordenamiento
88 de
51
Tercer semestre
OBJETIVO PARTICULAR
Al concluir la unidad, el alumno identificar los diferentes mtodos para la clasificacin
de datos, identificar sus caractersticas y los criterios para seleccionar el ms
adecuado a un conjunto de datos determinado.
TEMARIO DETALLADO
(12 horas)
4. Mtodos de ordenamiento
4.1. Intercambio Directo (Bubblesort)
4.2. Intercambio Inverso
4.3. Shaker Sort
4.4. Insercin Directa
4.5. Seleccin Directa
4.6. Shell
4.7. Quick Sort
4.8. Criterios de seleccin de mtodos de ordenamiento
89 de
51
Tercer semestre
INTRODUCCIN
Una de las operaciones ms importantes en el manejo de datos es su ordenamiento.
Los algoritmos de ordenamiento nos permiten, como su nombre lo dice, ordenar o
clasificar la informacin. El sort, ordenacin, es reagrupar un grupo de datos en una
secuencia especfica de orden ya sea de mayor a menor o menor a mayor. Muchas de
estas operaciones las vemos en las hojas de clculo como Excel, en pginas de
Internet y Bases de Datos. Nos centraremos en los mtodos ms populares,
analizando la cantidad de comparaciones que suceden, el tiempo que demora y
ejemplificando con pseudocdigo o cdigo en lenguaje de programacin.
90 de
51
Tercer semestre
Ejemplo:
Sea un arreglo de 6 nmeros de empleados: {40,21,4,9,10,35}:
Primera pasada:
{21,40,4,9,10,35} <-- Se cambia el 21 por el 40.
{21,4,40,9,10,35} <-- Se cambia el 40 por el 4.
{21,4,9,40,10,35} <-- Se cambia el 9 por el 40.
{21,4,9,10,40,35} <-- Se cambia el 40 por el 10.
{21,4,9,10,35,40} <-- Se cambia el 35 por el 40.
Segunda pasada:
{4,21,9,10,35,40} <-- Se cambia el 21 por el 4.
{4,9,21,10,35,40} <-- Se cambia el 9 por el 21.
{4,9,10,21,35,40} <-- Se cambia el 21 por el 10.
91 de
51
Tercer semestre
Ya estn ordenados, pero para comprobarlo habra que acabar esta segunda
comprobacin y hacer una tercera.
92 de
51
Tercer semestre
{
int A[10];
llenavector(A,10);
printf("ORDENAMIENTO BUBBLE SORT \n");
printf("Numeros a ordenar: \n");
salida(A,10);
printf("\n\nNumeros ordenados: \n");
bubblesort(A,10);
salida(A,10);
getch();
}
94 de
51
Tercer semestre
95 de
51
Tercer semestre
derecha del arreglo almacenando en otra variable la posicin del ltimo elemento
intercambiado.
96 de
51
Tercer semestre
}
izq= j + 1;
for(i = izq; i <= der; i++)
if (a[i -1] > a[i])
{ swap (a, i, i -1)
j = i;
}
der= j - 1;
} while (izq <= der);
}
int array[N];
int i,j,aux;
// Define un arreglo de 10 nmeros
// Dar valores a los elementos del arreglo
for(i=1;i<N;i++) // i contiene el nmero de elementos de la sublista.
{ // Se intenta aadir el elemento i.
aux=array[i];
for(j=i-1;j>=0;j--) // Se recorre la sublista de atrs a adelante para buscar
{ // la nueva posicin del elemento i.
if(aux>array[j]) // Si se encuentra la posicin:
{
array[j+1]=aux; // Ponerlo
break; // y colocar el siguiente nmero.
}
else // si no, sigue buscndola.
array[j+1]=array[j];
}
if(j==-1) // si se ha mirado todas las posiciones y no se ha encontrado la correcta
array[0]=aux; // es que la posicin es al principio del todo.
}
99 de
51
Tercer semestre
1 pasada: En esta pasada se busca entre los ltimos elementos el menor de todos, y
lo intercambiaremos con la primera posicin.
44, 52, 11, 37, 49 Para buscar el menor, necesitaremos una instruccin for que
recorra los n ltimos elementos.
44, 52, 11, 37, 49
2 pasada: En la segunda pasada buscamos entre los ltimos n-1 (es decir, 4)
elementos el menor de todos, y lo intercambiaremos con la segunda posicin.
11, 52, 44, 37, 49
en orden.
100 de
51
Tercer semestre
3 pasada: En esta pasada buscamos entre los ltimos n-2 (es decir, 3) elementos el
menor de todos, y lo intercambiaremos con la tercera posicin.
11, 37, 44, 52, 49
en orden.
11, 37, 44, 49, 52
Vease: http://latecladeescape.com/algoritmos/1122ordenacion-por-selecciondirecta-selectionsort
Con base en lo anterior, podemos implementar en Lenguaje C o C++ la siguiente
funcin:
void seleccion_directa(int n)
{
int i,j,min,k;
int cambio;
for(i=0;i<n;i++)
{
min=arr[i];
k=0;
cambio=0;
for(j=i+1;j<n;j++)
{
if (arr[j]<min)
{
min=arr[j];
k=j;
cambio=1;}
101 de
51
Tercer semestre
}
if (cambio )
{
arr[k]=arr[i];
arr[i]=min;
}
}
4.6. Shell
A continuacin comentamos el mtodo Shell sort.
El mtodo Shell Sort tambin lo puedes encontrar como mtodo de insercin con
incrementos decrecientes creado por Donald Shell y consiste en realizar mltiples
recorridos al arreglo y en cada pasada ordena un nmero igual de elementos.
Cada elemento se compara con los que le siguen a su izquierda. Si el elemento a
insertar es menor, se tiene que ejecutar muchas comparaciones antes de colocarlo en
su lugar definitivamente. El mtodo Shell agiliza los saltos contiguos resultantes de las
comparaciones por saltos de mayor tamao y con eso se obtiene una ordenacin ms
rpida. El mtodo se basa en tomar como salto N/2 (siendo N el nmero de elementos)
y luego reduciendo a la mitad el arreglo en cada repeticin hasta que el salto o
distancia vale 1.
60, 11,
55,
22,
33,
44,
10
Referente a la eficiencia de este mtodo podemos decir que, el tamao del conjunto
de datos utilizados en las comparaciones tiene un impacto significativo en la eficiencia
del algoritmo. Algunas implementaciones de este algoritmo tienen una funcin que
permite calcular el tamao ptimo del set de datos para un arreglo determinado. Su
implementacin original, requiere O(n2) comparaciones e intercambios en el peor
caso; sin embargo, el Shell Sort es una versin mejorada del ordenamiento por
insercin comparando elementos separados por un espacio de varias posiciones. Esto
permite que un elemento haga "pasos ms grandes" hacia su posicin esperada. Los
pasos mltiples sobre los datos, se hacen con tamaos de espacio cada vez ms
pequeos. El ltimo paso del Shell Sort simplemente es un ordenamiento por insercin;
pero para entonces, ya est garantizado que los datos del arreglo estn ordenados.
103 de
51
Tercer semestre
104 de
51
Tercer semestre
arr[der]=aux;
}
}
arr[ini]=arr[der];
arr[der]=x;
if(ini<der-1) Quicksort_Recursivo (ini,der-1);
if(der+1 <fin) Quicksort_Recursivo (der+1,fin);
}
}
}
Otro de los criterios para seleccionar el mtodo que vamos a utilizar, es considerar si
se requiere el ordenamiento interno o externo. Cuando hablamos de ordenamiento
interno, se lleva a cabo completamente en memoria principal. Todos los objetos que
se ordenan caben en la memoria principal de la computadora. En cambio, en el
ordenamiento externo no cabe toda la informacin en memoria principal y es necesario
ocupar memoria secundaria. El ordenamiento ocurre transfiriendo bloques de
informacin a la memoria principal en donde se ordena el bloque y se regresa ya
ordenado, a la memoria secundaria.
106 de
51
Tercer semestre
RESUMEN
En esta unidad partimos del mtodo de ordenamiento bubble sort, ya que es un
algoritmo de ordenamiento de datos simple y popular. Se utiliza frecuentemente como
un ejercicio de programacin, porque es relativamente fcil de entender y
comprendimos cmo implementar el mtodo de clasificacin shaker en aplicaciones
de estructuras de datos. La idea bsica de este algoritmo consiste en mezclar las dos
formas en que se puede realizar el mtodo bubble sort. El algoritmo de la variable que
almacena el extremo izquierdo del arreglo es mayor que el contenido de la variable
que almacena el extremo derecho.
El mtodo bubble Sort, insercin y seleccin, tiene una complejidad normal de entrada
n que puede resolverse en n2 pasos. Mientras que el mtodo Quicksort tiene una
complejidad mayor que incluye una bsqueda binaria, logartmica y recursiva, por tanto
es el algoritmo de ordenamiento ms rpido teniendo una complejidad O(n log2 n)
siendo posiblemente el algoritmo ms rpido.
107 de
51
Tercer semestre
BIBLIOGRAFA
SUGERIDA
Autor
Captulo
Sorting
Algorithm
Animations
Pginas
http://www.sortingalgorithms.com/
Kruse, Robert L; Tondo, Clovis; Leung, Bruce. (1997). Data Structures & Program
Design in C. (2nd ed.) Prentice Hall
108 de
51
Tercer semestre
Unidad 5.
Mtodos de bsqueda
109 de
51
Tercer semestre
OBJETIVO PARTICULAR
Al concluir la unidad, el alumno identificar y aplicar los mtodos de bsqueda y podr
seleccionar el ms adecuado para un conjunto de datos determinado.
TEMARIO DETALLADO
(12 horas)
5. Mtodos de bsqueda
5.1. Bsqueda secuencial
5.2. Bsqueda Binaria
5.3. Bsqueda por transformacin de llaves (Hash)
5.3.1. Funciones Hash
5.3.2. Resolucin de colisiones
5.4. Bsqueda en rboles binarios
110 de
51
Tercer semestre
INTRODUCCIN
Una de las actividades ms importantes de la informtica es la bsqueda de los datos.
El ejemplo ms concreto lo vivimos a diario cuando tenemos que hacer consultas en
cualquiera de los buscadores de Internet.
111 de
51
Tercer semestre
En este ltimo caso, cuando slo interesa la primera posicin, se puede utilizar un
centinela (bandera); esto es, dar a la posicin siguiente al ltimo elemento de arreglo
el valor del elemento, para estar seguros de que se encuentra el elemento, y no tener
que comprobar a cada paso si seguimos buscando dentro de los lmites del arreglo:
112 de
51
Tercer semestre
array[N]=elemento;
for(i=0;;i++)
if(array[i]==elemento)
break;
El elemento buscado 33 es menor que el central 55, debe estar en el primer subarreglo:
10, 22, 33, 40
Se divide el subrrango en dos quedando el 22
Como el elemento buscado es mayor que el central, debe estar en el segundo
subarreglo: 33, 40
Se vuelve a dividir este subrrango y como el elemento buscado coincide con el central
33, lo hemos encontrado.
Si al final de la bsqueda todava no lo hemos encontrado, y el subarreglo por dividir
est vaco {}, el elemento no se encuentra en el arreglo.
Eficiencia de este mtodo.
Este mtodo es ms eficiente que el de bsqueda secuencial o lineal para casos de
grandes volmenes de datos y para mejorar su velocidad se puede implementar en
forma recursiva, siendo una funcin que divide el arreglo en dos ms pequeos
elementos.
114 de
51
Tercer semestre
Elementos
ndices
Transformacin
Jos Luis
78
Jos Luis-5589343464
Mara
55
Mara-5577003423
Pedro
Ral
12
42
Pedro-5598334388
Ral-5589233390
En este ejemplo el nuevo ndice obtenido nos permite el acceso a las personas por su
nmero telefnico almacenados a partir de una clave especial generada.
hash es que sirva como una representacin compacta de la cadena de entrada. Por
esta razn decimos que estas funciones resumen datos del conjunto dominio.
Funciona transformando la clave con una funcin hash en un hash, un nmero que
identifica la posicin donde la tabla hash localiza el valor deseado.
116 de
51
Tercer semestre
117 de
51
Tercer semestre
En el ambiente de programacin de Visual Studio crea una ventanita con las siguientes
caractersticas:
Name=textBox1
Text=Buscar
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.IO;
namespace Hash
{
public partial class Form1 : Form
{
private int[] datos = new int[5] {1679, 4567, 1165, 0435, 5033 };
private int[] hash = new int[7];
private int[] enlace = new int[7];
public Form1()
{
InitializeComponent();
for (int b = 0; b <= 6; b++)
{
enlace[b] = -9999;
}
//Reacomodo por hash
int r, aux=0;
for (int i = 0; i <= 4; i++)
118 de
51
Tercer semestre
{
r= datos[i] % 7;
if (datos[i] == 0)
{
hash[r] = datos[i];
}
else
{
for(int s=0;s<=6;s++)
{
if(hash[s]==0)
{
aux=s;
}
}
hash[aux]=datos[i];
enlace[r] = aux;
}
}
}
private void button1_Click(object sender, EventArgs e)
{
int temp,r;
temp = int.Parse(textBox1.Text.ToString());
r = temp % 7;
if (temp == hash[r])
{
MessageBox.Show("Se encuentra en \nel renglon:" + r.ToString(),
"Resultado");
}
else
{
while(enlace[r] != -9999)
{
if (temp == hash[enlace[r]])
{
MessageBox.Show("Se encuentra en \nel renglon:" +
enlace[r].ToString(), "Resultado");
r = enlace[r];
}
}
}
}
}
}
119 de
51
Tercer semestre
Ejecuta tu aplicacin.
Imgenes del programa corriendo:
Ejemplo:
Reglas a cumplir:
RESUMEN
En esta unidad identificaste los diferentes mtodos de bsqueda aplicados a las
estructuras de datos para el desarrollo de sus aplicaciones, entendimos que todos los
algoritmos de bsqueda tienen dos finalidades:
En la bsqueda secuencial hay que recorrer y examinar cada uno de los elementos
del arreglo hasta encontrar el o los elementos buscados, o hasta que se han mostrado
todos los elementos del arreglo.
Para la bsqueda binaria, el arreglo debe estar ordenado. Este tipo de bsqueda
consiste en dividir el arreglo por su elemento medio en dos subarrays ms pequeos,
y comparar el elemento con el del centro. Este mtodo tambin se puede implementar
de forma recursiva, siendo la funcin recursiva la que divide al arreglo en dos ms
pequeos.
122 de
51
Tercer semestre
BIBLIOGRAFA
SUGERIDA
Autor
Luis Joyanes Aguilar
Captulo
Pginas
Fundamentos de Programacin:
355p
Cair, Osvaldo; Guardati, Silvia. (2006). Estructura de datos. (3 ed.) Mxico: McGrawHill.
Rodrguez Baena, Luis; Fernndez Azuela, Matilde y Joyanes Aguilar, Luis. (2003).
Fundamentos de Programacin: algoritmos, estructuras de datos y
objetos. (2 ed.). Madrid: McGraw-Hill.
123 de
51
Tercer semestre
124 de
51
Tercer semestre