Академический Документы
Профессиональный Документы
Культура Документы
ESTRUCTURA DE DATOS
APUNTES
PROFESOR.
ING. JUAN MANUEL HERNNDEZ ESPINOSA
CONTENIDO
Tema
Pgina
Objetivo General.................................................................................................3
Introduccin........................................................................................................4
Organizacin elemental de los datos.............................................................10
Introduccin a arreglos....................................................................................28
Introduccin a pilas..........................................................................................46
Introduccin a listas enlazadas.......................................................................50
Introduccin a rboles binarios......................................................................60
Introduccin rboles generales......................................................................65
Introduccin a grafos.......................................................................................67
Bibliografa........................................................................................................74
OBJETIVO GENERAL
El objetivo por el cual fueron creadas estas notas sobre Estructura de Datos, es el establecer
un material de apoyo y consulta para ti que eres alumno de Ing. en Computacin, Lic en
Sist. Comp., Lic. en Informtica o de cualquier otra rea afn en la cual se imparta la
materia de Estructura de Datos.
Una vez que hayas terminado de revisar detenidamente este material, sers capaz de
establecer estructuras lgicas de datos que te permitan hacer un uso ms eficiente del
espacio de memoria, de minimizar los tiempos de acceso, as como de lograr formas ms
efectivas de insercin y eliminacin de datos en estructuras de almacenamiento.
Ahora que ya sabes en lo que te puede ayudar estos apuntes, puedes empezar a hacer uso de
l, consultando todas tu tareas y dudas que tengas acerca de la materia.
INTRODUCCION
Como ya sabemos, las computadoras fueron diseadas o ideadas como una
herramienta mediante la cual podemos realizar operaciones de clculo
complicadas en un lapso de mnimo tiempo. Pero la mayora de las aplicaciones
de este fantstico invento del hombre, son las de almacenamiento y acceso de
grandes cantidades de informacin.
La informacin que se procesa en la computadora es un conjunto de datos, que
pueden ser simples o estructurados. Los datos simples son aquellos que ocupan
slo un localidad de memoria, mientras que los estructurados son un conjunto de
casillas de memoria a las cuales hacemos referencia mediante un identificador
nico.
Debido a que por lo general tenemos que tratar con conjuntos 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 una coleccin de datos cuya organizacin se
caracteriza por las funciones de acceso que se usan para almacenar y
acceder a elementos individuales de datos.
Una estructura de datos se caracteriza por lo siguiente:
-Pueden descomponerse en los elementos que la forman.
-La manera en que se colocan los elementos dentro de la estructura afectar
la forma en que se realicen los accesos a cada elemento.
-La colocacin de los elementos y la manera en que se accede a ellos puede
ser encapsulada.
Notacin numrica:
En C/C++ se usan tres tipos de numeracin para la definicin de
constantes numricas, la decimal, la octal y la hexadecimal, segn se
use la numeracin en base 10, 8 16, respectivamente.
Por ejemplo, el nmero 127, se representar en notacin decimal como
127, en octal como 0177 y en hexadecimal como 0x7f.
En notacin octal se usan slo los dgitos del '0' al '7', en hexadecimal,
se usan 16 smbolos, los dgitos del '0' al '9' tienen el mismo valor que
en decimal, para los otros seis smbolos se usan las letras de la 'A' a la
'F', indistintamente en maysculas o minsculas. Sus valores son 10
para la 'A', 11 para la 'B', y sucesivamente, hasta 15 para la 'F'.
Segn el ejemplo el nmero 0x7f, donde "0x" es el prefijo que indica que
se trata de un nmero en notacin hexadecimal, sera el nmero 7F, es
decir, 7*16+15=127. Del mismo modo que el nmero 127 en notacin
decimal sera, 1*10+2*10+7=127. En octal se usa como prefijo el dgito
0. El nmero 0177 equivale a 1*8+7*8+7=127.
De este modo, cuando trabajemos con operaciones de bits, nos resultar
mucho ms sencillo escribir valores constantes usando la notacin
hexadecimal u octal. Por ejemplo, resulta ms fcil predecir el resultado
de la siguiente operacin:
Que:
A = 0xaa & 0x55;
En ambos casos el resultado es 0, pero en el primero resulta ms
evidente, ya que 0xAA es en binario 10101010 y 0x55 es 01010101, y la
operacin "AND" entre ambos nmeros es 00000000, es decir cero.
10
11
12
Diagrama de Flujo
Diagrama de flujo: Un diagrama de flujo es la forma ms tradicional de especificar los
detalles algortmicos de un proceso. Estos diagramas utilizan una serie de smbolos con
significados especiales. Son la representacin grfica de los pasos de un proceso, que se
realiza para entenderlo mejor2
Flecha:
el
y
Indica
sentido
trayectoria
del
proceso
de
informacin o tarea.
Rectngulo:
Se
usa
para
representar un evento o proceso determinado. ste es controlado dentro
del diagrama de flujo en que se encuentra. Es el smbolo ms
comnmente utilizado. Se usa para representar un evento que ocurre de
forma automtica y del cual generalmente se sigue una secuencia
determinada.
Rombo: Se utiliza para representar una condicin. Normalmente el flujo
de informacin entra por arriba y sale por un lado si la condicin se
cumple o sale por el lado opuesto si la condicin no se cumple. El rombo
adems especifica que hay una bifurcacin.
Crculo: Representa un punto de conexin entre procesos. Se utiliza
cuando es necesario dividir un diagrama de flujo en varias partes, por
ejemplo por razones de espacio o simplicidad. Una referencia debe darse
dentro para distinguirlo de otros. La mayora de las veces se utilizan
nmeros en los mismos.
Definicin~~ http://es.wikipedia.org/wiki/Diagrama_de_flujo
13
14
Ejemplo
15
16
Notacin en Pseudocdigo
Pseudocdigo: Representacin de un algoritmo en lenguaje natural a
travs de las estructuras de control3
Por tanto, el pseudocdigo:
Es fcilmente comprensible para una persona que lo vea por vez
primera.
Est bien delimitado.
Elimina las ambigedades del lenguaje natural.
Se representa de una forma compacta.
De esta forma, el pseudocdigo se suele ver como un subconjunto de un
lenguaje natural que proporciona un nmero limitado de operaciones
para la construccin de algoritmos; la nica finalidad del pseudocdigo
(como de los organigramas) es la comunicacin entre seres humanos. A
continuacin se muestra un ejemplo de algoritmo descrito mediante un
pseudocdigo:
escribir Deme los coeficientes y resolver una ecuacin de
2 grado
escribir Cunto vale A?
leer a
escribir Cunto vale B?
leer b
escribir Cunto vale C?
leer c
17
secuencia
seleccin
iteracin
18
Recursividad:
La recursividad es una tcnica de programacin importante. Se utiliza
para realizar una llamada a una funcin desde dentro de la misma
funcin, es decir una llamada a s misma. Como ejemplo til se puede presentar
el clculo de nmeros factoriales. l factorial de 0 es, por definicin, 1.
Los factoriales de nmeros mayores se calculan mediante la
multiplicacin de 1 * 2 *..., incrementando el nmero de 1 en 1 hasta
llegar al nmero para el que se est calculando el factorial.
19
20
21
22
1.5 Matrices
Una matriz (array ) es una zona de almacenamiento contiguo, que
contiene una serie de elementos del mismo tipo.
Sintaxis:
tipo variable_matriz[N][M];
23
1.6 Registros
Es un tipo de dato estructurado formado por la unin de varios
elementos bajo una misma estructura. Estos elementos pueden ser, o
bien datos elementales (entero, real, carcter,...), o bien otras
estructuras de datos. A cada uno de esos elementos se le llama campo.
Un registro se diferencia de un vector en que ste es una coleccin de
datos iguales, es decir, todos del mismo tipo, mientras que en una
estructura los elementos que la componen, aunque podran serlo, no
tiene porque ser del mismo tipo.
Sintaxis:
typedef struct TipoNodo
{
int dato;
struct TipoNodo *sig;
struct TipoNodo *ant;
24
Supongamos que nos enfrentamos a un problema como este: Una empresa que cuenta con
150 empleados, desea establecer una estadstica sobre los salarios de sus empleados, y
quiere saber cual es el salario promedio, y tambin cuantos de sus empleados gana entre
$1250.00 y $2500.00.
Si tomamos la decisin de tratar este tipo de problemas con datos simples, pronto nos
percataramos del enorme desperdicio de tiempo, almacenamiento y velocidad. Es por eso
que para situaciones de este tipo la mejor solucin son los datos estructurados.
Un arreglo puede definirse como un grupo o una coleccin finita, homognea y ordenada
de elementos. Los arreglos pueden ser de los siguientes tipos:
De una dimensin.
De dos dimensiones.
De tres o ms dimensiones.
25
Para establecer el rango del arreglo (nmero total de elementos) que componen el arreglo se
utiliza la siguiente formula:
RANGO = Ls - (Li+1)
donde:
ls = Lmite superior del arreglo
li = Lmite inferior del arreglo
Para calcular la direccin de memoria de un elemento dentro de un arreglo se usa la
siguiente formula:
A[i] = base(A) + [(i-li) * w]
donde :
A = Identificador nico del arreglo
i = Indice del elemento
li = Lmite inferior
w = Nmero de bytes tipo componente
Si el arreglo en el cual estamos trabajando tiene un ndice numerativo utilizaremos las
siguientes frmulas:
RANGO = ord (ls) - (ord (li)+1)
A[i] = base (A) + [ord (i) - ord (li) * w]
26
int x [N][M];
int x[3][3];
donde:
27
donde:
i = 1 ... n
n = No. total de dimensiones
Para determinar la direccin de memoria se usa la siguiente formula:
LOC A[i1,i2,i3,...,in] =
li2)*R3*R2*... (in - lin)*Rn]*w
base(A)
[(i1-li1)*R3*R4*Rn
(i2-
Lectura
Escritura
Asignacin
28
Actualizacin
Ordenacin
Bsqueda
a) LECTURA
Este proceso consiste en leer un dato de un arreglo y asignar un valor a cada uno de sus
componentes.
La lectura se realiza de la siguiente manera:
para i desde 1 hasta N haz
x<--arreglo[i]
b) ESCRITURA
Consiste en asignarle un valor a cada elemento del arreglo.
La escritura se realiza de la siguiente manera:
para i desde 1 hasta N haz
arreglo[i]<--x
c) ASIGNACION
No es posible asignar directamente un valor a todo el arreglo, por lo que se realiza de la
manera siguiente:
para i desde 1 hasta N haz
arreglo[i]<--algn_valor
d) ACTUALIZACION
Dentro de esta operacin se encuentran las operaciones de eliminar, insertar y modificar
datos. Para realizar este tipo de operaciones se debe tomar en cuenta si el arreglo est o no
ordenado.
Para arreglos ordenados los algoritmos de insercin, borrado y modificacin son los
siguientes:
1.- Insertar.
Si i< mensaje(arreglo contrario caso En arreglo[i]<--valor i<--i+1
entonces>
29
2.- Borrar.
Si N>=1 entonces
inicio
i<--1
encontrado<--falso
mientras i<=n y encontrado=falso
inicio
si arreglo[i]=valor_a_borrar entonces
inicio
encontrado<--verdadero
N<--N-1
para k desde i hasta N haz
arreglo[k]<--arreglo[k-1]
fin
en caso contrario
i<--i+1
fin
fin
Si encontrado=falso entonces
mensaje (valor no encontrado)
3.- Modificar.
Si N>=1 entonces
inicio
i<--1
encontrado<--falso
mientras i<=N y encontrado=false haz
inicio
Si arreglo[i]=valor entonces
arreglo[i]<--valor_nuevo
encontrado<--verdadero
En caso contrario
i<--i+1
fin
fin
Matrz tridiagonal
30
Para evitar el desperdicio de memoria que se ocasionara al almacenar una matrz en donde
la mayora de los elementos son ceros, es conveniente traspasar a un arreglo unidimensional
todos los elementos diferentes de cero.
El arreglo con los elementos distintos de cero de la matrz anterior es el siguiente:
Una vez que hallamos vaciado la matrz, es indispensable conocer el lugar dentro del
arreglo unidimensional en el cual quedaron situados los elementos, y esto se logra con la
siguiente formula:
LOC(A[i,j])=base(A) + (n*(i-1)) - ((i-2)*(i-1))/2 + (j-1)
donde:
A=Matrz triangular superior
n=No. total de elementos
j= renglones
i=columnas
31
Una vez que vaciamos la matrz en un arreglo unidimensional, la formula para obtener las
posiciones de los elementos es la siguiente:
MATRIZ TRIDIAGONAL
En sta, los elementos diferentes de cero se encuentran en la diagonal principal en las
diagonales por debajo encima de sta. Ejemplo:
32
a)Seleccin Directa
Este mtodo consiste en seleccionar el elemento ms pequeo de nuestra lista para
colocarlo al inicio y as excluirlo de la lista.
Para ahorrar espacio, siempre que vayamos a colocar un elemento en su posicin correcta
lo intercambiaremos por aquel que la est ocupando en ese momento.
El algoritmo de seleccin directa es el siguiente:
i <- 1
mientras i<= N haz
min <-i
j <- i + 1
mientras j <= N haz
si arreglo[j] < [min] entonces
min <-j
j <- j + 1
intercambia(arreglo[min],arreglo[i])
i <- i +1
33
a)Bsqueda Secuencial
A este mtodo tambien se le conoce como bsqueda lineal y consiste en empezar al inicio
del conjunto de elementos , e ir atravez de ellos hasta encontrar el elemento indicado
hasta llegar al final de arreglo.
Este es el mtodo de bsqueda ms lento, pero si nuestro arreglo se encuentra
completamente desordenado es el nico que nos podr ayudar a encontrar el dato que
buscamos.
34
ind <- 1
encontrado <- falso
mientras no encontrado y ind < N haz
si arreglo[ind] = valor_buscado entonces
encontrado <- verdadero
en caso contrario
ind <- ind +1
b)Bsqueda Binaria
Las condiciones que debe cumplir el arreglo para poder usar bsqueda binaria son que el
arreglo este ordenado y que se conozca el numero de elementos.
Este mtodo consiste en lo siguiente: comparar el elemento buscado con el elemento
situado en la mitad del arreglo, si tenemos suerte y los dos valores coinciden, en ese
momento la bsqueda termina. Pero como existe un alto porcentaje de que esto no ocurra,
repetiremos los pasos anteriores en la mitad inferior del arreglo si el elemento que
buscamos resulto menor que el de la mitad del arreglo, o en la mitad superior si el elemento
buscado fue mayor.
La bsqueda termina cuando encontramos el elemento o cuando el tamao del arreglo a
examinar sea cero.
35
fin
Como arreglos
Como listas ordenadas
En esta unidad trataremos a las colas como arreglos de elementos, en donde debemos
definir el tamao de la cola y dos apuntadores, uno para accesar el primer elemento de la
lista y otro que guarde el ltimo. En lo sucesivo, al apuntador del primer elemento lo
llamaremos F, al del ltimo elemento A y MAXIMO para definir el nmero mximo de
elementos en la cola.
36
Las operaciones que podemos realizar en una cola son las de inicializacin, insercin y
extraccin. Los algoritmos para llevar a cabo dichas operaciones se especifican ms
adelante.
Las condiciones a considerar en el tratamiento de colas lineales son las siguientes:
Vacio.
ALGORITMO DE INICIALIZACIN
F < -- 1
A <-- 0
37
Las colas lineales tienen un grave problema, como las extracciones slo pueden realizarse
por un extremo, puede llegar un momento en que el apuntador A sea igual al mximo
nmero de elementos en la cola, siendo que al frente de la misma existan lugares vacos, y
al insertar un nuevo elemento nos mandar un error de overflow (cola llena).
Para solucionar el problema de desperdicio de memoria se implementaron las colas
circulares, en las cuales existe un apuntador desde el ltimo elemento al primero de la cola.
La representacin grfica de esta estructura es la siguiente:
La condicin de vaco en este tipo de cola es que el apuntador F sea igual a cero.
Las condiciones que debemos tener presentes al trabajar con este tipo de estructura son las
siguientes:
Vacio
ALGORITMO DE INICIALIZACIN
F < -- 0
A<-- 0
38
fin
F <-- 1
39
Algoritmo de Inicializacin
F < -- 1
A <-- 0
Algoritmo de Inicializacin
F <--1
A <-- 0
40
41
Insercin.
Extraccin.
Las inserciones en la cola se llevarn a cabo por atrs de la cola, mientras que las
eliminaciones se realizarn por el frente de la cola (hay que recordar que el primero en
entrar es el primero en salir).
42
Arreglos.
Listas enlazadas.
Nosotros ahora usaremos los arreglos. Por lo tanto debemos definir el tamao mximo de la
pila, adems de un apuntador al ltimo elemento insertado en la pila el cual denominaremos
SP. La representacin grfica de una pila es la siguiente:
43
44
3.4 Recursin
Podemos definir la recursividad como un proceso que se define en trminos de s mismo.
El concepto de recursin es difcil de precisar, pero existen ejemplos de la vida cotidiana
que nos pueden servir para darnos una mejor idea acerca de lo que es recursividad. Un
ejemplo de esto es cuando se toma una fotografa de una fotografa, o cuando en un
programa de televisin un periodista transfiere el control a otro periodista que se encuentra
en otra ciudad, y este a su vez le transfiere el control a otro.
Casos tpicos de estructuras de datos definidas de manera recursiva son los rboles binarios
y las listas enlazadas.
La recursin se puede dar de dos formas:
1 ,
N=0
<
45
N*(n-1)!,
N>0
sp <--0
mientras n <> 1 haz
push(pila,n)
n<--n-1
mientras sp <> 0 haz
factorial<--factorial*pop(pila)
<
|
|
|
|
Q(a-b,b)+1,
si a < b
si a<=b
sp<--0
Q<--0
lee(a), lee(b)
mientras a>=b haz
push(pila,1)
a<--a-b
mientras sp< > 0 haz
Q<-- Q + pop(pila)
Los algoritmos para realizar cada una de estas operaciones se muestran a continuacin. La
variable mximo para hacer referencia al mximo nmero de elementos en la pila.
Insercin (Push)
si sp=mximo entonces
mensaje (overflow)
en caso contrario
sp<-- sp+1
pila[sp]<-- valor
Eliminacin (Pop)
ING. JUAN MANUEL HERNNDEZ ESPINOSA
46
si sp=0 entonces
mensaje (underflow)
en caso contrario
x<--pila[sp]
sp<--sp-1
El campo liga, que es de tipo puntero, es el que se usa para establecer la liga con el
siguiente nodo de la lista. Si el nodo fuera el ltimo, este campo recibe como valor NIL
(vaco).
A continuacin se muestra el esquema de una lista :
Recorrido. Esta operacin consiste en visitar cada uno de los nodos que forman la
lista . Para recorrer todos los nodos de la lista, se comienza con el primero, se toma
el valor del campo liga para avanzar al segundo nodo, el campo liga de este nodo
nos dar la direccin del tercer nodo, y as sucesivamente.
47
Insercin. Esta operacin consiste en agregar un nuevo nodo a la lista. Para esta
operacin se pueden considerar tres casos:
o Insertar un nodo al inicio.
o Insertar un nodo antes o despus de cierto nodo.
o Insertar un nodo al final.
Borrado. La operacin de borrado consiste en quitar un nodo de la lista,
redefiniendo las ligas que correspondan. Se pueden presentar cuatro casos:
o Eliminar el primer nodo.
o Eliminar el ltimo nodo.
o Eliminar un nodo con cierta informacin.
o Eliminar el nodo anterior o posterior al nodo cierta con informacin.
Bsqueda. Esta operacin consiste en visitar cada uno de los nodos, tomando al
campo liga como puntero al siguiente nodo a visitar.
En el caso de utilizar listas con nodo de cabecera, usaremos el apuntador CAB para hacer
referencia a la cabeza de la lista.
Para el caso de las listas sin nodo de cabecera, se usar la expresin TOP para referenciar al
primer nodo de la lista, y TOP(dato), TOP(liga) para hacer referencia al dato almacenado y
a la liga al siguiente nodo respectivamente.
Algoritmo de Creacin
top<--NIL
repite
new(p)
leer(p(dato))
si top=NIL entonces
top<--p
en caso contrario
48
49
Listas dobles lineales. En este tipo de lista doble, tanto el puntero izquierdo del
primer nodo como el derecho del ltimo nodo apuntan a NIL.
Listas dobles circulares. En este tipo de lista doble, el puntero izquierdo del primer
nodo apunta al ltimo nodo de la lista, y el puntero derecho del ltimo nodo apunta
al primer nodo de la lista.
Debido a que las listas dobles circulares son ms eficientes, los algoritmos que en esta
seccin se traten sern sobre listas dobles circulares.
En la figura siguiente se muestra un ejemplo de una lista doblemente ligada lineal que
almacena nmeros:
En la figura siguiente se muestra un ejemplo de una lista doblemente ligada circular que
almacena nmeros:
50
Algoritmo de creacin
top<--NIL
repite
si top=NIL entonces
new(p)
lee(p(dato))
p(ld)<--p
p(li)<--p
top<--p
en caso contrario
new(p)
lee(p(dato))
p(ld)<--top
p(li)<--p
p(ld(li))<--p
mensaje(otro nodo?)
lee (respuesta)
hasta respuesta=no
--RECORRIDO A LA DERECHA.
p<--top
repite
escribe(p(dato))
p<--p(ld)
hasta p=top
--RECORRIDO A LA IZQUIERDA.
p<--top
repite
escribe(p(dato))
p<--p(li)
hasta p=top(li)
51
52
Enseguida se mostrarn los algoritmos ms comunes en listas circulares. Al igual que en las
secciones anteriores, utilizaremos el apuntador top para hacer referencia al primer nodo en
la lista.
Algoritmo de creacin
repite
new(p)
lee(p(dato))
si top=nil entonces
top<--p
q<--p
en caso contrario
q(liga)<--p
q<--p
p(liga)<--top
mensaje (otro nodo ?)
lee(respuesta)
hasta respuesta=no
53
escribe(p(dato))
p<--p(liga)
hasta p=top
54
55
56
Por medio de datos tipo punteros tambin conocidos como variables dinmicas o
listas.
Por medio de arreglos.
Sin embargo la ms utilizada es la primera, puesto que es la ms natural para tratar este tipo
de estructuras.
Los nodos del rbol binario sern representados como registros que contendrn como
mnimo tres campos. En un campo se almacenar la informacin del nodo. Los dos
restantes se utilizarn para apuntar al subarbol izquierdo y derecho del subarbol en
cuestin.
Cada nodo se representa grficamente de la siguiente manera:
57
A. B. Distinto.
A. B. Similares.
A. B. Equivalentes.
A. B. Completos.
A continuacin se har una breve descripcin de los diferentes tipos de rbol binario as
como un ejemplo de cada uno de ellos.
A. B. DISTINTO
Se dice que dos rboles binarios son distintos cuando sus estructuras son diferentes.
Ejemplo:
58
A. B. SIMILARES
Dos arboles binarios son similares cuando sus estructuras son idnticas, pero la informacin
que contienen sus nodos es diferente. Ejemplo:
A. B. EQUIVALENTES
Son aquellos arboles que son similares y que adems los nodos contienen la misma
informacin. Ejemplo:
A. B. COMPLETOS
Son aquellos arboles en los que todos sus nodos excepto los del ultimo nivel, tiene dos
hijos; el subarbol izquierdo y el subarbol derecho.
59
Inorden: GDBHEIACJKF
Preorden: ABDGEHICFJK
Postorden: GDHIEBKJFCA
60
void main()
{
char nombre[31];
clrscr();
gotoxy(10,1);
puts(" Cul es tu nombre ? ");
gotoxy(35,1);
gets(nombre);
clrscr();
gotoxy (10,1);
puts("ELEMENTO
CARACTER DIRECCION");
for( int x=0 ; (x < x,nombre[x],nombre[x],&nombre[x]); u?, c="%4d"
printf(?nombre[%2d] gotoxy(10,x+2); x++) x
61
6.1 Introduccin
Los rboles representan las estructuras no lineales y dinmicas de datos ms importantes en
computacin. Dinmicas porque las estructuras de rbol pueden cambiar durante la
ejecucin de un programa. No lineales, puesto que a cada elemento del rbol pueden
seguirle varios elementos.
Los rboles pueden ser construidos con estructuras estticas y dinmicas. Las estticas son
arreglos, registros y conjuntos, mientras que las dinmicas estn representadas por listas.
62
6.2 Terminologa
La terminologa que por lo regular se utiliza para el manejo de arboles es la siguiente:
63
Los vrtice de un grafo pueden usarse para representar objetos. Los arcos se utilizan para
representar relaciones entre estos objetos.
Las
aplicaciones
ms
importantes
de
los
grafos
son
las
siguientes:
7.2 Terminologa
ING. JUAN MANUEL HERNNDEZ ESPINOSA
64
CAMINO.Es una secuencia de vrtices V1, V2, V3, ... , Vn, tal que
cada uno de estos V1->V2, V2->V3, V1->V3.
LONGITUD DE CAMINO. Es el nmero de arcos en ese camino.
CAMINO SIMPLE. Es cuando todos sus vrtices, excepto tal vez el
primero y el ltimo son distintos.
CICLO SIMPLE. Es un camino simple de longitud por lo menos de uno
que empieza y termina en el mismo vrtice.
ARISTAS PARALELAS. Es cuando hay ms de una arista con un vrtice
inicial y uno terminal dados.
GRAFO CICLICO. Se dice que un grafo es cclico cuando contiene por
lo menos un ciclo.
GRAFO ACICLICO. Se dice que un grafo es aciclco cuando no contiene
ciclos.
GRAFO CONEXO. Un grafo G es conexo, si y solo si existe un camino
simple en cualesquiera dos nodos de G.
GRAFO COMPLETO FUERTEMENTE CONEXO.Un grafo dirigido G es completo
si para cada par de nodos (V,W) existe un camino de V a W y de W a
V (forzosamente tendrn que cumplirse ambas condiciones), es decir
que cada nodo G es adyacente a todos los dems nodos de G.
GRAFO UNILATERALMENTE CONEXO.Un grafo G es unilateralmente conexo
si para cada par de nodos (V,W) de G hay un camino de V a W o un
camino de W a V.
GRAFO PESADO ETIQUETADO. Un grafo es pesado cuando sus aristas
contienen datos (etiquetas). Una etiqueta puede ser un nombre,
costo un valor de cualquier tipo de dato. Tambin a este grafo se
le denomina red de actividades, y el nmero asociado al arco se le
denomina factor de peso.
VERTICE ADYACENTE. Un nodo o vrtice V es adyacente al nodo W si
existe un arco de m a n.
GRADO DE SALIDA.El grado de salida de un nodo V de un grafo G, es
el nmero de arcos o aristas que empiezan en V.
GRADO DE ENTRADA.El grado de entrada de un nodo V de un grafo G, es
el nmero de aristas que terminan en V.
NODO FUENTE.Se le llama as a los nodos que tienen grado de salida
positivo y un grado de entrada nulo.
NODO SUMIDERO.Se le llama sumidero al nodo que tiene grado de
salida nulo y un grado de entrada positivo.
65
66
En esta seccin, continuaremos utilizando los apuntadores que se usaron en las secciones
anteriores. TOP para hacer referencia al primer nodo, LD para indicar liga derecha y LA
para indicar liga abajo, por ltimo usaremos los apuntadores P y Q para hacer referencia a
los nuevos nodos que vayan a ser usados.
ALGORITMO DE CREACION.
repite
si top=NIL entonces
new(top)
top(la)<--NIL
top(ld)<--NIL
lee(top(dato))
q<--top
en caso contrario
new(p)
p(ld)<--NIL
p(la)<--NIL
q(la)<--p
lee(p(dato))
q<--p
mensaje(otro vertice ?)
lee(respuesta)
hasta repuesta=no
p<--top
mientras p<>NIL haz
mensaje(tiene vrtices adyacentes p(dato) ?)
67
ALGORITMO DE INSERCION
mensaje(valor a insertar ?)
lee(valor_a_insertar)
si top<>NIL entonces
p<--top
mientras p(la)<>NIL haz
p<--p(la)
new(q)
lee(q(dato))
p(la)<--q
q(la)<--NIL
mensaje(Hay vrtices adyacentes?)
lee(respuesta)
si respuesta=si entonces
mensaje(Cuantos vrtices?)
lee(nmero_vrtices)
desde i=1 hasta nmero_vrtices haz
new(p)
lee(p(dato))
q(ld)<--p
q<--q(ld)
en caso contrario
mensaje(no existe lista)
ALGORITMO DE BUSQUEDA
mensaje(vrtice a buscar)
lee(vrtice_a_buscar)
p<--top
repite
si p(dato)=vrtice_a_buscar entonces
repite
p<--p(ld)
escribe(p(dato))
hasta p(ld)=NIL
en caso contrario
p<--(la)
hasta p=NIL
ALGORITMO DE BORRADO
mensaje(vrtice a borrar ?)
68
69
70
71