Professional Documents
Culture Documents
ESTRUCTURA DE DATOS
Pg. 2
PRESENTACIN
Algoritmia y Estructura de Datos es una asignatura que tiene como finalidad proporcionar al
estudiante, los conocimientos necesarios en las tcnicas y estructuras de datos para la
programacin basada en el enfoque estructurado, requeridos en su formacin bsica para poder
desarrollar programas en otros niveles ms avanzados. La competencia a desarrollar es: Construye
algoritmos en un lenguaje de programacin, utilizando las sentencias bsicas de
programacin, diferenciando su uso para la propuesta de solucin de un problema, y con ello
construye programas computacionales utilizando mdulos de programa (funciones y
procedimientos), valorando la reutilizacin de los mdulo, y utilizando las diferentes
estructuras de datos: estticas y dinmicas para almacenar datos temporalmente,
diferenciando el uso de las estructuras con respecto al uso de los archivos como
almacenamiento de datos permanente, promoviendo el inters por otras tcnicas de
almacenamiento.
Agradecemos a quienes con sus aportes y sugerencias han contribuido a mejorar la presente
edicin, que slo tiene el valor de una introduccin al conocimiento de las estructuras de datos para
la programacin en un computador.
Los autores
Pg. 3
NDICE
Pg.
PRESENTACIN
NDICE
PRIMERA UNIDAD
Tema N 1: Algoritmo
1.1 Definicin del Algoritmo
1.2 Caractersticas de un algoritmo
1.3 Instrucciones Algortmicas Bsicas
1.4 Representacin del Algoritmo
Tema N 2: Programacin Estructurada
2.1 Programa
2.2 Lenguaje de Programacin
2.3 Programas Traductores
2.4 Definicin Programacin Estructurada
2.5 Resolucin de un Problema
Tema N 3: Sentencias Bsicas de Programacin
3.1 Estructura Bsica Simple o Secuencial
3.2 Estructura Bsica Selectiva
3.3 Estructura Bsica Repetitiva
SEGUNDA UNIDAD
Tema N 4: Modularizacin de Programas
4.1 Paso de Parmetros
4.2 Procedimientos
4.3 Funciones
Tema N 5: Libreras de Programacin creadas por el usuario
Tema N 6: Funciones Recursivas
TERCERA UNIDAD
Tema N 7: Estructuras de Datos
7.1 Definicin de Estructura de Datos
7.2 Clasificacin de Estructura de Datos
Tema N 8: Arreglos Unidimensionales
8.1 Actualizacin de Arreglos Unidimensionales
8.2 Bsqueda de Arreglos Unidimensionales
8.3 Ordenacin de Arreglos Unidimensionales
Tema N 9: Arreglos Bidimensionales
9.1 Actualizacin de Arreglos Bidimensionales
9.2 Aplicacin de Arreglos Bidimensionales
Tema N 10: Registro (Estructura)
Tema N 11: Union
Tema N 12: Tipos de Datos Abstractos (TDA)
Tema N 13: Clases y Programacin Orientada a Objetos
Tema N 14: Punteros a Direccin de Memoria
3
4
6
6
7
7
8
9
9
9
10
10
11
12
12
14
22
30
30
31
31
36
38
40
40
40
41
42
45
47
51
54
56
60
64
64
65
67
Pg. 4
67
71
71
76
76
77
80
82
82
87
88
92
93
96
Pg. 5
PRIMERA UNIDAD
Tema N 1: Algoritmo
Entrada de datos.
Proceso.
PROCESO
Salida de resultados.
Datos
Resultado
Variable:
Es una localizacin o casillero en la memoria principal que almacena un valor que puede cambiar
en el transcurso de la ejecucin del programa. Tiene un nombre, un tipo de dato y un valor.
Antes de poder utilizar una variable es necesario declararla especificando su nombre y su tipo de
dato.
Ejemplo 1:
Entero edad
Ejemplo 2:
Real peso, talla
Pg. 6
LEER edad
IMPRIMIR TotalCompra
variable
expresin
numero1 + numero 2
Pg. 7
Diagrama de Flujo Estructurado: Representacin con flujos entre los procesos a realizar.
Los principales smbolos de representacin para este diagrama son.
INICIO
Declaracin de variables
Lectura de Datos
Accin 1
Accin 2
Accin n
Reporte de Datos
FIN
Pg. 8
Conjunto de sentencias utilizadas para escribir secuencias de instrucciones que para que ejecute
un programa en una computadora.
a. Lenguaje Mquina: Lenguaje de programacin que la computadora interpreta y ejecuta
directamente, y est compuesto de instrucciones codificadas en binario (0, 1).
b. Lenguaje de Bajo Nivel: tambin llamados lenguajes ensambladores, permiten al
programador escribir instrucciones de un programa usando abreviaturas del lenguaje natural
(ingls), tambin llamadas palabras nemotcnicas (ADD, DIV, SUB, etc).
Pg. 9
PROGRAMA
EJECUTABLE
PROGRAMA
OBJETO
Pg. 10
Que hace ?
Como hace?
c. Estructuras bsicas
Son estructuras de control para el programa:
Secuenciales
Selectivas
Repetitivas
Pg. 11
INICIO
Declaracin de Variables
Lectura de Datos
Accin 1
Accin 2
Accin n
Reporte de Datos
FIN
Diagrama N-S:
INICIO
Declaracin de variables
Lectura de Datos
Accin 1
Accin 2
Accin n
Reporte de Datos
FIN
Ejemplo
Calcular el rea de un tringulo. Area = (base * altura) / 2
Solucin
Leyenda de Datos
base: valor de la base del tringulo
altura: valor de la altura del triangulo
Area: valor del resultado del clculo del rea del tringulo
Pg. 12
INICIO
real
Area
/2
(base * altura)
FIN
Diagrama N-S:
INICIO
real
Leer base
Leer altura
Area
(base * altura) / 2;
Cdigo en C:
#include<iostream>
using namespace std;
void main( )
{
float base, altura, Area;
cout<<Ingrese valor de la base: ;
cin>>base;
cout<<\n; //Salto de lnea
cout<<Ingrese valor de la altura: ;
cin>>altura;
cout<<\n;
Area = (base * altura) / 2;
cout<<El valor del rea para el tringulo es: ;
cout<<Area;
cout<<\n;
}
Pg. 13
E. B. Selectiva Simple
E. B. Selectiva Compuesta
E. B. Selectiva Anidada
E. B. Selectiva Mltiple
INICIO
Declaracin de Variables
Lectura de Datos
F
Cond 1
Accin 1
Accin n
Reporte de Datos
FIN
Diagrama N-S:
INICIO
Declaracin de variables
Lectura de Datos
V
Cond 1
Accin 1
Accin 2
Accin n
Reporte de Datos
FIN
Pg. 14
Solucin
Leyenda de Datos
a: valor del primer nmero entero positivo
b: valor del segundo nmero entero positivo
c: valor del resultado la suma de dos nmeros a y b
Diagrama de Flujo:
INICIO
entero
a, b, c
Leer a , b
a+b
FIN
Diagrama N-S:
INICIO
entero
a, b, c
Leer a , b
a >0 && b>0
V
c
F
a+b
Escribir El valor la
suma es: , c
FIN
Cdigo C:
#include<iostream>
using namespace std;
int main( )
{
float a, b, c;
cout<<Ingrese primer nmero: ;
cin>>a; cout<<\n;
cout<<Ingrese segundo nmero: ;
cin>>b; cout<<\n;
Pg. 15
b. Estructura Bsica Selectiva Compuesta: se tiene un punto de decisin que evala una
condicin y si es Verdadero, ejecuta un conjunto de Acciones, y si es Falsa ejecuta otro
conjunto de acciones.
Diagrama de Flujo
INICIO
Declaracin de Variables
Lectura de
Datos
F
Cond 1
Accin 2
Accin 1
Accin m
Accin n
Reporte de
Datos
FIN
Diagrama N-S
INICIO
Declaracin de variables
Lectura de Datos
Cond 1
V
Accin 1
Accin 2
Accin n
Accin m
Reporte de Datos
FIN
Pg. 16
Ejemplo:
Sumar dos nmeros enteros si son positivos, sino multiplicarlos.
Solucin:
Leyenda de Datos
a: valor del primer nmero entero positivo
b: valor del segundo nmero entero positivo
c: valor del resultado la suma o multiplicacin de dos nmeros a y b
Diagrama de Flujo
INICIO
entero
a, b, c
Leer a , b
F
a*b
Escribir El valor de la
multiplicacion es , c
a+b
Escribir El valor de la
suma es , c
FIN
Diagrama N-S
INICIO
entero
a, b, c
Leer a , b
a >0 && b>0
V
c
F
a+b
a*b
FIN
Cdigo C:
#include<iostream>
using namespace std;
void main( )
{
int a, b, c;
cout<<Ingrese primer nmero: ;
cin>>a;
cout<<\n;
cout<<Ingrese segundo nmero: ;
cin>>b;
cout<<\n;
Pg. 17
INICIO
Declaracin de Variables
Lectura de Datos
F
V
Cond 1
F
Accin 2
Cond 2
Accin 1
Accin m
Accin n
Reporte de Datos
FIN
Diagrama N-S
INICIO
Declaracin de variables
Lectura de Datos
F
Accin 2
Cond 1
V
Accin 1
Accin m
Accin n
V
Cond 2
Reporte de Datos
FIN
Pg. 18
Solucin:
Diagrama de Flujo
INICIO
Entero
Leer a
a>0
F
Escribir No es un
nmero mayor
que cero
V
a>=1 && a>10
Escribir Primeros 10
FIN
Diagrama N-S
INICIO
entero
Leer a
a>0
V
F
V
Escribir Primeros 10
FIN
Cdigo C:
#include<iostream>
using namespace std;
void main( )
{ int a;
cout<<Ingrese nmero: ;
cin>>a;
if(a>0)
if(a>=1 && a<10)
cout<<Primeros 10;
else
cout<<Son ms de los primeros 10;
else
cout<<No es un nmero mayor que cero;
}
Pg. 19
INICIO
Declaracin de Variables
Lectura de Datos
1
default
Cond 1
2
Accin 1
Accin 2
Accin 3
Accin 4
Accin n
Accin m
Accin m
Accin m
Accin 4
Reporte de Datos
FIN
Diagrama N-S
INICIO
Declaracin de variables
Lectura de Datos
Cond 1
default
Accin 1
Accin 2
Accin 3
Accin 4
Accin n
Accin m
Accin m
Accin m
Reporte de Datos
FIN
Ejemplo
Ingresa cinco nmeros e imprime que vocal es.
Solucin:
Leyenda de Datos
num: valor del numero entero positivo
Pg. 20
INICIO
entero
num
Leer num
default
1
num
2
Escribir
Vocal E
Escribir
Vocal A
Escribir
Vocal I
Escribir
Vocal U
Escribir
Vocal O
Escribir
No es
Vocal
FIN
Diagrama N-S
INICIO
entero
num
Leer num
num
1
Escribir
Vocal A
2
Escribir
Vocal E
3
Escribir
Vocal I
4
Escribir
Vocal O
5
Escribir
Vocal U
default
Escribir No
es Vocal
FIN
Cdigo C:
#include<iostream>
using namespace std;
void main( )
{ int num;
cout<<Ingrese nmero: ;
cin>>num;
switch(num)
{
case 1: cout<<Vocal A; break;
case 2: cout<<Vocal E; break;
case 3: cout<<Vocal I; break;
case 4: cout<<Vocal O; break;
case 5: cout<<Vocal U; break;
default: cout<<No es numero para una vocal;
}
}
Pg. 21
E. B. Repetitiva Mientras
E. B. Repetitiva Hacer-Mientras
E. B. Repetitiva Para
INICIO
Declaracin de Variables
Lectura de Datos
F
Cond 1
V
Accin 1
Accin n
Accin 2
FIN
Diagrama N-S
INICIO
Declaracin de variables
Lectura de Datos
Cond 1
Accin 1
.
Accin n
Accin 2
Reporte de Datos
FIN
Ejemplo
Imprimir la serie Fibonacci, menor a un lmite dado: 0,1,1,2,3,5,8,13,.
Pg. 22
INICIO
entero
Escribir b
c
a+b
FIN
Diagrama N-S
INICIO
entero
Leer lim
Escribir a
b <= lim
Escribir c
c
a +b
FIN
Cdigo C:
#include<iostream>
using nameaspace std;
void main( )
{
int lim, a=0, b=1,c;
cout<<Ingrese lmite: ;
cin>>lim;
cout<<a;
Pg. 23
while(b<=lim)
{
cout<<b;
c=a+b;
a=b;
b=c;
}
}
b. Estructura Bsica Repetitiva Hacer - Mientras: realiza al menos una vez un conjunto de
acciones, y luego evala una expresin condicional, si es Verdadero regresa a repetir
el conjunto de acciones, si no cumple, sale del bucle.
Diagrama de Flujo
INICIO
Declaracin
de Variables
Lectura de
Datos
Accin 1
Accin n
Cond 1
F
Accin 2
Reporte de
Datos
FIN
Diagrama N-S
INICIO
Declaracin de variables
Lectura de Datos
Accin 1
.
Accin n
Cond 1
Accin 2
Reporte de Datos
FIN
Pg. 24
INICIO
entero
num
Leer num
V
num <= 0
F
FIN
Diagrama N-S
INICIO
entero
num
Leer num
num <= 0
FIN
Cdigo C:
#include<iostream>
using namespace std;
void main()
{
int num;
do{
";
Pg. 25
cout<<"Ingrese venta:
cin>>m;
}while(m<=0);
";
Pg. 26
de
Lectura de Datos
Definir variable de recorrido y lmite
Variable recorrido es
menor a lmite
V
Accin 1
Accin n
Incrementar Variable de
Recorrido
Accin 2
Reporte de Datos
FIN
Diagrama N-S
INICIO
Declaracin de variables
Lectura de Datos
Pg. 27
entero
i , num, p = 1
Leer num
F
i < = num
V
p * i
i ++
Escribir El factorial es , p
FIN
Diagrama N-S
INICIO
entero
num, i , p =1
Leer num
i = 1 ; i <= num ; i++
p
p * i
i. Ginecologa
40%
ii. Traumatologa
30%
iii. Pediatra
30%
Obtener la cantidad de dinero que recibir cada rea, para cualquier monto
presupuestal.
3. Encuentre el menor de tres nmeros dados.
4. Una fbrica de TV necesita que le ayuden a controlar el manejo de sus inventarios y pedidos
de venta.
Cuando llega un pedido, un programa debe verificar si existe suficiente cantidad de TV en
inventario. Si es as, debe reportar un mensaje PEDIDO COMPLETO y se debe dar la
disminucin del inventario.
Adems se necesita reportar:
El nmero de TV que quedan en el inventario final.
El nmero de pedidos completos.
El nmero de pedidos incompletos.
El nmero de TV vendidos.
El nmero de TV que faltan para completar los pedidos incompletos.
5. Lea un nmero entero e indique cual es su dgito mayor.
6. Suponga que tiene la calificacin final de un grupo de 40 alumnos, calcular la calificacin
promedio y la calificacin mas baja de todo el grupo.
7.
8.
En una universidad se pueden llevar hasta 22 crditos en un ciclo. Elabora el cdigo que
permita a un alumno matricularse sin pasarse del lmite.
9.
Una vendedora de pan tiene n unidades de pan al comenzar el da. Si cada cliente le pide m
panes, cuantos clientes son atendidos completamente, cuantos panes quedan para el ultimo
cliente?
10. Elabore el cdigo para una tienda para leer por cada cliente el monto total de su compra; Al
final del da reportar la cantidad total de ventas y el nmero de clientes atendidos.
11. Un censador recopila datos del ltimo censo nacional, al final de un da desea conocer de las
persona encuestadas el porcentaje que tiene estudios de primaria, el porcentaje que tiene
estudios de secundaria, porcentaje de carrera tcnica, porcentaje de estudios profesionales, y
porcentaje con estudios de post grado.
Pg. 29
SEGUNDA UNIDAD
Pg. 30
4.3 Funciones
Se utilizan para retornar un valor a ser utilizado en el programa.
Declaracin:
Tipo_dato NombreFuncin( )
Tipo_dato NombreFuncin(argumentos)
int a,b,c;
cout<<"Ingrese valor de a: \t";
cin>>a;
cout<<"Ingrese valor de b: \t";
cin>>b;
c=a+b;
cout<<c;
cout<<"\n";
Pg. 31
int c;
c=a+b;
cout<<c; cout<<"\n";
}
void main()
{ int a,b;
cout<<"Ingrese valor de a: \t";
cin>>a;
cout<<"Ingrese valor de b: \t";
cin>>b;
sumar(a,b);
}
//Procedimientos sin Argumentos: Ejemplo2
#include<iostream>
using namespace std;
void sumar()
{ int a,b,c;
cout<<"Ingrese valor de a: \t";
cin>>a;
cout<<"Ingrese valor de b: \t";
cin>>b;
c=a+b;
cout<<c;
}
void main()
{
sumar( );
}
Pg. 32
Con Funciones:
//Funciones con Argumentos: Ejemplo1
#include<iostream>
using namespace std;
int sumar(int a, int b)
{
int c;
c=a+b;
return c;
}
void main()
{
int sum,a,b;
cout<<"Ingrese valor de a: \t";
cin>>a;
cout<<"Ingrese valor de b: \t";
cin>>b;
sum=sumar(a,b);
cout<<"Valor de la suma de a y b:
"<<sum;
cout<<"\n";
}
//Funciones sin Argumentos: Ejemplo2
#include<iostream>
using namespace std;
int sumar()
{
int a,b,c;
cout<<"Ingrese valor de a: \t";
cin>>a;
cout<<"Ingrese valor de b: \t";
cin>>b;
c=a+b;
return c;
}
void main()
{
int sum;
sum=sumar();
cout<<"Valor de la suma de a y b:
"<<sum;
cout<<"\n";
}
Pg. 33
int a,b;
cout<<"Ingrese valor de a: \t"; cin>>a;
cout<<"Ingrese valor de b: \t"; cin>>b;
sumar(a,b);
return 0;
}
void sumar(int a, int b)
{
int c;
c=a+b;
cout<<c;
cout<<"\n";
}
//Funciones con Argumentos
#include<iostream>
using namespace std;
int sumar(int a, int b);
void main()
{
int sum,a,b;
cout<<"Ingrese valor de a: \t"; cin>>a;
cout<<"Ingrese valor de b: \t"; cin>>b;
sum=sumar(a,b);
cout<<"Valor de la suma de a y b:
"<<sum;
cout<<"\n";
}
int sumar(int a, int b)
{
int c;
c=a+b;
return c;
Pg. 34
+ 5
y = 3x - 1
y = x
- 4x + 5
si
x <= 0
si
0<x<2
si
x >= 2
#include<iostream>
using namespace std;
float ecuaciones()
{ float x,y;
cout<<"Ingresar valor de x para calcular funcion f(y)=x <<\t"; cin>>x;
if(x<=0)
{ cout<<"Ecuacion a usar es y=(x^2)+5\n";
y=(x*x)+5;
}
else
if(x>0&&x<2)
{ cout<<"Ecuacion a usar es y=3x+1\n";
y=(3*x)-1;
}
else
if(x>=2)
{ cout<<"Ecuacion a usar es y=(x^2)-4x+5\n";
y=(x*x)-(4*x)+5;
}
return y;
}
void main()
{ float res;
res=ecuaciones();
cout<<"Resultado de la funcion es f(y)=\t"<<res; cout<<"\n";
}
2. Para repartir una herencia se tiene en cuenta: Si la cantidad de hijos es menor a 4, se repartir
exactamente entre el nmero de hijos; si son cuatro o ms hijos, la mitad le tocar al hermano mayor
y el resto se dividir entre los dems hermanos.
#include<iostream>
using namespace std;
//procedimientos sin argumentos
void herencia()
{ float her,may;
int num;
cout<<"Ingresar importe de herencia \n";
cin>>her;
cout<<"Ingresar cantidad de hijos \n";
cin>>num;
if(num<4)
{
her=her/num;
cout<<"Herencia a cada hijo es "<<her;
}
else
{
may=her/2;
her=may/(num-1);
cout<<"\nHerencia de hermano mayor es"<<may;
cout<<"\nHerencia de cada hijo es "<<her; }
}
void main(
{
herencia( ); }
Pg. 35
Actividades
Construir los programas usando funciones y procedimientos en Cdigo en C respectivo para:
1. Realizar un programa que tenga un mdulo reciba dos argumentos a, b (enteros) y que
intercambie los valores de dichas variables.
-> Elaborar un mdulo para leer a y b.
2. En un banco, a los clientes que de tipo 1, 2, 3, que aperturan cuentas de Ahorro(A), Corriente
(C), o Valores (V), todos en nuevos soles, se les otorga un bono (dlares), de acuerdo a la sgte.
Tabla:
Cuenta:
$ 500
$ 400
$ 300
$ 400
$ 300
$ 200
$ 300
$ 200
$ 100
Tipo cliente
11 - 16
17 -20
A ++
A+
A-
B ++
B+
B-
C ++
C+
C-
Promedio
Alumno
A + = 7%
A - = 10 %
B ++ = 3 %
B+=5%
B-=7%
C ++ = 1 %
C+ = 3%
C-=5%
Pg. 37
Excelente (E)
40
30
20
Bueno (B)
30
20
10
Regular (R)
20
10
Malo (M)
Tipo Cliente
El cliente Excelente y Bueno puede pagar en Efectivo, Cheque o crdito, el cliente Regular
puede pagar en Efectivo o Cheque y el cliente Malo solo paga en efectivo.
2. En un cajero se puede realizar las operaciones de depsito, saldo, y retiro. Elabore un programa
permitir a un cliente realizar estas operaciones las veces que lo requiera.
La funcin factorial:
4! = 4 * 3 * 2 * 1
n!
4 * 3!
4! = 4 * 3 * 2 * 1
4 * 3!
3! = 3 * 2 * 1
Es decir n*(n-1)!
3 * 2!
3! = 3 * 2 * 1
3 * 2!
Es decir n*(n-1)!
2! = 2 * 1
2 * 1!
2! = 2 * 1
1! = 1 * 0!
2 * 1! Es decir n*(n-1)!
0! = 1
1! = 1 * 0!
0! = 1
int factorial(int n)
{ if (n == 0)
1 * 1 * 2 * 3 * 4 = 24
return 1;
else
return n*factorial(n-1);
}
Pg. 38
3*4=3+3+3+3
3*4=3+3+3+3
3 + (3 * 3)
3 + (3 * 3)
3*3=3+3+3
3*3=3+3+3
3 + (3 * 2)
3 + (3 * 2)
3*2=3+3
3*2=3+3
3 + (3 *1)
3*1 =3
3 + (3 *1)
3*1 =3
3 + 3 + 3 + 3 = 12
Actividades
Investigar y Exponer las funciones recursivas de:
1. Serie Fibonacci
2. Mximo Comn Divisor
3. Torres de Hanoi.
Pg. 39
TERCERA UNIDAD
Enteros
Reales
Caracter
Arreglos
Registros
Archivos
Cadenas
Lineales
Estructuras de Datos
Compuestos
Listas
Pilas
Colas
Arboles
Grafos
Estructuras de Datos Estticos: Son aquellas en las que la cantidad de memoria que ocupan se
define antes de ejecutar el programa. Durante la ejecucin del mismo este tamao asignado no
puede alterarse.
Estructuras de Datos Dinmicos: Son aquellas en las que no es necesario reservar espacio de
memoria antes de ejecutar el programa, ya que este espacio se puede asignar durante su
ejecucin segn se necesite. As mismo dicho espacio puede ser liberado para poder ser utilizado
por otros datos.
Actividades
Investigar y Exponer cuales son las estructuras de datos:
1. Estndar.
2. Creadas por el Programador.
Pg. 40
NombreArreglo[tamao]
Entero
M[10]
Pg. 41
Aadir
//Aadir un valor en la ultima posicin
#include<iostream>
#define MAX 100
using namespace std;
int leenum()
{ int num;
do{
cout<<"Ingrese numero de elementos para el arreglo: ";
cin>>num; cout<<"\n";
}while(num<=0 || num>MAX);
return num;
}
Pg. 42
Pg. 43
Eliminar
//Eliminar un valor en cualquier posicin
#include<iostream>
#define MAX 100
using namespace std;
int leenum()
{
int num;
do{
cout<<"Ingrese numero de elementos para el arreglo: ";
cin>>num;
cout<<"\n";
}while(num<=0 || num>MAX);
return num;
}
void ingresadatos(int V[MAX], int n)
{
int i;
cout<<"Ingrese elementos para el arreglo "; cout<<"\n";
for(i=0;i<n;i++)
{ cout<<"Elemento ["<<i<<"]"<<":";
cin>>V[i];
}
}
Pg. 44
B. Secuencial
//Bsqueda Secuencial 1
#include<iostream>
#define MAX 100
using namespace std;
//Se entiende que se realizan los procedimientos de lectura de datos
void bsecuencial(int a[MAX], int n)
{ int elem,i;
cout<<"\n Ingrese elemento a buscar en el arreglo "<<":\t"; cin>>elem;
for(i=1;i<=n;i++)
if(a[i]==elem)
{
cout<<"\n Encontrado\t Posicion :\t"<<i<<"\t"; cout<<"\n\n";
}
}
void main()
{int A[MAX];
int num;
num=leenum();
Pg. 45
B. Bsqueda Binaria
#include<iostream>
#define MAX 100
using namespace std;
int leenum()
{
int num;
do{
cout<<"Ingrese numero de elementos para el arreglo: ";
cin>>num; cout<<"\n";
}while(num<=0 || num>MAX);
return num;
}
void ingresadatos(int V[MAX], int n)
{
int i;
cout<<"Ingrese elementos para el arreglo ";cout<<"\n";
for(i=1;i<=n;i++)
{ cout<<"Elemento ["<<i<<"]"<<":";cin>>V[i]; }
}
void mostrar(int V[MAX], int n)
{
int i;
cout<<"Los elementos del arreglo son"; cout<<"\n";
for(i=1;i<=n;i++)
{ cout<<"Elemento"<<"["<<i<<"]"<<":\t";cout<<V[i]; }
}
Pg. 46
Pg. 47
15
12
12
45
22
7
n1=6
n2=7
elem=3
Solucin:
#include<iostream>
#define MAX 100
using namespace std;
void ingresadatos(int V[MAX], int n,char titu[20])
{ int i;
cout<<"Ingrese elementos para el arreglo "<<titu;cout<<"\n";
for(i=0;i<=n-1;i++)
{
cout<<"Elemento ["<<i<<"]"<<":";
cin>>V[i];
}
}
int separacion(int VA[MAX],int na,int VB[MAX],int nb,int VC[MAX])
{
int i,j;
int k=0, ban=0;
//busqueda de arreglos
for(i=0;i<na;i++)
{for(j=0;j<nb;j++)
if(VA[i]==VB[j])
{
ban=1;
break;
}
if(ban==0)
{ VC[k]=VA[i];
k++;
}
else
ban=0;
}
return k;
}
void mostrar(int V[MAX], int n, char titu[20])
{
int i;
cout<<"Los elementos del arreglo "<<titu;
cout<<" son:"; cout<<"\n";
Pg. 48
15
12
45
22
7
n1=6
Solucin:
#include<iostream>
#define MAX 100
using namespace std;
n2=7
elem=3
Actividades
1. Elaborar un programa dado las notas de 35 alumnos, se debe reportar la nota mas alta, la
nota mas baja y el promedio de notas ingresadas.
2. Elaborar un programa para que se ingresen los sgtes. valores del arreglo mostrado, sume
el valor en la posicin 0 con el valor en la posicin 3 y luego multiplicar por el valor en la
posicin 5.
Posicion
ARRAY
1
10.6
3.4
2
9
3
2.3
4
5
5
4.5
NombreMatriz[nfilas][ncolumnas]
Entero
M[4][5]
columnas
0
filas
0
1
2
3
Pg. 52
int nf,nc;
";
";
ingresadatos(B,nf,nc); cout<<"\n";
mostrar(B,nf,nc); cout<<"\n";
cout<<"Los elementos de la diagonal Principal: "<<"\n";
diagonal_principal(B,nf,nc); cout<<"\n";
cout<<"Los elementos de las diagonales : "<<"\n";
diagonales(B,nf,nc); cout<<"\n";
}
Pg. 53
cout<<"\n";
";
Pg. 55
1. Imprimir lo nmeros que rodean a un nmero X, la primera vez que se encuentra en la Matriz
incluido el nmero X:
-6
Solucin:
.. //Se entiende que se realizan los procedimientos de lectura de datos
void rodean(int M[MAX][MAX], int nf, int nc,int n)
{int i,j;
int f,c;
int ban=0;
for(i=0;i<=nf-1;i++)
for(j=0;j<=nc-1;j++)
if( M[i][j]==n && ban==0)
{
f=i;
c=j;
ban=1;
}
if (ban==1)
{cout<<"Los Numeros que rodean son: \n";
for(i=0;i<=nf-1;i++)
{for(j=0;j<=nc-1;j++)
if((i>=f-1 && i<=f+1) && (j>=c-1 && j<=c+1))
cout<<M[i][j]<<"\t";
else
cout<<" ";
cout<<"\n";
}
}
else
cout<<"El numero ingresado no existe";
}
void main()
{int B[MAX][MAX];
int nf,nc,num;
cout<<"Ingrese numero de filas
nf=leenum();
";
";
ingresadatos(B,nf,nc); cout<<"\n";
cout<<"Ingrese el numero a buscar
cin>>num;
rodean(B,nf,nc,num); cout<<"\n";
";
}
Pg. 56
0
1
-5
-3
0
1
-5
-3
1
9
1
N = 3, se
imprime la
columna 3
-3
2
0
2
7
1
N = 2, se
imprime la fila 2
y la columna 2
-3
Solucin:
.. //Se entiende que se realizan los procedimientos de lectura de datos
void seleccion(int M[MAX][MAX], int nf, int nc)
{
int i,j,n;
do{
cout<<"Ingrese valor de N: ";
cin>>n;
}while(n<0 || (n>=nf && n>=nc));
cout<<"\n\n\n";
for(i=0;i<=nf-1;i++)
{
for(j=0;j<=nc-1;j++)
{
if(i==n || j==n)
cout<<M[i][j]<<"\t";
else
cout<<"
";
}
cout<<"\n";
}
}
void main()
{int B[MAX][MAX];
int nf,nc;
cout<<"Ingrese N filas
nf=leenum();
";
cout<<"Ingrese N columnas
nc=leenum();
";
ingresadatos(B,nf,nc);cout<<"\n";
seleccion(B,nf,nc);cout<<"\n";
}
Pg. 57
-1
-1
Pg. 58
Actividades
Elaborar el programa en C ++ para:
1.
Dada una matriz de n filas y m columnas, elaborar los mdulos de programa para: indicar
el menor elemento y la(s) posicin(es) en que se encuentra y para hacer rotar a la matriz
3 veces (intercambiar filas y columnas).
2.
3.
4.
Pg. 59
19
1.73
nombre
edad
Talla
sexo
(cadena)
(int)
(float)
(char)
Declaracin:
struct nombre{
char f[5];
char e[3];
int s;
char a;
};
Datos afines
respecto a la
estructura.
struct {
char f[5];
char e[3];
int s;
char a;
}nomb_variable;
Ejemplo:
#include<iostream>
using namespace std;
struct{
int dia;
int mes;
long int anual;
}hoy;
void main( )
{
cout<<"Ingrese dia: \t";
cin>>hoy.dia;
cout<<"Ingrese mes: \t";
cin>>hoy.mes;
cout<<"Ingrese anno: \t";
cin>>hoy.anual;
cout<<hoy.dia<<" / "<<hoy.mes<<" / "<<hoy.anual;
cout<<"\n";
Pg. 60
#include<iostream>
using namespace std;
struct direccion{
char nombre[30];
char calle[30];
int num;
char ciudad[30];
};
void main( )
{ direccion oficina, casa;
cout<<"Datos Oficina";cout<<"\n";
cout<<"Ingrese su nombre: \t";
cin>>oficina.nombre;
cout<<"Ingrese calle: \t";
cin>>oficina.calle;
cout<<"Ingrese num calle: \t";
cin>>oficina.num;
cout<<"Ingrese ciudad: \t";
cin>>oficina.ciudad;
cout<<"\n";
cout<<oficina.nombre<<"---"<<oficina.calle<<"---"<<oficina.num<<"--"<<oficina.ciudad; cout<<"\n"; cout<<"\n";
cout<<"Datos Casa";cout<<"\n";
cout<<"Ingrese su nombre: \t";
cin>>casa.nombre;
cout<<"Ingrese calle: \t";
cin>>casa.calle;
cout<<"Ingrese num calle: \t";
cin>>casa.num;
cout<<"Ingrese ciudad: \t";
cin>>casa.ciudad;
cout<<"\n";
cout<<casa.nombre<<"---"<<casa.calle<<"---"<<casa.num<<"---"<<casa.ciudad;
}
Uso del typedef: Siempre en los programas se realiza una tarea de modelado de los datos que
consiste en convertir los datos reales en datos aplicables en un programa informtico. En C existe
una palabra reservada llamada typedef que sirve para crear tipos de datos propios. Permite dar
una mayor claridad y simplicidad al cdigo, aunque su uso es opcional. Su sintaxis es la siguiente:
typedef definicinDelTipo NombreDelTipoDeDatos
Definir estructuras con typedef
struct domicilio{
char nombre[30];
char calle[30];
int num;
char ciudad[20];
};
typedef struct domicilio;
void main( )
{
domicilio Oficina, casa;
}
Pg. 62
Actividades
1. Los alumnos de 3 secciones (A, B, C) han rendido 3 exmenes (E1, E2, E3)
Se quiere escribir un programa que lea los datos de los n alumnos: nombre, seccin y las
notas de los 3 exmenes y que imprima los sgte.:
- La lista de los n alumnos exonerados del examen final en orden de mritos.
- Los alumnos que no han sido exonerados tienen derecho a un examen sustitutorio al que
reemplaza la nota ms baja para calcular nuevamente el promedio. En este caso se aprueba
con promedio >=11.
- Imprimir la lista de alumnos que a pesar de aprobar el sustitutorio no aprueban el curso.
Pg. 63
Entonces
Ejemplo:
struct tabla {
char nombre[30];
char tipo;
char cadena[5];
int entero;
Si tipo es c , se
utiliza cadena, pero
si es e , se utiliza
entero.
};
struct tabla{
char nombre[30];
char tipo;
union {
char cadena[5];
int entero;
} dato;
};
Actividades
1. Elaborar un programa en C, para demostrar el uso y la diferencia de la unin con respecto
a los registros.
alumno
nombre
carrera
public:
alumno();
~alumno();
void ingresar();
void imprimir();
};
ingresar
imprimir
Actividades
1. Investigar y exponer los tipos de datos abstractos que se pueden usar en la construccin
de un programa.
Pg. 64
Para accesar desde fuera del objeto a sus datos pblicos y funciones miembro pblicas escribe.
< nombre del objeto >.< dato miembro >
< nombre del objeto >.< funcion miembro >
Constructor: Un constructor es una funcin miembro que permite inicializar los datos miembro de
un objeto. Tiene las siguientes caractersticas:
- Su nombre es igual al de la clase.
- No devuelve valores.
- Puede haber ms de un constructor.
- Se invoca al momento de declarar al objeto.
Destructor: Un destructor es una funcin que permite liberar el rea de memoria ocupada por un
objeto cuando este ya no va ser usado .Sus caractersticas son:
- Su nombre es igual al de la clase pero precedido por el smbolo ~ .
- No devuelve valores.
- Slo puede haber un destructor.
- Se invoca al momento de salir o abandonar el mbito donde fue creado el objeto.
Pg. 65
Pg. 66
MEMORIA
200
p
800
800
x 23
Ejemplos:
int *p;
// p es una variable tipo puntero que apunta a una variable tipo int.
float *q;
// q es una variable tipo puntero que apunta a una variable tipo float.
char *r;
// r es una variable tipo puntero que apunta a una variable tipo char.
Ejemplo:
MEMORIA
200
p 800
800
x 23
*p
Pg. 67
Variables estticas
Son aquellas que se declaran expresamente en los programas y a las que el sistema operativo
asigna una posicin de memoria antes de la ejecucin del mismo.
Variables dinmicas
Son variables que se crean y se destruyen durante la ejecucin del programa. No son declaradas
explcitamente en los programas.
Operador &
Devuelve la direccin de memoria de una variable. Su sintaxis es:
variable de tipo
puntero
new
tipo de dato de la
variable creada
Pg. 68
Ejemplo:
void main()
{ int *p, *q;
p = new int;
q = new int;
*p = 8;
*q = *p;
}
NOTA:
No se puede asignar una variable tipo puntero a otra que no sea de su mismo tipo.
int *p, *q;
float *r;
p = new int;
*p =7;
q = p;
r = p;
delete <variable tipo puntero que apunta a la variable dinmica que ser eliminada>;
Se libera el espacio ocupado por la variable dinmica para poder ser utilizado nuevamente. La
variable tipo puntero que la apuntaba mantiene de la variable dinmica, aunque ya no tenga
significado su apuntamiento.
void main()
{
int *p;
p = new int;
*p = 17;
cout<<p;
delete p;
cout<<p;
}
Pg. 69
Constante NULL
Es una constante predefinida en C++ cuyo valor es cero (0) y sirve para inicializar una variable tipo
puntero que no apunta a ninguna variable.
variable tipo puntero = NULL;
void main()
{
int *p;
p = new int;
*p = 17;
cout<<p;
delete p;
cout<<p;
p = NULL;
cout<<p;
}
Actividades
Investigar y Exponer:
Punteros (I)
a. Definicin, Declaracin, Inicializacin.
b. Opciones de Inicializacin.
c. Inicializacin a travs de memoria dinmica.
Punteros (II)
a. Operador de Direccin y Operador de Indireccin.
b. Asignacin de Punteros.
c. Puntero a Puntero.
Punteros (III)
a. Puntero a void.
b. Puntero constante.
c. Puntero a constante.
Punteros (IV)
a. Puntero a funcin.
b. Paso de Parmetros en funciones.
c. Puntero a clases (objetos).
Punteros (V)
a. Puntero This.
b. Puntero NULO.
c. Aritmtica de Punteros.
Pg. 70
Una lista enlazada es una estructura de datos dinmica formada por un conjunto de elementos
llamados nodos.
Cada nodo consta de dos partes:
Dato
Direcc
nodo sig
Los nodos son variables dinmicas que se crean y destruyen de acuerdo a los requerimientos del
proceso.
- Para acceder a la lista es necesario un puntero que contenga la direccin del primer nodo.
- Si la lista est vaca dicho puntero tendr el valor NULL.
- El ltimo elemento de la lista se reconoce porque su puntero al siguiente tiene valor NULL.
Lista
12
30
21
54
NULL
Es un conjunto de elementos en los que cada elemento contiene la posicin o direccin del sgte.
campo de la Lista.
Lista
NULL
Donde cada elemento de la lista simplemente enlazada llamado nodo se define:
struct nodo{
int n; //el campo puede ser string, float, estructura, etc.
nodo * sgte; // direccin al siguiente nodo
};
Pg. 71
Pg. 72
ban=0;
break;
}
}
if(ban==0)
{cout<<"ENCONTRADO";
}
else
{cout<<"NO ENCONTRADO"; }
}
return pos;
}
void lista::buscar_anterior()
{
pnodo pos,p;
int valor,ban=0;
cout<<"Ingrese dato:"; cin>>valor;
pos = NULL;
p = pL;
while(p!=NULL)
{
if ( (*p).dato != valor)
{
ban=1;
pos = p;
p = (*p).sig;
}
else
{
ban=0;
break;
}
}
if(ban==0)
{cout<<"ENCONTRADO: "<<(*pos).dato ;
}
else
{cout<<"NO ENCONTRADO";
}
}
Pg. 74
ListasSE.cpp
#include <iostream.h>
#include "ListasSE.h"
using namespace std;
void main()
{
lista L; pnodo b;
int valor,opc;
do
{
cout<<"\nmenu";
cout<<"\n1 insertar al inicio";
Pg. 75
ListaC
12
30
21
54
ant
dato
sig
Pg. 76
Gracias a los punteros ant y sig es que puede recorrerse la LDE en forma bidireccional, lo cual
constituye una ventaja importante frente a una lista enlazada simple que slo puede recorrerse en
un sentido.
En contraparte, el espacio ocupado en memoria es mayor debido a la inclusin de un segundo
puntero.
Para tener acceso a la lista es necesario un puntero Ld que contenga la direccin del primer nodo.
El campo ant del primer nodo tiene valor NULO, pues no existe un nodo anterior a este,
anlogamente, el ltimo nodo tiene tambin en su campo sig el valor NULO para expresar el
hecho de que no existe un siguiente nodo.
ListaDE
NULL
12
30
21
54
NULL
Actividades
1. Utilizando los algoritmos de implementacin de la lista simplemente enlazada, implementar
los programas para:
a. Lista Circular.
b. Lista Doblemente Enlazada.
15.4 Colas
Una Cola es una lista ordenada de elementos en la cual las inserciones se realizan por un extremo
llamado Final y las eliminaciones por el otro extremo denominado Frente. Una Cola es una
estructura tipo FIFO ( First In - First Out ) ya que los elementos se sacan de la cola en el mismo
orden en que fueron insertados. La estructura de los nodos de una cola es la siguiente:
dato
sig
Para especificar una cola son necesarios dos punteros, uno que apunte al primer elemento de la
cola y el otro al ltimo elemento de la cola.
Cola
NULL
12
30
21
54
Pg. 77
cola::~cola()
{
pnodo p,q;
if ( pL != NULL )
{
p = pL;
while ( p != NULL )
{
q = (*p).sig;
delete p;
p = q;
}
pL=p;
}
}
void cola::encolar()
{
pnodo nuevo,aux;
int valor;
nuevo = new nodo;
cout<<"Ingrese valor:";
cin>>valor;
(*nuevo).dato = valor;
(*nuevo).sig = NULL;
if ( pL == NULL )
pL = nuevo;
else
{
aux = pL;
while ( (*aux).sig != NULL )
aux = (*aux).sig;
(*aux).sig = nuevo;
}
}
Pg. 78
void cola::desencolar()
{
pnodo aux;
if(pL==NULL)
{ cout<<"cola vacia"; }
else
{
aux=pL;
if((*pL).sig==NULL)
// un nodo
{
pL=NULL;
}
else
{ pL=(*pL).sig; }
cout<<"elemento eliminado"<<(*aux).dato;
}
}
delete aux;
void cola::mostrar()
{
pnodo p;
if ( pL == NULL )
cout<<"cola vacia"<<endl;
else
{
p = pL;
while (p != NULL)
{
cout<<(*p).dato<<" -> ";
p = (*p).sig;
}
cout<<"NULO"<<endl;
}
}
Cola.cpp
#include <iostream>
#include "Cola.h"
using namespace std;
void main()
{
cola C;
int opc;
do
{
cout<<"\nmenu";
cout<<"\n1 encolar";
cout<<"\n2 desencolar";
cout<<"\n3 mostrar";
cout<<"\n4 Salir";
do
{
cout<<"\n Seleccione opcin"; cin>>opc;
} while(opc>4);
switch(opc)
{case 1:C.encolar();break;
case 2:C.desencolar();break;
case 3:C.mostrar();break;
}
} while(opc!=4);
}
Actividades
1. Exponer la prueba de escritorio de los mdulos de programa para la estructura de dato
cola.
Pg. 79
15.5 Pilas
Una Pila es una lista de elementos en la cual las inserciones y las eliminaciones se realizan por un
mismo extremo llamado Cima.
Una Pila es una estructura tipo LIFO ( Last In - First Out ) ya que los elementos se sacan de la pila
en orden contrario al que fueron insertados.
La estructura de los nodos de una pila es la siguiente:
dato
sig
Para especificar una pila es necesario un puntero, que apunte al primer elemento de la pila, es
decir a la cima.
Pila
NULL
12
30
21
54
Pila.h
#include<iostream>
using namespace std;
struct nodo
{
int dato;
nodo *sig;
};
typedef nodo *pnodo;
class stack
{
private:
pnodo pL;
public:
stack();
~stack();
void apilar();
void desapilar();
void mostrar();
};
stack::stack()
{
pL = NULL;
}
stack::~stack()
{
pnodo p,q;
if ( pL != NULL )
{
p = pL;
Pg. 80
Pg. 81
int opc;
do
{
cout<<"\nmenu";
cout<<"\n1 apilar";
cout<<"\n2 desapilar";
cout<<"\n3 mostrar";
cout<<"\n4 Salir";
do
{
cout<<"\n Seleccione opcin"; cin>>opc;
} while(opc>4);
switch(opc)
{case 1:S.apilar();break;
case 2:S.desapilar();break;
case 3:S.mostrar();break;
}
} while(opc!=4);
Actividades
1. Exponer la prueba de escritorio de los mdulos de programa para la estructura de dato
pila.
Ejemplo:
A
Pg. 82
B, C, H, I, P, Q, K, L, M, N
Ejemplo:
longitud_camino ( A , Q ) = 3
Nivel: Cada nodo tiene asociado un nivel, determinado por la logintud de camino desde la raiz
hasta el nodo especifico.
Ejemplo:
Nivel 0
Nivel 1
B,C,D,E,F,G
Nivel 2
H,I,J,K,L,M,N
Nivel 3
P,Q
Profundidad de un rbol: Es el numero mximo de nodos en una rama. Es decir nivel mas alto
de los nodos ms uno.
Ejemplo:
profundidad = nivel +1
profundidad = 3 +1 = 4
Representacin Primer Hijo Siguiente Hermano
Cada nodo del rbol solo tiene dos punteros, uno para apuntar a su primer hijo y otro para apuntar
a su siguiente hermano.
Pg. 83
#include <iostream>
#define MAX 10
using namespace std;
struct nodo
{ int dato;
nodo * hijo;
nodo * her;
};
typedef nodo *pnodo;
class arbol
{public: //cambiar a privada para recursividad de mostrar
pnodo rpri;
public:
arbol();
~arbol();
pnodo buscar(pnodo aux, pnodo pos,int d);
void mostrar(pnodo aux);
void inserta_principal();
void inserta_hijo();
void inserta_hermano();
};
arbol::arbol()
{rpri =NULL;}
arbol::~arbol()
{ }
pnodo arbol::buscar(pnodo aux, pnodo pos, int d)
{ pnodo aux2;
if (aux==NULL)
{ pos=NULL; }
else
{ if((*aux).dato ==d)
{ pos=aux;
}
else
{
aux2=(*aux).hijo;
do
{
while(aux2!=NULL && (*aux2).hijo ==NULL)
{
if((*aux2).dato==d)
{
pos=aux2;
break;
}
aux2=(*aux2).her;
}
if(aux2==NULL && pos==NULL)
return NULL;
if(aux2!=NULL)
{ pos=buscar(aux2,pos,d);
aux2=(*aux2).her;
}
else
break;
}while(aux2!=NULL);
}
}
return pos;
}
Pg. 84
Pg. 85
Pg. 86
Subarbol
Izquierdo
Subarbol
Derecho
Ejemplo:
A
rbol de Expresin
Es un rbol binario en el que las hojas contienen los operandos y los nodos internos los
operadores de una expresin matemtica.
Ejemplo:
^
a
*
b
*
d
Pg. 87
10
Para poder tener acceso al rbol es necesario un puntero que contenga la direccin de la raz.
arbolabb.h
#include<iostream>
using namespace std;
struct nodoABB
{
nodoABB *hizq;
int dato;
nodoABB *hder;
};
typedef nodoABB *pnodoABB;
class abb
{
private:
pnodoABB praiz;
public:
abb();
~abb();
pnodoABB getraiz();
pnodoABB buscar( int x );
void insertar( int x );
void imprimeenorden( pnodoABB p );
void imprimepreorden( pnodoABB p );
void imprimepostorden( pnodoABB p );
void eliminaarbol( pnodoABB p );
};
abb::abb()
{
praiz = NULL;
}
abb::~abb()
{
eliminaarbol(praiz);
praiz = NULL;
}
Pg. 88
pnodoABB abb::getraiz()
{ return praiz;
}
pnodoABB abb::buscar( int x )
{
pnodoABB p; int ok;
if ( praiz == NULL )
return NULL;
else
{
ok = 0;
p = praiz;
while ( p != NULL && ok == 0 )
if ( (*p).dato == x )
ok = 1;
else
if ( x < (*p).dato )
p = (*p).hizq;
else
p = (*p).hder;
return p;
}
}
void abb::insertar( int x )
{
pnodoABB p,q,r,pos;
char h;
p = new nodoABB;
(*p).dato = x;
(*p).hizq = NULL;
(*p).hder = NULL;
if ( praiz == NULL )
praiz = p;
else
{
pos=buscar(x);
if(pos!=NULL)
cout<<"Elemento ya existe";
else
{
q = praiz;
while ( q != NULL )
{
r = q;
if ( x < (*q).dato )
{
q = (*q).hizq;
h = 'i';
}
else
{
q = (*q).hder;
h = 'd';
}
}
if ( h == 'i' )
(*r).hizq = p;
else
(*r).hder = p;
}
}
}
Pg. 89
Pg. 90
ArbolBinario.cpp
#include <iostream.h>
#include "arbolabb.h"
using namespace std;
void main()
{
abb A;
pnodoABB b,r;
int i, x, sn, n, cn,opc;
do
{
cout<<"\n Menu \n";
cout<<"\n1 insertar nodo";
cout<<"\n2 mostrar in orden";
cout<<"\n3 mostrar pre orden";
cout<<"\n4 mostrar post orden";
cout<<"\n5 Salir";
do
{
cout<<"\n\n Seleccione opcion: ";
cin>>opc;
} while(opc>5);
switch(opc)
{
case 1:{
cout<<"Ingrese hoja: ";
cin>>x;
A.insertar(x);
r = A.getraiz();
}break;
case 2:A.imprimeenorden(r);break;
case 3:A.imprimepreorden(r);;break;
case 4:A.imprimepostorden(r);break;
}
} while(opc!=5);
}
Actividades
2. Completar con valores numricos adecuados el sgte. rbol binario. Imprimir los nodos del
resultado de cada recorrido.
Pg. 91
Grafo dirigido
Ejemplo:
La imagen es una representacin del siguiente grafo:
V:={1,2,3,4,5,6}
E:={{1,2},{1,5},{2,3},{2,5},{3,4},{4,5},{4,6}}
El hecho que el vrtice 1 sea adyacente con el vrtice 2 puede ser denotado como 1 ~ 2.
En la Teora de las categoras una categora puede ser considerada como un multigrafo
dirigido, con los objetos como vrtices y los morfismos como aristas dirigidas.
En ciencias de la computacin los grafos dirigidos son usados para representar mquinas
de estado finito y algunas otras estructuras discretas.
Actividades
1. Utilizando las estructuras de datos estudiadas, construir el programa que implemente la
definicin y las operaciones de un grafo.
Pg. 92
CUARTA UNIDAD
Conceptos Bsicos
Campos
Nombre
Direccion
FechaNacimiento
7
Dia
4
Mes
Ano
Nombre
Direccion
FechaNacimiento
Pueden ser todos de longitud fija, es decir para el ejemplo anterior, los registros empleados
pueden contener el mismo nmero de campos: nombre, fecha de nacimiento, direccion, etc.
FICHERO: Es una coleccin de registros relacionados entre si, con aspectos en comun y
organizados para un propsito especifico.
Pg. 93
Pg. 94
Actividades
1. Presentar el algoritmo de Ordenacin sobre:
a. Ordenacin por Seleccin.
b. Ordenacin por Insercin Directa.
c.
d. Ordenacin Shell.
e. Ordenacin Heapsort.
f.
Ordenacin Quicksort.
Pg. 95
REFERENCIAS BIBLIOGRFICAS
Y DIRECCIONES ELECTRNICAS
Ceballos Sierra, Francisco. C / C++ curso de programacin. 6ta ed. Mexico: AlfaOmega;
2006.
Joyanes Aguilar, Luis. Fundamentos de Programacin. 2da. ed. Espaa: McGraw-Hill;
2003.
Joyanes Aguilar, Luis. Estructura de Datos. 1ra. ed. Espaa: McGraw-Hill; 2000.
Raffo Lecca, Eduardo. Turbo C++. 1 ed. Lima: Mundigraph; 2000.
Baeza Yates, Ricardo. Algorimtia. Dpto. de Cs. de la Computacin, Univ. de Chile: 2002.
Disponible en www.dcc.uchile.cl/~rbaeza/inf/algoritmia.pdf
Cceres Gonzlez Abdiel E. Dr. Apuntes para el curso de Estructuras de datos en
C/C++ . ITESM-CCM: 2005. Disponible en http://bjcu.uca.edu.ni/LibrosIsti/estrdatos.pdf
Rodrguez Moreno, Pedro. El Lenguaje C (Programacin Avanzada). Sistemas de
Computacin I (IECI) Departamento de Sistemas de Informacin. Facultad de Ciencias
Empresariales.
Chile;
2005.
Disponible
en
http://www.face.ubiobio.cl/~prodrigu/sc1/Cap2-Lenguaje-C-(Programacion-Avanzada)part-1.pdf
Pg. 96