Programación II
Programación II
DE BOLIVIA
CARRERA INGENIERIA DE SISTEMAS
DOSSIER
PROGRAMACION II
Tercer Semestre
INDICE
1.
CAPTULO I...........................................................................................1
CAPTULO II........................................................................................35
PILAS....................................................................................................... 35
2.1.
INTRODUCCIN.............................................................................................. 35
2.2.
REPRESENTACIN DE LAS PILAS....................................................................36
2.3.
ESTRUCTURA DE UNA PILA UTILIZANDO ARREGLOS.......................................37
2.4.
OPERACIONES CON PILAS..............................................................................38
2.5.
IMPLEMENTACIN DEL TAD PILA EN LENGUAJE JAVA.......................................38
2.6.
APLICACIONES................................................................................................ 42
2.6.1. LLAMADAS A SUBPROGRAMAS...................................................................43
........................................................................................................................ 44
2.6.2. RECURSIN................................................................................................44
2.6.3. TRATAMIENTO DE EXPRESIONES ARITMTICAS..........................................44
3.
CAPTULO III
3.1.
COLAS.........................................................................47
INTRODUCCIN.............................................................................................. 47
[Estructura de Datos]
Lic. Katya Perez Martinez
Page 2
3.2.
CARACTERSTICAS.......................................................................................... 48
3.3.
REPRESENTACIN DE LAS COLAS..................................................................48
3.4.
ESTRUCTURA DE UNA COLA IMPLEMENTADO MEDIANTE ARREGLOS..............49
3.5.
OPERACIONES CON COLAS.............................................................................49
Insertar un elemento en la cola:............................................................................50
Eliminar un elemento de la cola:...........................................................................50
COLAS LINEALES.......................................................................................50
3.6.
3.7.
3.8.
3.9.
3.10.
4.
CAPTULO RECURSIVIDAD....................................................................60
4.1.
4.2.
4.3.
4.4.
4.5.
4.6.
4.7.
4.8.
5.
COLAS CIRCULARES.......................................................................................53
OPERACIONES CON COLAS CIRCULARES..................................................................54
EJERCICIOS CON COLAS CIRCULARES.............................................................56
COLAS DE PRIORIDADES................................................................................57
APLICACIN DE PILAS Y COLAS......................................................................58
INTRODUCCIN.............................................................................................. 60
AMBITO DE APLICACIN:................................................................................60
RAZONES DE USO:......................................................................................... 60
EN QU CONSISTE LA RECURSIVIDAD?.........................................................61
FORMA DE ENFRENTAR PROBLEMAS RECURSIVOS.........................................61
TIPOS DE RECURSIVIDAD...............................................................................63
LA PILA DE RECURSION..................................................................................64
LA LLAMADA A UNA FUNCIN........................................................................65
6.
DEFINICIN RBOL......................................................................................... 84
CONCEPTOS BSICOS....................................................................................84
CARACTERSTICAS DE LOS ARBOLES BINARIOS..............................................86
TRANSFORMACIN DE UN ARBOL GRAL. EN UN ARBOL BINARIO...................87
REPRESENTACIN DE UN RBOL EN MEMORIA..............................................87
CLASIFICACIN DE ARBOLES BINARIOS..........................................................88
B. DISTINTO....................................................................................................... 89
B. SIMILARES..................................................................................................... 89
B. EQUIVALENTES..............................................................................................89
B. COMPLETOS.................................................................................................. 89
RECORRIDO DE UN ARBOL BINARIO...............................................................90
ARBOLES ENHEBRADOS.................................................................................91
ARBOLES BINARIOS DE BSQUEDA................................................................91
[Estructura de Datos]
Lic. Katya Perez Martinez
Page 3
6.10.
6.11.
6.12.
6.13.
6.14.
6.15.
GRAFOS.......................................................................................................... 92
DEFINICIONES BSICAS..................................................................................92
REPRESENTACIN EN MEMORIA SECUENCIAL................................................94
REPRESENTACIN EN MEMORIA ENLAZADA...................................................94
OPERACIONES SOBRE GRAFOS.......................................................................96
CAMINO MNIMO............................................................................................. 98
[Estructura de Datos]
Lic. Katya Perez Martinez
Page 4
1. Captulo I
Escribir en C o C++ es como utilizar un sierra elctrica sin ningn tipo de proteccin.
Escribir en C o C++ es como utilizar un sierra elctrica sin ningn tipo de proteccin.
Bob Gray
Bob Gray
1.1. INTRODUCCIN
Para procesar informacin en un computador es necesario hacer una
abstraccin de los datos que tomamos del mundo real, abstraccin en el
sentido de que se ignoran algunas propiedades de los objetos reales, es
decir, se simplifican. Se hace una seleccin de los datos ms
representativos de la realidad a partir de los cuales pueda trabajar el
computador para obtener unos resultados.
Cualquier lenguaje suministra una serie de tipos de datos simples, como
son los nmeros enteros, caracteres, nmeros reales. En realidad
suministra un subconjunto de stos, pues la memoria del ordenador es
finita. Los punteros (si los tiene) son tambin un tipo de datos.
El
un
grupo
de
casillas
de
memoria.
Tiene
varios
componentes.
Cabe hacer notar que en el presente texto, se tomar como herramienta para los
Cabe hacer notar que en el presente texto, se tomar como herramienta para los
programas y representar las diferentes estructuras de datos el Lenguaje C++ y
programas y representar las diferentes estructuras de datos el Lenguaje C++ y
Java.
Java.
Ejemplos:
Dato Simple
Declaramos una variable A de tipo entero y asignamos el valor 25.
A
int A;
A = 25;
Identificador
25
Dato Estructurado
Declaramos un dato compuesto o estructurado A que tendr 5 elementos de
tipo
entero.
int A[5] ;
A = {20,30,40,50,60};
A =
20 30 40 50 60
Identificador
1.3. ABSTRACCIN
Una abstraccin es un proceso mental donde se extraen rasgos
esenciales de algo para representarlos por medio de un lenguaje grfico
o escrito.
[Estructura de Datos]
Lic. Katya Perez Martinez
Page 2
Operaciones
o mtodos
Ru: entero
Nombre: Cadena
Sexo: carcter
Direccion: Cadena
LeerDatosEstudiante ()
ImprimirDatosEstudian
te ()
ModificarDireccion()
CalcularNotaFinal()
que
puedan
trabajar
con
los
elementos
que
contiene el TAD.
Page 3
[Estructura de Datos]
Lic. Katya Perez Martinez
Page 4
C1
i0
C2
i1
Componentes
Cn
iN
Indices
C=
30
0
50
1
elemento
70
60
2 8
Identificador
Indice
En Java
Para declarar un Array se utilizan corchetes para indicar que se trata de
un Array y no de una simple variable de tipo especificado. Su sintaxis es:
[Estructura de Datos]
Lic. Katya Perez Martinez
Page 5
Tipo_dato identificador[ ];
O bien:
Tipo_dato [ ] identificador;
Donde:
Tipo_dato: es el tipo de datos de los elementos del vector.
Identificador: es el nombre del vector.
Luego, se debe crear el Array con el operador new, de la siguiente
manera:
Identificador = new tipo [ cantidad_de_elementos ];
Por ejemplo:
VECTOR
V[15]: Entero
N: Entero
[Estructura de Datos]
Lic. Katya Perez Martinez
leedim()
leervector()
mostrarvector()
Page 6
Ejercicios
A continuacin se muestra la implementacin de este TAD en Java.
//ARCHIVO VECTOR.JAVA
import java.io.*;
public class Vector
En
{ lenguaje
static java:
int v[];
static int n;
static InputStreamReader Caracteres;
static BufferedReader Buffer;
static String dato;
static void leedim () throws IOException
{
System.out.println ("Cuantos elementos insertara en el Vector? ");
dato = Buffer.readLine ();
n = Integer.parseInt (dato);
}
static void leervector () throws IOException
{
int i;
");
}
}
public static void main (String [] args) throws IOException
{
v = new int[15];
Caracteres = new InputStreamReader (System.in);
Buffer = new BufferedReader(Caracteres);
leedim ();
leervector();
[Estructura
de Datos]
mostrarvector();
Lic. Katya Perez
Martinez
}
}
Page 7
EJERCICIOS PROPUESTOS
1. Se almacena en un vector las cosechas de lechugas durante 6
meses, se pide : Leer la cantidad de plantas de lechuga
cosechadas por mes.
C es el vector que tiene en cada mes una cantidad de
plantas de lechuga cosechadas, como se ve a continuacin:
15 75 23 55 85 13
1
2
3
4
5 6
a. Imprimir la cosechas mayores a 50 plantas por mes
La salida como la siguiente:
MES COSECH
A
2
75
4
55
5
85
b. Sabiendo que cada planta de lechuga cuesta 4Bs, se pide
hallar cuanto ha ganado el productor cada mes por su
cosecha, y luego mostrar el total ganado en los 6 meses.
La salida como la siguiente:
MES COSECH
COSTO
A
BS
1
15
60
2
75
300
3
23
92
4
55
220
5
85
340
[Estructura de Datos]
Lic. Katya Perez Martinez
Page 8
13
52
TOTAL GANADO 1064 BS
Naranjas
para jugo
[Estructura de Datos]
Lic. Katya Perez Martinez
Naranjas
para comer
Page 9
A= 10
0
1
50
0
2
Parcela 1
60
0
3
80
0
5
Parcela 2
30
0
6
50
0
35
0
n
Parcela 3
1.7.4.
Se repite
3
1
2
Cadenas de Caracteres
Page 10
1.7.5.
cadena1.equalsIgnoreCase(cadena2)
[Estructura de Datos]
Lic. Katya Perez Martinez
Page 11
un
valor
menor
que
si
cadena1
es
menor
cadena1.replace(char1,char2)
regresa
otra
cadena
cadena2 tendr el
valor de CochIbImbI
cadena1.toLowerCase();
cadena1.toUpperCase();
cadena1.trim();
cadena1.substring(indiceInicial,
indiceFinal);
regresa
una
cadena1.endsWith(subcadena);
String.valueOf(arregloDeCaracteres);
regresa
la
[Estructura de Datos]
Lic. Katya Perez Martinez
Page 12
regresa
el
valor
regresa el valor
regresa el valor
regresa un valor
hexadecimal en cadena.
Integer.toOctalString(numeroEntero);
en cadena
EJERCICIOS RESUELTOS
[Estructura de Datos]
Lic. Katya Perez Martinez
Page 13
las
Guia31
contar():entero
main()
while (i > 0)
{ // mientras haya espacios en blanco
n++; // sumo 1 al contador
st = st.substring (i + 1); // recorto la cadena para quitar una palabra
i = st.indexOf (" "); // encuentro el siguiente blanco
}
return n++; // para contar la ultima palabra
}
[Estructura de Datos]
Lic. Katya Perez Martinez
Page 14
}
}
return otra; // devolvemos la nueva cadena
}
}
[Estructura
de Datos]
Page 15
3. programa
que pretende suprimir todos los espacios en
blanco de una
cadena cad. El resultado queda en otra
cadena.
Diseamos el TAD
Guia33
suprime():Cadena
main()
/* Este programa pretende suprimir todos los espacios en blanco de
unacadena cad El resultado queda en otra cadena
*/
public class Guia33
{
public static void main (String args[])
{
String cad = new String ("");
char blanco = ' ';
String nueva = new String ("");
System.out.print ("dame la cadena .");
cad = Lectura.Cadena ();
nueva = suprime (cad, blanco);
System.out.println ("la cadena nueva es " + nueva);
}
public static String suprime (String st, char espacio)
{
char a;
String otra = new String ("");
for (int i = 0 ; i < st.length () ; i++)
{
a = st.charAt (i);
if (a != espacio)
{
otra = otra + a;
}
}
return otra;
}
}
[Estructura de Datos]
Katya Perez Martinez
Lic.
Page 16
Guia34
Contar()
main()
// Programa que sirve para contar cuntas vocales tiene una palabra o
frase.
class Guia34
{
public static void main (String args[])
{
String palabra;
System.out.print(Dame una palabra o una frase..);
palabra = Lectura.Cadena ();
Contar (palabra);
}
static void Contar (String p)
{
int n = 0, cont = 0;
n = p.length ();
for (int i = 0 ; i < n ; i++)
{
if ((p.charAt (i) == 'a') || (p.charAt (i) == 'e') || (p.charAt
(i) == 'i') || (p.charAt (i) == 'o') || (p.charAt (i) == 'u'))
cont++;
}
System.out.println ("La palabra tiene " + cont + "
vocales");
}
}
[Estructura de Datos]
Lic. Katya Perez Martinez
Nombre:cadena
Paterno:cadena
Materno:cadena
dia:entero
mes:entero
anio:entero
Generar():cadena
main()
Page 17
Diseamos el TAD
}
while (mes > 13 || mes < 1);
Page 18
do
{
EJERCICIOS PROPUESTOS
1. Crear una clase donde dado un string que representa un nombre
en maysculas o minsculas devolver un string formado por las
iniciales en maysculas seguidas de un punto.
2. Crear una clase donde dado un string de palabras sustituir cada
ocurrencia de un caracter dado por otro caracter. (por ejemplo:
todas las s por *)
3. Escriba una clase que permita eliminar un substring substr de un
string str, si no est devuelve el mismo string sin alterar.
4. Escriba una clase que reciba como parmetro el nombre de una
persona, con el apellido seguido de una coma, un espacio y
despus el nombre de pila. El procedimiento debe imprimir el
nombre de pila de la persona seguido de su apellido.
[Estructura de Datos]
Lic. Katya Perez Martinez
Page 19
Matrices
[Estructura de Datos]
Lic. Katya Perez Martinez
Page 20
donde:
tipo puede ser cualquier tipo de dato (int, float, char, etc.).
nombre_de_variable es el nombre del arreglo.
rango 1 corresponde al nmero de renglones que conforman el
arreglo.
rango 2 corresponde al nmero de columnas.
Podemos trabajar con cada uno de los elementos de la matriz:
X[3][5]
= 20;
Lectura/escritura
Asignacin
Actualizacin:
//programa
para manejo Insercin
de matrices de numeros enteros.
import java.io.*;
Eliminacin
class matriz
{
Modificacin
static int M[] [] = new int [20] [20];
int f, c;
static
Ordenacin
static
Bsqueda
void leerMatriz ()
{
En general
los arreglos bidimensionales son una generalizacin de los
System.out.println ("******REGISTRO DE MATRIZ ******");
System.out.print
("Ingrese
el numero
de filascon
de algunas
la matriz......");
unidimensionales,
por lo que
se realizar
un ejemplo
de
f = Leer.Entero ();
estas operaciones
a continuacin.
System.out.print
("Ingrese el numero de columnas de la matriz....");
c = Leer.Entero ();
for (int i = 1 ; i <= f ; i++)
Ejemplo:for (int j = 1 ; j <= c ; j++)
{
System.out.print ("Ingrese elemento (" + i + "," + j + ")....");
M [i] [j] = Leer.Entero ();
}
}
static void imprimir ()
{
System.out.println (".......IMPRIMIENDO LA MATRIZ.....");
for (int i = 1 ; i <= f ; i++)
{
System.out.println ();
for (int j = 1 ; j <= c ; j++)
{ Datos]
[Estructura de
Page
Lic. Katya Perez Martinez System.out.print (M [i] [j] + " ");
}
}
}
21
[Estructura de Datos]
Lic. Katya Perez Martinez
Page 22
Nombre
Pat
Rodrgu
ez
Alvarez
Mat
Salas
Varga
s
Direccion
Calle
Nro Zona
Av. Arce 123 Centr
Calle 12 134 al
5
Obraj
es
Edad Sexo
25
M
29
F
Antig
2
3
Variable_registro.campo
Ejemplo:
[Estructura de Datos]
Lic. Katya Perez Martinez
Page 23
Empleado.java
class empleado
{
private int ci;
private String nombre;
private float sueldo;
private class fecha
{
int dia, mes, anio;
}
public private
void leeDatos
fecha ()
fechaing = new fecha ();
{
Page 24
LlamaEmpleado.java
class LlamaEmpleado
{
public static void main (String arg[])
{
empleado E;
E = new empleado ();
E.leeDatos ();
E.ImprimeDatos ();
}
}
1.9.3.
ARRAYS DE ESTRUCTURAS:
ESTRUCTURAS ANIDADAS:
[Estructura de Datos]
Lic. Katya Perez Martinez
Page 25
Ejemplo:
" + i);
Page 26
1.10.
CONJUNTOS
1.10.1.
DEFINICIN DE CONJUNTOS
Page 27
definen
los
conjuntos
NUMEROS,
MAYUSCULAS
ALUMNOS.
1.11.
1
1
0
0
1
0
1
0
0
1
0
0
almacenar los valores diferentes de cero
Page 28
Arreglo de Registros
Se utiliza un arreglo unidimensional, donde cada elemento es un registro
formado por tres campos: uno para guardar la fila donde se encontr el
valor diferente de cero, otro para guardar la columna, y el tercero para
guardar el valor del elemento distinto de cero de la matriz.
El siguiente programa nos permite crear la estructura para una matriz
poco densa, se lo ha denominado MatrizPocoDensa.java:
MatrizPocoDensa.java
public class MatrizPocoDensa
{
private int fila;
private int col;
private int valor;
MatrizPocoDensa (int f, int c, int v)
{
fila = f;
col = c;
valor = v;
}
public int FILA ()
{
return fila;
}
public int COL ()
{
return col;
}
public int VALOR ()
{
return valor;
}
[Estructura de Datos]
Lic. Katya Perez Martinez
Page 29
}
}
M [0] = new MatrizPocoDensa (m, n, (k - 1));
return M;
30
1.12.
ARCHIVOS
Ejercicios Propuestos
[Estructura de Datos]
Lic. Katya Perez Martinez
Page 31
Ejemplo:
correspondientes a
12
personas:
10 23 15 18 20 18 57 12 29 31 78 28
el programa mostrar (adems de la media, desviacin estndar,
moda y mediana), la
siguiente tabla:
0 - 9: 0
10 - 19: 5
20 - 29: 4
30 - 39: 1
40 - 49: 0
50 - 59: 1
60 - 69: 0
70 - 79: 1
80 - 89: 0
90 - 99: 0
100 - 109: 0
110 - 119: 0
120 - 129: 0
130 - 139: 0
140 - 149: 0
4 Modifica el programa para que muestre un histograma de edades.
La tabla anterior se mostrar ahora como este histograma:
0 - 9:
10 - 19:
20 - 29:
30 - 39:
40 - 49:
50 - 59:
60 - 69:
70 - 79:
[Estructura de Datos]
Lic. Katya Perez Martinez
*****
****
*
*
*
Page 32
80 - 89:
90 - 99:
100 - 109:
110 - 119:
120 - 129:
130 - 139:
140 - 149:
Como puedes ver, cada asterisco representa la edad de una
persona.
5 Modifica el programa anterior para que el primer y ltimo rangos
de edades mostrados en el histograma correspondan a tramos de
edades en los que hay al menos una persona. El histograma
mostrado antes aparecer ahora as:
10
20
30
40
50
60
70
19:
29:
39:
49:
59:
69:
79:
*****
****
*
*
*
| ####### |
|
|
|
|
| ####### | ####### |
|
|
|
|
| ####### | ####### |
|
|
|
|
| ####### | ####### |
|
|
|
|
| ####### | ####### | ####### |
####### |
| ####### |
+----------+-----------+-----------+-----------+-----------+----------+-----------+
| 10 19 | 20 - 29 | 30 39 | 40 49 | 50 59 | 60
69 | 70 79 |
|
|
|
|
|
Page 33
[Estructura de Datos]
Lic. Katya Perez Martinez
si i <= j
si i >j
Page 34
22.
24.
La Tabla
Pedro
0
3
3
5
1
0
Maria
2
1
0
7
2
3
Rosa
1
1
2
3
2
2
Luis
5
2
1
1
0
5
Rosa
vendi 2
autos del
modelo
M3
Agua
Luz
23
28
34
24
29
34
45
48
32
57
60
55
87
80
65
67
78
54
[Estructura de Datos]
Lic. Katya Perez Martinez
Telefon
o
840
560
400
700
450
670
560
570
540
Mercad
o
250
280
275
340
310
320
325
323
290
Page 35
Octubre
Noviembre
Diciembre
33
35
38
50
70
62
250
330
300
300
350
430
Clave
Descripcin
Existencia
Precio unitario
2. Captulo II
Pilas
[Estructura de Datos]
Lic. Katya Perez Martinez
Page 36
SiJava
Javadispusiera
dispusierade
deun
unmecanismo
mecanismoreal
realde
derecoleccin
recoleccinde
debasura,la
basura,lamayora
mayora
Si
de
los
programas
deberan
autoeliminarse
al
ser
ejecutados.
de los programas deberan autoeliminarse al ser ejecutados.
Robert Sewell
Robert Sewell
2.1. INTRODUCCIN
La pila es una lista de elementos caracterizada porque las operaciones de insercin y
eliminacin se realizan solamente en un extremo de la estructura. El extremo donde se
realizan estas operaciones se denomina habitualmente 'cima' o tope
(top en
nomenclatura inglesa).
Dada una pila P = (a, b, c, ... k ), se dice que a, es el elemento ms inaccesible de la pila,
est en el fondo de la pila (bottom) y que k, por el contrario, el ms accesible, est en el
Tope.
Las restricciones definidas para la pila implican que si una serie de elementos A, B, C, D,
E se aaden, en este orden a una pila, entonces el primer elemento que se borre de la
estructura deber ser el E. Por tanto, resulta que el ltimo elemento que se inserta en una
pila es el primero que se borra. Por esta razn, se dice que una pila es una lista LIFO
(Last Input First Output, es decir, el ltimo que entra es el primero que sale).
Un ejemplo tpico de pila lo constituye un montn de platos, cuando se quiere introducir un
nuevo plato, ste se pone en la posicin ms accesible, encima del ltimo plato. Cuando
se coge un nuevo plato, ste se extrae, igualmente, del punto ms accesible, el ltimo que
se ha introducido. Ejemplos: Una pila de papeles, una pirmide humana
Page 37
en
un
procesador
slo
se
puede
estar
ejecutando
un
Crear la pila.
b.
c.
d.
e.
Arreglos
Listas Enlazadas
[Estructura de Datos]
Lic. Katya Perez Martinez
Page 38
MAX
PILA =
TOPE
TOPE
1555 2434
4
3
2
1
3222
44444
MAX
TOPE
PILA
2.3.
444
222
434
elementos
555
operaciones
PILA
V[MAX]:
tipo_dato
Tope: entero
Poner(e)
Quitar()
Imprimir()
Vacia()
Page 39
Pone (e)
boolean llena ()
{
if (tope == MAX)
Quita
()
un elemento de la pila (pop)
return (true);
else
return (false);
}Llena()
verifica si la pila esta llena, si es asi, retorna el valor
Page 40
Page 41
P1.imprimir ();
System.out.println ("Eliminando Elementos Negativos de
la Pila...");
P2.imprimir ();
while
(!A.vacia
sumarPilas
(P1,())
P2, P3);
{ P3.imprimir ();
e = A.quitar ();
if (e > 0)
}
aux.poner (e);
}
}
while (!aux.vacia ())
{
e = aux.quitar ();
A.poner (e);
}
}
publiclosstatic
void
main (String
args[])
b. Eliminar
elementos
negativos
de una pila.
{
P.llenarPila ();
P.imprimir
[Estructura de
Datos] ();
EliminaNegativos
(P);
Lic. Katya Perez Martinez
P.imprimir ();
}
}
Page 42
A=
13 24
377
489
B = 1 23
TOPE
C=
89 33 77
2
3
[Estructura de Datos]
Lic. Katya Perez Martinez
44
11
2
344
433 5
TOPE
4
5
11
6
3
7
23
8
Page 43
TOPE
//intercalar los elementos de una pila A con los elementos de una pila B
//en una pila c
class EjPila3
{
static Pila p1 = new Pila ();
static Pila p2 = new Pila ();
static void Intercala (Pila A, Pila B)
{
2.6. APLICACIONES
Las pilas son una estructura de datos muy usada en la solucin de diversos tipos de
problemas. Ahora se vern algunos de los casos ms representativos de aplicacin de
pilas:
Llamadas a subprogramas
Recursin
Ordenacin
2.6.1.
LLAMADAS A SUBPROGRAMAS
[Estructura de Datos]
Lic. Katya Perez Martinez
Page 44
inmediato superior.
Cuando el programa PP llama a UNO, se guarda en una pila la posicin en la que se
hizo la llamada. Al terminar UNO, el control se regresa a PP recuperando previamente
la direccin de la pila. Al llamar a DOS, nuevamente se guarda la direccin de PP en la
pila. Cuando DOS llama a TRES, se pone en la pila la direccin de DOS. Despus de
procesar TRES, se recupera la posicin de DOS para continuar con su ejecucin. Al
terminar DOS se regresa el control a PP, obteniendo previamente la direccin guardada
en la pila.
UNO
.
DOS
.
.
.
UNO
PP
.
TRES
.
DOS
.
.
TRES
[Estructura de Datos]
Lic. Katya Perez Martinez
Page 45
TOPE
5
4
5
4
5
4
TOPE
PP
TOPE
2
1
PP
TOPE
5
4
5
4
5
4
DOS
PP
TOPE
PP
TOPE
1
0
PP
Finalmente podemos concluir que las pilas son necesarias en esta rea
de aplicaciones por lo siguiente:
2.6.2.
RECURSIN
[Estructura de Datos]
Lic. Katya Perez Martinez
Page 46
(potencia)
*/
(multiplicacin y divisin)
+-
(suma y resta)
La subexpresiones
cualquier operador.
EJEMPLO
[Estructura de Datos]
Lic. Katya Perez Martinez
Page 47
X+Z*W
X + [ZW*]
Expresin postfija
XZW*+
+ X*ZW
EJERCICIOS PROPUESTOS
1.
1.1.
1.2.
1.3.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
[Estructura de Datos]
Lic. Katya Perez Martinez
Page 48
3. Captulo III
Colas
caminodel
delTigre
Tigre
ElElcamino
Un hombre caminaba por el bosque cuando vi una zorra lisiada. "Cmo har para alimentarse?", pens.
Un hombre caminaba por el bosque cuando vi una zorra lisiada. "Cmo har para alimentarse?", pens.
En ese momento, se acerc un tigre, con un animal entre los dientes. Saci su apetito, y le dej a la zorra lo que haba
Ensobrado.
ese momento,
se ayuda
acercaun
un animal
los dientes.
Saci su apetito, y le dej a la zorra lo que haba
"Si Dios
la tigre,
zorra,con
tambin
me vaentre
a ayudar",
reflexion.
sobrado. "Si Dios ayuda a la zorra, tambin me va a ayudar", reflexion.
Volvi a su casa, se encerr en ella, y se qued esperando que los Cielos le proveyeran de alimento. Nada pas. Cuando
Volvi
su casa,
se encerr
en ella, dbil
y se qued
esperando
que los
le proveyeran
ya se aestaba
quedando
demasiado
para salir
a trabajar,
se Cielos
le apareci
un ngel. de alimento. Nada pas. Cuando
ya se estaba quedando demasiado dbil para salir a trabajar, se le apareci un ngel.
- Por qu decidiste imitar a la zorra lisiada? -pregunt el ngel.
- Por qu decidiste imitar a la zorra lisiada? -pregunt el ngel.
- Levntate, toma tus herramientas, y sigue el camino del tigre!
- Levntate, toma tus herramientas, y sigue el camino del tigre!
de Paulo Coelho
de Paulo Coelho
3.1. INTRODUCCIN
La estructura de datos "cola" tambin llamada "Queue", es un tipo de
datos abstracto "TDA". Una cola TDA permite a una lista de cosas ser
removidos en el orden en que fueron almacenados.
Una cola es una lista de elementos en la que stos se introducen por un
extremo y se eliminan por otro. Los elementos se eliminan en el mismo
orden en el que se insertaron. Por lo tanto, el primer elemento que entra
a la cola ser el primero en salir. Debido a esta caracterstica, las colas
tambin reciben el nombre de estructuras FIFO (First In, First Out:
Primero en entrar, primero en salir).
Las colas en computacin son muy similares a las colas de la vida real.
Ejemplos:
[Estructura de Datos]
Lic. Katya Perez Martinez
Page 49
3.2. CARACTERSTICAS
Al igual que las pilas, las colas no existen como estructuras de datos
estndares en los lenguajes de programacin. Las colas pueden
representarse mediante el uso de:
Arreglos
Listas Enlazadas.
Como en el caso de las pilas, utilizaremos arreglos. Debe definirse el
tamao mximo para la cola y dos variables auxiliares. Una de ellas para
que guarde la posicin del primer elemento de la cola (FRENTE) y otra
para que guarde la posicin del ltimo elemento de la cola (FINAL). En el
ejemplo siguiente se muestra una representacin de una cola en la cual
se ha insertado cuatro elementos: 11, 22, 33 y 44, en ese orden.
[Estructura de Datos]
Lic. Katya Perez Martinez
Page 50
Q=
11
22
33
Frente
44
Final
V[MAX]:
tipo_dato
frente: entero
fin: entero
operaciones
Insertar(e)
Eliminar()
Imprimir()
Vacia()
Llena()
FRENTE()
Page 51
las
pilas,
es
necesario
definir
el
conjunto
de
Insertar(e):
Eliminar():
Imprimir():
final de la cola.
Vacia():
Llena():
FINAL():
como private
mucho,intaunque
esto ltimo no sea estrictamente necesario.
fin;
private int frente;
Aunque esa posicin aun contenga datos ser considerada como vaca a
Cola
efectos
del()otro puntero 'fin'.
{
frente = 0;
fin = 0;
System.out.println ("COLA CREADA....");
COLAS LINEALES
A continuacin
implementamos el cdigo correspondiente al programa
}
boolean
de manejo
devacia
colas ()
lineales en java:
{
if (frente == 0)
return (true);
else
return (false);
}
boolean llena ()
{
[Estructura
de Datos]
(fin == MAX)
Lic. Katya Perezif
Martinez
return (true);
else
return (false);
}
Page 52
}
int eliminar ()
{
int e = 0;
if (!vacia ())
{
e = v [frente];
if (frente == fin)
{
frente = 0;
fin = 0;
}
else
frente = frente + 1;
}
else
{
System.out.println ("LA COLA ESTA VACIA...");
System.exit (0);
}
return (e);
}
void imprimir ()
{
System.out.println ("IMPRIMIENDO LA COLA......");
for (int i = frente ; i <= fin ; i++)
System.out.println (v [i]);
}
[Estructura
de Datos]
int FINAL
()
Lic. Katya
{ Perez Martinez
return (fin);
Page 53
int FRENTE ()
{
return (frente);
}
void llenarCola ()
{
int N;
int e;
System.out.println ("Cuantos elementos desea insertar a la cola
??");
N = Lectura.Entero ();
for (int i = 1 ; i <= N ; i++)
{
System.out.print ("Introduzca un elemento....");
e = Lectura.Entero ();
insertar (e);
}
}
}
[Estructura de Datos]
Lic. Katya Perez Martinez
Page 54
A.imprimir ();
Ejemplo
8
1
[Estructura de Datos]
Lic. Katya Perez Martinez
33
45
Page 55
22
Final
85
67
Frente
3
4
alternativa
(b):
Frente Final
(a)
F
1
Final
Frente
FinalCIRCULARFinal
//COLA
DE NUMEROS ENTEROS Y SUS OPERACIONES
(b)
class ColaCircular
{
Final
Frente
final int MAX
= 20;
El diseo de la estructura de datos de una cola circular no varia en
(a) v[]
private
= new intde
[MAX];
relacin
a int
una
estructura
datos lineal, por tanto a continuacin
private int fin;
mostramos
las operaciones
que sufren cambios en este tipo de colas.
private int
frente;
ColaCircular ()
3.7.
{ Operaciones Con Colas Circulares
frente = 0;
fin = 0; bsicas con colas circulares son: insertar, eliminar y
Las operaciones
System.out.println ("COLA CREADA....");
mostrar
una cola circular. A continuacin mostramos la implementacin
}
Page 56
boolean llena ()
{
if ((fin == MAX && frente == 1) || (fin + 1 == frente))
return (true);
else
return (false);
}
void insertar (int elem)
{
if (!llena ())
{
if (fin == MAX)
fin = 1;
else
if (frente == 0)
{
frente = 1;
fin = 1;
}
else
fin++;
v [fin] = elem;
}
else
{
}
}
int eliminar ()
{
int e = 0;
if (!vacia ())
{
e = v [frente];
if (frente == fin)
{
frente = 0;
fin = 0;
}
else
if (frente == MAX)
frente = 1;
else
frente = frente + 1;
}
[Estructura
de Datos]
else
Lic. Katya Perez
Martinez
{
}
Page 57
return (e);
}
void imprimir ()
{
System.out.println ("IMPRIMIENDO LA COLA......");
for (int i = frente ; i <= fin ; i++)
System.out.println (v [i]);
}
int FINAL ()
{
return (fin);
}
int FRENTE ()
{
return (frente);
}
void llenarCola ()
{
int N;
int e;
System.out.println ("Cuantos elementos desea insertar a la
cola ??");
N = Lectura.Entero ();
for (int i = 1 ; i <= N ; i++)
{
System.out.print ("Introduzca un elemento....");
Lectura.Entero ();
[Estructura ede= Datos]
Page
insertar
(e);
Lic. Katya Perez Martinez
}
}
}
58
EliminarNegativos(Q);
Page 59
3.10.
[Estructura de Datos]
Lic. Katya Perez Martinez
Page 60
manipulacin
de
una
nica
pila
cola.
Se
han
visto
dos
[Estructura de Datos]
Lic. Katya Perez Martinez
Page 61
EJERCICIOS
1.
2.
3.
4.
5.
6.
7.
8.
9.
10. Llevar
11. Eliminar
12. Utilizando
13. Utilice
15. Escriba
cola Escriba un programa que cree una pila a partir de una cola.
4. CAPTULO RECURSIVIDAD
[Estructura
Pablo Neruda
Pablo Neruda
Page 62
4.1. INTRODUCCIN
Definicin de Recursividad: Tcnica de programacin muy potente
que puede ser usada en lugar de la iteracin.
Se dice que un objeto es recursivo, si en parte est formado por s
mismo o se define en funcin de s mismo
El concepto de recursividad va ligado al de repeticin. Son recursivos
aquellos algoritmos que, estando encapsulados dentro de una funcin,
son llamados desde ella misma una y otra vez, en contraposicin a los
algoritmos iterativos, que hacen uso de bucles while, do-while, for, etc.
Page 63
[Estructura de Datos]
Lic. Katya Perez Martinez
Page 64
PEQUEO
CALCULO
PROBLEMA
DE TAMAO
N-1
//RECURSIVO:
int Factorial ( int n )
{ if (n == 0)
return (1); return (n * Factorial
(n-1) );
}
[Estructura de Datos]
Lic. Katya Perez Martinez
Page 65
[Estructura de Datos]
Lic. Katya Perez Martinez
Page 66
Ejemplo
Recursividad anidada:
En algunos de los arg. de la llamada recursiva hay una nueva llamada
a s misma.
int Ack ( int n, int m ) /* ej: Ackerman */
{
if (n == 0 ) return (m+1)
else
if ( m == 0 ) return (Ack (n-1,1) );
return( Ack (n-1, Ack(n,m-1) ) );
}
[Estructura de Datos]
Lic. Katya Perez Martinez
Page 67
del
programa:
EJERCICIOS
1) Calcular x elevado a n de forma recursiva:
3^2 = 9
3^0 = 1
1));
}
Page 68
C)
[Estructura de Datos]
Lic. Katya Perez Martinez
Page 69
Page 70
Page 71
Cabeza de la
Lista
Nodo
23
Ultimo elemento de
la Lista
Info
12
enlace
Page 72
memoria sin uso. Adems las listas reflejan el orden lgico y el orden
fsico de los elementos en el arreglo.
Caractersticas:
Las listas son una secuencia ordenada de
elementos llamados nodo
Toda lista tiene una cabecera y una
cola.
Todos los nodos de la lista son del
mismo tipo.
Una lista enlazada es una secuencia ordenada de elementos llamados
nodos
[Estructura de Datos]
Lic. Katya Perez Martinez
ListaLineal
P: Nodo
InsertarInicio(e)
InsertarFinal()
EliminarInicio()
EliminarFinal()
Recorrido()
Page 73
Donde:
Info:
dirsgte:
[Estructura de Datos]
Lic. Katya Perez Martinez
Page 74
Insercin
a)
b)
c)
d)
La siguiente funcin recibe una lista y devuelve esa misma lista, sin el
nodo que ocupaba inicialmente la posicin de la cabeza.
La funcin ser la siguiente:
void eliminaInicio ()
{
//elimina el nodo del inicio de la lista
nodo q = p;
p = p.dirsgte;
q = null;
}
e)
void eliminaFinal ()
{
//elimina un nodo del final de la lista
nodo q = p;
if (p.dirsgte == null)
p = null;
else
{
nodo t = p;
while (q.dirsgte != null)
{
t = q;
q = q.dirsgte;
}
t.dirsgte = null;
q = null;
[Estructura}de Datos]
Lic. Katya Perez
} Martinez
Page 77
//LISTAS LINEALES
import java.io.*;
A continuacin realizamos la implementacin del programa completo de
public class listaLineal
{ listas simples, para datos de tipo doubl en java
//p: referencia al primer elemento de la lista, es el puntero
cabecera
private nodo p = null; //crea la lista p
//nodo de una lista lineal simplemente enlazada
private class nodo
{
private double info;
private nodo dirsgte;
private nodo ()
{
}
}
public listaLineal ()
{
}
public void insertarInicio (double elem)
{
//Aniadir un elemento al principio de la lista
nodo q = new nodo ();
q.info = elem;
q.dirsgte = p;
p = q;
}
public void insertarFinal (double elem)
{
//Inserta un elemento elem al final de la lista p en el nodo q
nodo q = new nodo ();
nodo t = p;
q.info = elem;
q.dirsgte = null;
if (p == null)
p =Datos]
q;
[Estructura de
Lic. Katya Perez
Martinez
else
{
while (t.dirsgte != null)
t = t.dirsgte;
Page 78
}}
t.dirsgte = q;
double elem;
System.out.println ("Cuantos elementos desea ingresar a la
lista ?");
dato = br.readLine ();
N = Integer.parseInt (dato);
for (int i = 1 ; i <= N ; i++)
{
System.out.println ("ingrese elemento ....");
dato = br.readLine ();
elem = Double.valueOf (dato).doubleValue ();
insertarFinal (elem);
}
}
}
import java.io.*;
class ejemLista1
{
public static void main (String args[]) throws IOException
{
EJERCICIO //crear una lista lineal L vacia
listaLineal
L para
= new
listaLineal
();
Escribir una aplicacin
en java
llamar
a todas las operaciones
con listas.
//leer datos reales y agregarlos a la lista
L.llenarLista ();
L.recorrido ();
L.eliminaInicio ();
L.recorrido ();
L.eliminaFinal ();
L.recorrido ();
[Estructura de Datos]
Lic. Katya Perez Martinez
Page 80
[Estructura de Datos]
Lic. Katya Perez Martinez
Page 81
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
[Estructura de Datos]
Lic. Katya Perez Martinez
Page 82
[Estructura de Datos]
Lic. Katya Perez Martinez
Page 83
lee(q(dato))
q(ld)<--p(ld)
q(li)<--p
p(li(ld))<--q
p(ld)<--q
p<--top
en caso contrario
p<--p(ld)
hasta p=top
Page 84
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
[Estructura de Datos]
Lic. Katya Perez Martinez
Page 85
q<--q(liga)
r<--r(liga)
hasta q=top
EJERCICIOS
un
programa
que
permita
adicionar
elementos
no
[Estructura de Datos]
Lic. Katya Perez Martinez
Page 86
[Estructura de Datos]
Lic. Katya Perez Martinez
Page 87
a. Nodo hijo:
cualquiera de los
nodos apuntados
por uno de los
nodos del rbol. En
el ejemplo, 'L' y 'M'
son hijos de 'F'.
b. Nodo padre: nodo
que contiene un
puntero al nodo actual. En el ejemplo, el nodo 'A' es padre de 'B',
'C' y 'D'.
Los rboles con los que trabajaremos tienen otra caracterstica
importante: cada nodo slo puede ser apuntado por otro nodo, es decir,
cada nodo slo tendr un padre. Esto hace que estos rboles estn
fuertemente jerarquizados, y es lo que en realidad les da la apariencia
de rboles.
En cuanto a la posicin dentro del rbol:
c. Nodo raz: nodo que no tiene padre. Este es el nodo que
usaremos para referirnos al rbol. En el ejemplo, ese nodo es el
'A'.
d. Nodo hoja: nodo que no tiene hijos. En el ejemplo hay varios: 'G',
'H', 'I', 'K', 'L', 'M', 'N' y 'O'.
[Estructura de Datos]
Lic. Katya Perez Martinez
Page 88
Existen otros conceptos que definen las caractersticas del rbol, con
relacin a su tamao:
f. Orden: es el numero potencial de hijos que puede tener cada
elemento de rbol. De este modo, diremos que un rbol en el que
cada nodo puede apuntar a otros dos es de orden dos, si puede
apuntar a tres ser de orden tres, etc.
g. Grado: el nmero de hijos que tiene el elemento con ms hijos
dentro del rbol. En el rbol del ejemplo, el grado es tres, ya que
tanto 'A' como 'D' tienen tres hijos, y no existen elementos con
ms de tres hijos.
h. Nivel: se define para cada elemento del rbol como la distancia a
la raz, medida en nodos. El nivel de la raz es cero y el de sus hijos
uno. As sucesivamente. En el ejemplo, el nodo 'D' tiene nivel 1, el
nodo 'G' tiene nivel 2, y el nodo 'N', nivel 3.
i. Altura: la altura de un rbol se define como el nivel del nodo de
mayor nivel. Como cada nodo de un rbol puede considerarse a su
vez como la raz de un rbol, tambin podemos hablar de altura de
ramas. El rbol del ejemplo tiene altura 3, la rama 'B' tiene altura
2, la rama 'G' tiene altura 1, la 'H' cero, etc.
[Estructura de Datos]
Lic. Katya Perez Martinez
Page 89
Page 90
Page 91
A. B. Distinto.
A. B. Similares.
A. B. Equivalentes.
A. B. Completos.
[Estructura de Datos]
Lic. Katya Perez Martinez
Page 92
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
[Estructura de Datos]
Lic. Katya Perez Martinez
Page 93
Examinar la raz.
2. PREORDEN
o
Examinar la raz.
3. POSTORDEN
o
Examinar la raz.
Inorden: GDBHEIACJKF
Preorden: ABDGEHICFJK
Postorden: GDHIEBKJFCA
Page 94
[Estructura de Datos]
Lic. Katya Perez Martinez
Page 95
6.10. GRAFOS
Un grafo dirigido G consiste en un conjunto de vrtices V y un conjunto
de arcos o aristas A. Los vertice se denominan tambin nodos o puntos.
Un arco, es un par ordenado de vrtices(V,W) donde V es el vrtice
inicial y W es el vrtice terminal del arco. Un arco se expresa como: V->W y se representa de la siguiente manera:
6.11.
DEFINICIONES BSICAS
CAMINO.Es una secuencia de vrtices V1, V2, V3, ... , Vn, tal que
cada uno de estos V1->V2, V2->V3, V1->V3.
[Estructura de Datos]
Lic. Katya Perez Martinez
Page 96
GRAFO
UNILATERALMENTE
CONEXO.Un
grafo
es
[Estructura de Datos]
Lic. Katya Perez Martinez
Page 97
[Estructura de Datos]
Lic. Katya Perez Martinez
Page 98
[Estructura de Datos]
Lic. Katya Perez Martinez
Page 99
Creacin.
Insercin.
Bsqueda.
Eliminacin.
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) ?)
lee(respuesta)
si respueta=si entonces
repite
new(q)
lee(q(dato))
q(ld)<--p(ld)
p(ld)<--q
mensaje(otro vrtice ?)
lee(respuesta2)
hasta respuesta2=no
[Estructura de Datos]
Lic. Katya Perez Martinez
Page 100
p<--p(la)
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 ?)
lee(vrtice_a_borrar)
p&Lt--top
r<--p
q<--p
sw<--falso
repite
si p(dato)=vrtice_a_borrar entonces
si p=top entonces
top<--top(la)
r<--top
sw<--verdadero
en caso contrario
r(la)<--p(la)
repite
[Estructura de Datos]
Lic. Katya Perez Martinez
Page 101
p<--p(ld)
dispose(q)
q<--p
hasta p=NIL
si sw=verdadero entonces
p<--r
q<--p
en caso contrario
p<--r(la)
q<--p
en caso contrario
r<--p
repite
q<--p(ld)
si q(dato)=vrtice_a_borrar entonces
p(ld)<--q(ld)
dispose(q)
q<--p
en caso contrario
p<--p(ld)
hasta p=NIL
[Estructura de Datos]
Lic. Katya Perez Martinez
Page 102
EJERCICIOS
[Estructura de Datos]
Lic. Katya Perez Martinez
Page 103
GLOSARIO
ALGORITMO. Es una descripcin de los pasos de una tarea.
ASCII. American Standard Code for Information Interchange. Es un
cdigo
muy
utilizado
para
el
intercambio
de
datos.
Como
los
otra
parte
del
programa.
Puede
ser
condicional
consecutivamente.
Tambin
recibe
este
nombre
un
Page 104
[Estructura de Datos]
Lic. Katya Perez Martinez
Page 105
Smbolo
de Input/Output.
Entrada/Salida
desde o hacia un
ordenador.
IMPLEMENTAR. Instalar y hacer funcionar
INSTRUCCIN. Se llama instruccin a cada una de las lneas que
componen un programa de ordenador.
Lenguaje de programacin. Conjunto de smbolos e instrucciones que
pueden ser reconocidos y procesados por un ordenador.
LIBRERA.
Conjunto
de
programas
mdulos
almacenados
[Estructura de Datos]
Lic. Katya Perez Martinez
Page 106
LECTURAS COMPLEMENTARIAS
1. Estructuras de Datos
http://cuhwww.upr.clu.edu/~jse/cursos/4097/notas/
2. versin electrnica y en lnea de uno de los libros sobre estructuras de datos
de mayor inters (Baeza-Yates).
http://www.dcc.uchile.cl/~rbaeza/handbook/hbook.html
3. Algorithms and Data Structures Research & Reference Material". Muchas
implementaciones, algoritmos y material de referencia
http://www.csse.monash.edu.au/~lloyd/tildeAlgDS/index.html
4. Estructuras arbreas
http://www.infor.uva.es/~jmrr/TAD2003/home.htm
5. MANUAL DE C++
http://kataix.umag.cl/~mmarin/topinf/cs23/c++/pagina022a.htm
6. Recursividad
http://www.conclase.net/c/curso/index.php?cap=024
http://decsai.ugr.es/~lcv/Docencia/mp2/apuntes/tema3.pdf.
[Estructura de Datos]
Lic. Katya Perez Martinez
Page 107
8. MetodologadelaProgramacionII
[Estructura de Datos]
Lic. Katya Perez Martinez
Page 108