Modulo 3
Modulo 3
Modulo 3
Con esta última parte del módulo se aspira que los estudiosos encuentren en las
estructuras, medios y herramientas útiles para la resolución de problemas, incluso
mediante la modelación de trayectos.
Estructura temática
5.1.1 Pilas.
Este tipo de estructura es muy similar a la forma en que se apilan unas latas en un
supermercado o unos platos en un restaurante donde al retirar un elemento, se
obtiene el último en haberse introducido en dicha estructura.
Siendo así, entonces una pila es un conjunto de elementos, los cuales solo se
pueden acceder (insertar o eliminar) por un solo extremo, siendo esta su
característica fundamental, el extremo por el que se accede a los elementos de la
pila se denomina TOPE. Cuando se accede a un elemento en la pila el primer
elemento al que accederemos será el último en haber ingresado por esta razón se
dice que esta estructura es de tipo LIFO por sus siglas en inglés (last in
firstout/último en entrar primero en salir).
Para trabajar una pila, los elementos que se insertan no son los que se mueven
hacia arriba o abajo lo que ocurre en realidad es que existen dos punteros que
trabajan, uno es el que indica la posición tope o el elemento disponible en la cima
(puntero de pila) y el otro es el que se mantiene en la base de la pila y siempre
mantiene el mismo valor mientras la pila exista (base de pila).
8 Puntero de pila
4
1
3 Base de pila
OPERACIONES:
inicio
si p=LONGMAX
entonces
escribir ´pila llena`
sino
pp+1
S(p) x
fin_si
fin
POP (eliminar o quitar): en este caso se quitara el elemento del
tope de la pila y se pondrá en x.
inicio
si p=0
entonces
escribir `pila vacia´
sino
x S(p)
pp-1
fin_si
fin
inicio
si p = 0
entonces
VACIA verdadero
sino
VACIA falso
fin_si
fin
5.1.2. Colas.
Este tipo de estructura de datos tiene similitud con las colas que se realizan en la
vida diaria en nuestras diferentes actividades, como la cola que se realiza para ser
atendido en un banco, o usar un teléfono público, donde no es permitido colarse y
las personas van siendo atendidas en su orden de llegada. Los elementos de una
cola son insertados por un extremo, la parte de atrás y retirados por el otro
extremo, el extremo de adelante.
Por su comportamiento, las colas son estructuras de tipo FIFO por sus siglas en
ingles first in-firstout (primero en entrar-primero en salir).
Para la implementación de las colas se usa dos punteros FRENTE (f =front), que
es el extremo por el cual se retiraran los elementos y FINAL (r= rear) que nos
indicara el extremo por el cual se insertaran los elementos a la cola.
1 4 8 9 3
r (rear) f (front)
1 4 8 9
r (rear) f (front)
La diferencia entre las pilas y las colas radica en el extremo en el que se realizan
las inserciones a cada estructura, ya que en las colas se realiza la inserción en la
parte final de la lista y no al principio como ocurre en las pilas.
OPERACIONES:
inicio
si (cola_vacia(C))
entonces
escribir `cola vacia´
sino
ff+1
fin_sino
fin_si
empty (C) función que retorna falso o verdadero dependiendo si la cola
está vacía o no.
inicio
si(f = r)
entonces
escribir`TRUE´
sino
escribir`FALSE´
fin_si
fin
6. Árboles.
El símil a los árboles, son los árboles genealógicos, estructuras en las que hay
jerarquía y sus elementos están unidos a otros por debajo.
CAMINO: enlace entre dos nodos. No existe un camino entre todos los
nodos de un árbol.
Figura 3. Definiciones.
Nodo raíz.
Grado de la raíz :2
h
LC I = ∑ni*i
I=0
Figura 4. Ejemplo.
LCEM = LCE/ne
Existen tres formas recursivas en las que se puede realizar el recorrido de un árbol
y estas son:
PREORDEN M F C A E H P R Q Z
INORDEN A C E F H M P Q R Z
POSTORDEN A E C H F Q Z R P M
Preorden:
Voidpreorden (arbol*a)
{si (a!=NULL)
{visitar (a);
preorden(izq);
preorden(der);
}
}
Inorden:
Voidinorden (arbol*a)
{si (a!=NULL)
{inorden(izq);
visitar (a);
inorden(der);
}
}
Postorden:
Voidpostorden (arbol*a)
{si (a!=NULL)
{postorden(izq);
postorden(der);
visitar (a);
}
}
Los arboles binarios de búsqueda contienen elementos que pueden ser ordenados
entre ellos pueden ser enteros, reales, caracteres, etc. De modo que siempre el
primer elemento será el nodo del árbol y el segundo se ubicara a la izquierda si es
menor o a la derecha si es mayor y así sucesivamente con todos los elemento que
se van insertando, de modo que en cualquier nodo los elementos del subárbol
izquierdo son menores o iguales al del nodo en cuestión y hacia la derecha serán
mayores.
Este tipo de árboles son muy eficientes para la búsqueda de datos en sus nodos.
Veremos ahora las operaciones de los arboles binarios de búsqueda.
Este algoritmo compara el valor buscado con la raíz del árbol, si no es el valor
buscado, pasa al árbol mayor o menor según sea el caso y así repite la búsqueda
de forma recursiva.
Para el caso de nuestro árbol del ejemplo anterior insertaremos los números 1 - 6
- 9 respectivamente y será de la siguiente forma.
Figura 6. Insertar un elemento.
o Posición en el árbol.
o Dirección de su padre.
o Dirección de su ascendencia, saber si es derecho o
izquierdo.
Nodos = vértices
Aritas =
Conexiones entre
los nodos
Los grafos son de gran utilidad en la vida cotidiana
dado que se usan para representar una serie de
tareas a realizar e indicando su secuencia o también
un organigrama, los grafos matemáticos que
representan las relaciones binarias, una red de
carreteras, la red de eléctrica de una ciudad o las
rutas de enlaces aéreos.
Componentes de un grafo:
Vértices: Los vértices son aquellos objetos de un grafo que
contienen información, su representación suele ser
circunferencias o puntos los cuales dentro de los mismos llevan el
contenido.
Los vértices de un grafo pueden usarse para representar objetos. Los arcos se
utilizan para representar relaciones entre estos objetos, no hay restricciones para
forma un grafo, además puede haber varias aristas entre dos vértices, el vértice de
partida o de inicio y el de llegada o de final puede ser el mismo. Las aristas
pueden o no llevar flechas.
Definición de grafo:
Un grafo G = (V,A)
V = {1, 4, 5, 7, 9}
A = {(1,4), (5,1), (7,9), (7,5), (4,9), (4,1), (1,5), (9,7), (5,7), (9,4)}
Tipos de Grafos:
Los grafos son estructuras de datos no lineales que tiene una naturaleza dinámica.
Su estudio puede dividirse en dos grandes bloques:
7.1 GRAFOS DIRIGIDOS
También conocidos como dígrafo. En los grafos dirigidos los arcos tienen una
dirección asociada, el primer elemento del arco es el origen y el segundo es
considerado el destino. Es aquel cuyas aristas son dirigidas, estos grafos suelen
representar relaciones asimétricas como por ejemplo: relaciones de herencia, los
vuelos entre ciudades, etc.
Ejemplo:
Cada arista del grafo dirigido incluye una fleca para indicar la dirección, la punta
de cada flecha representa el segundo nodo del par ordenado de nodos que
constituye un arco y la cola de la flecha representa el primer nodo del par.
V = {A, B, C, D}
E = {(A,B), (B,A), (A,C), (C,A), (A,D), (D,A), (B,C), (C,B), (B,D), (D,B)}
Cami
no
7.3 CAMINO DE UN GRAFO
Por ejemplo:
Por ejemplo:
V = {1, 2, 3, 4, 5, 6}
R = {(1, 4), (1, 5), (1, 6), (2, 3),…….,(5, 1), (6, 2)}
Es un camino en el que todos los nodos contenidos son diferentes, con la posible
excepción del primero y el último, que podrían ser el mismo.
Camino simple: 6, 4, 5, 2
Camino Cerrado: Es el camino que no pasa un mismo nodo más de una vez, b y
d es un camino elemental, pero b, d y g no lo es.
7.4 CICLO DE UN GRAFO
Cuando los dos extremos de un camino son iguales, el camino se llama circuito o
ciclo pero que no tenga aristas repetidas
Un ciclo es una cadena finita donde el nodo inicial de la cadena coincide con el
nodo terminal de la misma. Es un camino de longitud de al menos uno que
empieza y acaba en el mismo vértice. Se dice que se le puede llamar un ciclo a un
circuito simple si no existen vértices repetidos excepto el primero y el último.
Dados dos vértices (V, W) se dice que están conectados si existe un camino de V
a W.
Tipos de Ciclos:
Ciclo de Euler: Es un ciclo que pasa exactamente una vez por cada uno de
los arcos. Es un camino euleriano que comienza y termina en el mimo
vértice. Un grafo que admite un ciclo euleriano se dice que es un grafo
euleriano.
Ciclo Hamiltoniano: Es un ciclo que pasa exactamente una vez por cada
uno de los vértices del grafo.
7.5 GRAFO CONEXO
Es un grafo no dirigido que para cualquier par de nodos existe al menos un camino
que los une.
Es aquel con una arista entre cada par de vértices, es decir un grafo con todas las
aristas posibles. Por otra parte, se denomina grafos densos aquellos que tienen
muchas aristas.
7.7 GRAFOS PONDERADOS
Grafos Isoformos
Dos grafos son isomorfos cuando existe una correspondencia biunívoca (uno a
uno), entre sus vértices de tal forma que dos de estos quedan unidos por una
arista en común.
Sea un grafo G = (V, A), los vértices u y v pertenecientes a V; y una arista (u, v)
perteneciente a A, se dice que:
En las siguientes imágenes podemos observar los grados de los vértices para un
grafo dirigido y un grafo no dirigido.
Un grafo simple es aquel que no tiene aristas paralelas o múltiples que unan el
mismo par de vértices. Un grafo que cuente con múltiples aristas entre dos
vértices se denomina multígrafo.
o Si G es no dirigido:
o Si G es dirigido:
7.10 MULTÍGRAFO
Un multígrafo es un grafo en el que hay pares de vértices unidos por más de una
arista, es decir, que tienen aristas múltiples.
Figura 23. Multígrafo.
Un multígrafo es un grafo dirigido que está diseñado para tener aristas múltiples,
es decir, para tener aristas con los mismos nodos iníciales y finales.
Por ejemplo:
V = {a,b,c,d,e}
I = {0,1,2,3,4}
En la siguiente imagen veremos la relación entre vértices e índices.
Figura 28. Vértices e Índices.
Ejemplos:
Grafo No dirigido:
Grafo Dirigido:
ARISTA: son las conexiones o uniones que se usan entre los vértices, se
representan por medio de líneas, se suele añadir junto a la línea el nombre de los
vértices origen y destino.
Orallo, Enrique Hernández, Orallo, José Hernández, Ma. Carmen Juan Lizandra.
C++ Estándar. Editorial Paraninfo (2001).