Katia Perez Programacion en Java
Katia Perez Programacion en Java
Katia Perez Programacion en Java
DE BOLIVIA
CARRERA INGENIERIA DE SISTEMAS
DOSSIER
PROGRAMACION II
Tercer Semestre
“Escribir en C o C++ es como utilizar un sierra eléctrica sin ningún tipo de protección.”
“Escribir en C o C++ es como utilizar un sierra eléctrica sin ningún tipo de protección.”
— Bob Gray
— Bob Gray
1.1. INTRODUCCIÓN
Simples
Estructurados
Los datos simples ocupan sólo una casilla de memoria, por tanto una
variable simple hace referencia a un único valor a la vez.
Los datos Estructurados o Compuestos se caracterizan por el hecho
de que con un nombre (identificador de variable estructurada) se hace
referencia a 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 Identificador
int A;
25
A = 25;
Dato Estructurado
int A[5] ; 20 30 40 50 60
A = {20,30,40,50,60}; A =
Identificador
1.3. ABSTRACCIÓN
Ru: entero
Elementos Nombre: Cadena
Sexo: carácter
Direccion: Cadena
LeerDatosEstudiante ()
ImprimirDatosEstudian
Operaciones te ()
o métodos ModificarDireccion()
CalcularNotaFinal()
Componentes
C1 C2 … Cn
i0 i1 … iN Indices
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:
O bien:
Tipo_dato [ ] identificador;
Donde:
Tipo_dato: es el tipo de datos de los elementos del vector.
Identificador: es el nombre del vector.
Por ejemplo:
VECTOR
V[15]: Entero
N: Entero
[Estructura de Datos] Page 6
Lic. Katya Perez Martinez leedim()
leervector()
mostrarvector()
Ejercicios
A continuación se muestra la implementación de este TAD en Java.
//ARCHIVO VECTOR.JAVA
import java.io.*;
}
}
leedim ();
[Estructura de Datos]
leervector(); Page 7
mostrarvector();
Lic. Katya Perez Martinez
}
}
EJERCICIOS PROPUESTOS
15 75 23 55 85 13
1 2 3 4 5 6
a. Imprimir la cosechas mayores a 50 plantas por mes
Naranjas
Naranjas
para comer
para jugo
La salida sera :
Element Se repite
o
4 3
2 1
7 2
char CADENA1[ ]= {' r ', ' o ', ' s ', ' a ', ' \0 ' };
char CAD2[20];
cin >> CAD2;
EJERCICIOS RESUELTOS
[Estructura de Datos] Page 13
Lic. Katya Perez Martinez
1. Contar el numero de palabras que hay en una cadena, las
palabras están separadas por un espacio en blanco.
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
}
}
Diseñamos el TAD
Guia32
reemplazar(): Cadena
main()
/*
Este programa pretende reemplazar todas las ocurrencias de un caracter c
en la cadena cad por un asterisco. El resultado queda en otra cadena
No puede usar la funcion replace
*/
Diseñamos el TAD
Guia33
suprime(): Cadena
main()
}
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;
}
}
Diseñamos el TAD
Guia34
Contar()
main()
// Programa que sirve para contar cuántas 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");
}
}
Generar(): cadena
main()
Diseñamos el TAD
static String Generar (String nom, String pat, String mat, int d, int m, int a)
{
char cod;
String Codigo = new String ("");
do
{
System.out.print ("Mes de nacimiento...");
[Estructura de Datos]
mes = Lectura.Entero ();
Page 18
Lic. Katya Perez Martinez
}
while (mes > 13 || mes < 1);
do
{
System.out.print ("Anio de nacimiento Ej 97...");
anio = Lectura.Entero ();
Micodigo = Generar (Nombre, paterno, materno, dia, mes, anio);
} while (anio > 99);
System.out.print (" el codigo generado es ...." + Micodigo);
}
}
EJERCICIOS PROPUESTOS
1.8.1. Matrices
X[3][5] = 20;
static
Búsqueda
void leerMatriz ()
{
En general los arreglos bidimensionales son una generalización de los
System.out.println ("******REGISTRO DE MATRIZ ******");
unidimensionales, por lo que
System.out.print se realizará
("Ingrese un ejemplo
el numero de filascon
de algunas de
la matriz......");
f = Leer.Entero ();
estas operaciones a continuación.
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 ();
}
}
leerMatriz ();
imprimir ();
}
}
Ejemplo
Nombre Direccion
Nom Pat Mat Calle Nro Zona Edad Sexo Antig
Juan Rodrígu Salas Av. Arce 123 Centr 25 M 2
Maria ez Varga Calle 12 134 al 29 F 3
Alvarez s 5 Obraj
es
Variable_registro.campo
Ejemplo:
class empleado
{
private int ci;
private String nombre;
private float sueldo;
}
}
A continuación codificamos el programa para llamar al programa de
empleado.java (el anterior programa)
LlamaEmpleado.java
class LlamaEmpleado
{
public static void main (String arg[])
{
empleado E;
E = new empleado ();
E.leeDatos ();
E.ImprimeDatos ();
}
}
Ejemplo:
//PROGRAMA PARA LEER N EMPLEADOS EN UN VECTOR DE REGISTROS
class regemp
{
Utilizaremos el registro del empleado, que se escribió en el archivo
empleado.java,
static empleadopara
e[] =implementar ahora mediante un arreglo que
new empleado [10];
static int n;
almacena a NLeerEmpleados
static int empleados. El(empleado
programa es elint
ve[], siguiente
n) regemp.java.
{
System.out.print ("Cuantos empleados desea registrar...");
n = Lectura.Entero ();
}
}
1.10. CONJUNTOS
Ejemplo:
Se definen los conjuntos NUMEROS, MAYUSCULAS y ALUMNOS.
NUMEROS es el tipo conjunto formado por todos los números enteros
comprendidos entre el 1 y el 50 inclusive. MAYUSCULAS es el tipo
conjunto formado por las letras mayúsculas, y finalmente ALUMNOS es
el tipo conjunto formado por todos los elementos del tipo enumerado
NOMBRES.
Poco Densa indica una proporción muy alta de ceros entre los
elementos de la matríz. Es decir una matriz poco densa es aquella que
tiene gran cantidad de elementos ceros.
Ejemplo:
La matriz A de 4 filas por 4 columnas, del total de elementos que es 16,
solo 4 de ellos son diferentes de cero.
0 A= 1 1 0
0 0 1 0
0 1 0 0
0 1 0 0
Existen diversos métodos para almacenar los valores diferentes de cero
de una matríz poco densa. A continuación presentamos uno de ellos.
MatrizPocoDensa.java
public class MatrizPocoDensa
{
private int fila;
private int col;
private int valor;
if (e != 0)
{
M [k] = new MatrizPocoDensa (i, j, e);
k = k + 1;
}
}
}
M [0] = new MatrizPocoDensa (m, n, (k - 1));
return M;
}
1.12. ARCHIVOS
Ejercicios Propuestos
| ####### | | | | |
| |
| ####### | ####### | | | |
| |
| ####### | ####### | | | |
| |
| ####### | ####### | | | |
| |
| ####### | ####### | ####### | |
####### | | ####### |
+----------+-----------+-----------+-----------+-----------+-----------
+-----------+
| 10 – 19 | 20 - 29 | 30 – 39 | 40 – 49 | 50 – 59 | 60 -
69 | 70 – 79 |
REGISTROS
2. Capítulo II
Pilas
2.1. INTRODUCCIÓN
Dada una pila P = (a, b, c, ... k ), se dice que a, es el elemento más inaccesible de la pila,
está en el fondo de la pila (bottom) y que k, por el contrario, el más accesible, está en el
Tope.
Las restricciones definidas para la pila implican que si una serie de elementos A, B, C, D,
E se añaden, 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 razón, se dice que una pila es una lista LIFO
(Last Input First Output, es decir, el último que entra es el primero que sale).
MAX
PILA =
TOPE 4 1555 2434 3222 44444 … MAX
TOPE 3 TOPE
2
1
PILA
operaciones Poner(e)
Quitar()
Imprimir()
Vacia()
}
while (!aux.vacia ())
{
e = aux.quitar ();
A.poner (e);
}
publiclosstatic
b. Eliminar void
elementos main (String
negativos args[])
de una pila.
{
P.llenarPila ();
[Estructura de P.imprimir
Datos] (); Page 42
EliminaNegativos
Lic. Katya Perez Martinez (P);
P.imprimir ();
}
}
c. Realizar un procedimiento para intercalar los elementos de una pila A con
los elementos de una pila B en una pila C. Es decir:
A= 13 24 377 489 5 B = 1 23 11
2 344 433 5
TOPE TOPE
C= 89 33 77 44 4 11 3 23
1 2 3 4 5 6 7 8
//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 solución de diversos tipos de
problemas. Ahora se verán algunos de los casos más representativos de aplicación de
pilas:
Llamadas a subprogramas
Recursión
Tratamiento de expresiones aritméticas
Ordenación
2.6.1. LLAMADAS A SUBPROGRAMAS
Por ejemplo, se tiene un programa principal (PP) que llama a los subprogramas UNO y
DOS. A su vez, el subprograma DOS llama al subprograma TRES. Cada vez que la
ejecución de uno de los subprogramas concluye, se regresa el control al nivel
inmediato superior.
…
UNO
….
DOS
….
… PP …
….
… TRES
…. ….
….
…
UNO DOS ….
….
TRES
3 3 3
2 2 2
TOPE TOPE
1 PP TOPE 1 1 PP
0
5 5 5
4 4 4
3 3 3
2 DOS 2 2
TOPE 1 PP TOPE 1 PP 1 PP
TOPE 0
Finalmente podemos concluir que las pilas son necesarias en esta área
de aplicaciones por lo siguiente:
EJEMPLO
EJERCICIOS PROPUESTOS
1. Traduzca las siguietes expresiones a notación postfija utilizando el algoritmo de
evaluación.
1.1. X*(Z+W)/(T-V)
1.2. Z-W*Y+XˆK
1.3. W*(Z/(K-T))
2. Realizar un programa para hallar el mayor elemento de una pila P.
3. Realizar un procedimiento para intercambiar el último elemento de la pila por el
primer elemento.
4. Escriba un programa que elimine los elementos repetidos de una pila. Los elementos
repetidos ocupan posiciones sucesivas.
5. Escriba un subprograma que invierta los elementos de una pila.
6. Insertar n elementos después al fondo de una pila que ya tiene datos.
7. Eliminar los elementos divisores de X de la pila
8. Intercambiar cada elemento de la pila con su adyacente.
9. Eliminar el primer elemento par de la pila
10. Hallar la frecuencia de repetición de cada elemento de la pila
11. Apilar los elementos de la pila B sobre la pila A.
12. Insertar el elemento X en una pila cuyos elementos estan ordenados en forma
ascendente desde el fondo hasta el tope. La pila debe quedar ordenada
13. Escriba un programa que lea una expresión en notación infija, y la traduzca anotación
postfija.
ElElcamino
caminodel
delTigre
Tigre
Un hombre caminaba por el bosque cuando vió una zorra lisiada. "¿Cómo hará para alimentarse?", pensó.
Un hombre caminaba por el bosque cuando vió una zorra lisiada. "¿Cómo 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 había
Ensobrado.
ese momento, se ayuda
"Si Dios acercóaun
la tigre,
zorra,con un animal
también me vaentre los dientes.
a ayudar", Sació su apetito, y le dejó a la zorra lo que había
reflexionó.
sobrado. "Si Dios ayuda a la zorra, también 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ó
ya se aestaba
su casa, se encerró
quedando en ella, débil
demasiado y se quedó esperando
para salir que los
a trabajar, se Cielos le proveyeran
le apareció un ángel. de alimento. Nada pasó. Cuando
ya se estaba quedando demasiado débil para salir a trabajar, se le apareció un ángel.
- ¡Levántate, toma tus herramientas, y sigue el camino del tigre! de Paulo Coelho
- ¡Levántate, toma tus herramientas, y sigue el camino del tigre! de Paulo Coelho
3.1. INTRODUCCIÓN
Ejemplos:
3.2. CARACTERÍSTICAS
Todos los elementos de la cola son del mismo tipo.
Existe un orden de elementos ya que es una estructura lineal, pero
los elementos no están ordenados por su valor sino por orden de
introducción en la cola.
Existen dos extremos en la estructura lineal cola, el frente y el
final de la cola.
Sólo se puede acceder y eliminar al dato que está en el frente de
la cola.
Sólo se puede añadir información al final de la cola.
3.3. REPRESENTACIÓN DE LAS COLAS
Al igual que las pilas, las colas no existen como estructuras de datos
estándares en los lenguajes de programación. Las colas pueden
representarse mediante el uso de:
Arreglos
Listas Enlazadas.
Frente Final
operaciones Insertar(e)
Eliminar()
Imprimir()
Vacia()
Llena()
FRENTE()
//COLA LINEAL
Eliminar DE NUMEROS
un elemento deENTEROS
la cola:Y SUS OPERACIONES
class Cola
{
Comofinal
veraint
la MAX
eliminación
= 20; no borra nada 'físicamente', sólo se encarga
de actualizar el puntero 'frente' en una posición y devolver el valor x
private int v[] = new int [MAX];
como private
mucho,intaunque
fin; esto último no sea estrictamente necesario.
private int frente;
Aunque esa posición aun contenga datos será considerada como vacía a
efectos del()otro puntero 'fin'.
Cola
{
frente = 0;
fin = 0; COLAS LINEALES
System.out.println ("COLA CREADA....");
A continuación
} implementamos el código correspondiente al programa
boolean
de manejo devacia
colas ()
lineales en java:
{
if (frente == 0)
return (true);
else
return (false);
}
boolean llena ()
{
[Estructura de Datos] Page 52
Lic. Katya Perezif (fin == MAX)
Martinez
return (true);
else
return (false);
}
void insertar (int elem)
{
if (!llena ())
{
fin++;
v [fin] = elem;
if (frente == 0)
frente = 1;
}
else
{
System.out.println ("COLA LINEAL LLENA....");
System.exit (0);
}
}
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 () Page 53
Lic. Katya
{ Perez Martinez
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....");
e = Lectura.Entero ();
insertar (e);
}
}
}
while (A.FRENTE () != m + 1)
{
e = A.eliminar ();
if (x % e != 0)
A.insertar (e);
}
A.imprimir ();
}
EliminarDivisoresX (Q);
}
}
9
Ejemplo
8
33
1 45
[Estructura de Datos] Page 55
Lic. Katya Perez Martinez
22
85 7 Frente
Final 2 67
6
3
4 5
D E
1 2 3 4 5
Frente Final
(a)
F D E
1 2 3 4 5
Final Frente
FinalCIRCULARFinal
//COLA DE NUMEROS ENTEROS Y SUS OPERACIONES
(b)
class ColaCircular
{
Final Frente
final int MAX = 20;
El diseño de la estructura de datos de una cola circular no varia en
relación
private (a) v[]
a int
una estructura
= new intde datos lineal, por tanto a continuación
[MAX];
private int fin;
mostramos las operaciones
private int frente; que sufren cambios en este tipo de colas.
ColaCircular ()
3.7.
{ Operaciones Con Colas Circulares
frente = 0;
fin = 0; básicas con colas circulares son: insertar, eliminar y
Las operaciones
System.out.println ("COLA CREADA....");
mostrar
} una cola circular. A continuación mostramos la implementación
en Java de una Cola Circular.
boolean vacia ()
{
if (frente == 0)
return (true);
else
[Estructura de Datos]
return (false); Page 56
Lic. Katya
} Perez Martinez
boolean llena ()
{
if ((fin == MAX && frente == 1) || (fin + 1 == frente))
return (true);
else
return (false);
}
}
else
{
System.out.println ("COLA CIRCULAR LLENA....");
System.exit (1);
}
}
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] Page 57
else
Lic. Katya Perez Martinez
{
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]);
}
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....");
[Estructura ede= Datos] Lectura.Entero (); Page 58
insertar
Lic. Katya Perez Martinez (e);
}
}
}
3.8. EJERCICIOS CON COLAS CIRCULARES
while (A.FRENTE () != m + 1)
{
e = A.eliminar ();
if (e>0)
A.insertar (e);
}
A.imprimir ();
}
EliminarNegativos(Q);
}
}
3.9. COLAS DE PRIORIDADES
4. CAPÍTULO RECURSIVIDAD
– General
– Problemas cuya solución se puede hallar solucionando el mismo
problema pero con un caso de menor tamaño.
claramente se ve que:
n! = n * (n-1)!
^ ^ ^
| | |
| | Problema de tamaño (n-1)
| Calculo
Problema de tamaño n
//ITERATIVO: //RECURSIVO:
int Factorial( int n ) int Factorial ( int n )
{ int i, res=1; { if (n == 0)
for (i=1; i <= n; i++ ) return (1); return (n * Factorial
res = res * i;
(n-1) );
return ( res );
} }
Recursividad anidada:
En algunos de los arg. de la llamada recursiva hay una nueva llamada
a sí misma.
EJERCICIOS
1) Calcular x elevado a n de forma recursiva:
3^2 = 9 3^0 = 1
3*2 = 6
Hasta ahora, todos los tipos de datos que se han visto, ya sean simples o
estructurados, tienen una propiedad común: son estáticos. Esto significa
que las variables que se declaran en un programa de alguno de estos
tipos mantendrán la misma estructura durante la ejecución del mismo.
Son variables estáticas y se definen en tiempo de compilación.
Ejemplo 1:
Si se declara un Vector de 5 elementos de tipo int, éste podrá cambiar
su contenido, pero no su estructura.
Hay muchas situaciones en las que se desea cambiar el tamaño de las
estructuras usadas.
La técnica usada para manejar estas situaciones es la asignación
dinámica de memoria. Con este tipo de asignación se tendrán variables
dinámicas o referenciadas, que pueden crearse y destruirse en tiempo
de ejecución.
Ejemplo 2:
1. LISTAS
o Listas simplemente enlazadas
Solo hay un enlace por nodo
Solo se puede recorrer en una dirección
o Listas doblemente enlazadas
o Lista circular simplemente enlazada
o Lista circular doblemente enlazada
2. ÁRBOLES Y GRAFOS
23 12 4
P Info enlace
Características:
Nodo ListaLineal
Donde:
Info: es la información del nodo.
dirsgte: almacena la dirección del siguiente nodo de la lista, en
caso de ser el último nodo entonces apunta a nulo.
nodo p = null;
Inserción
q.info = elem;
q.dirsgte = null;
if (p == null)
p = q;
else
{
while (t.dirsgte != null)
t = t.dirsgte;
t.dirsgte = q;
}
}
p = Inserta_Inicio(&p,10);
La siguiente función recibe una lista y devuelve esa misma lista, sin el
nodo que ocupaba inicialmente la posición de la cabeza.
void eliminaInicio ()
{
//elimina el nodo del inicio de la lista
nodo q = p;
p = p.dirsgte;
q = null;
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] Page 77
Lic. Katya Perez
} Martinez
5.7. IPLEMENTACIÓN EN EL LENGUAJE JAVA DE LA
CLASE LISTAS LINEALES
//LISTAS LINEALES
import java.io.*;
A continuación realizamos la implementación 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 ()
{
}
}
public listaLineal ()
{
}
q.info = elem;
q.dirsgte = null;
if (p == null)
[Estructura de p =Datos]
q; Page 78
else
Lic. Katya Perez Martinez
{
while (t.dirsgte != null)
t = t.dirsgte;
t.dirsgte = q;
}}
void eliminaInicio ()
{
//elimina el nodo del inicio de la lista
nodo q = p;
p = p.dirsgte;
q = null;
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;
}
}
String dato;
int N;
double elem;
System.out.println ("Cuantos elementos desea ingresar a la
lista ?");
dato = br.readLine ();
N = Integer.parseInt (dato);
}
}
}
import java.io.*;
class ejemLista1
{
public static void main (String args[]) throws IOException
{
EJERCICIO //crear una lista lineal L vacia
listaLineal
Escribir una aplicación L para
en java = new listaLineal
llamar ();
a todas las operaciones con listas.
Algoritmo de creación
top<--NIL
repite
si top=NIL entonces
new(p)
lee(p(dato))
p(ld)<--p
p(li)<--p
top<--p
en caso contrario
new(p)
lee(p(dato))
p(ld)<--top
p(li)<--p
p(ld(li))<--p
mensaje(otro nodo?)
lee (respuesta)
hasta respuesta=no
--RECORRIDO A LA DERECHA.
p<--top
repite
escribe(p(dato))
p<--p(ld)
hasta p=top
--RECORRIDO A LA IZQUIERDA.
p<--top
repite
escribe(p(dato))
p<--p(li)
hasta p=top(li)
EJERCICIOS
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'.
Existen otros conceptos que definen las características del árbol, con
relación a su tamaño:
Procedimiento crear(q:nodo)
inicio
mensaje("Rama izquierda?")
lee(respuesta)
si respuesta = "si" entonces
new(p)
q(li) <-- nil
crear(p)
en caso contrario
q(li) <-- nil
mensaje("Rama derecha?")
lee(respuesta)
si respuesta="si" entonces
new(p)
q(ld)<--p
crear(p)
en caso contrario
q(ld) <--nil
fin
INICIO
new(p)
raiz<--p
crear(p)
FIN
A. B. DISTINTO
Se dice que dos árboles binarios son distintos cuando sus estructuras
son diferentes. Ejemplo:
A. B. SIMILARES
Dos arboles binarios son similares cuando sus estructuras son idénticas,
pero la información que contienen sus nodos es diferente. Ejemplo:
A. B. EQUIVALENTES
Son aquellos arboles que son similares y que además los nodos
contienen la misma información. 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
2. PREORDEN
o Examinar la raíz.
o Recorrer el subarbol izquierdo en preorden.
o recorrer el subarbol derecho en preorden.
3. POSTORDEN
o Recorrer el subarbol izquierdo en postorden.
o Recorrer el subarbol derecho en postorden.
o Examinar la raíz.
A continuación se muestra un ejemplo de los diferentes recorridos en un
árbol binario.
Inorden: GDBHEIACJKF
Preorden: ABDGEHICFJK
Postorden: GDHIEBKJFCA
CAMINO.Es una secuencia de vértices V1, V2, V3, ... , Vn, tal que
cada uno de estos V1->V2, V2->V3, V1->V3.
LONGITUD DE CAMINO. Es el número de arcos en ese camino.
CAMINO SIMPLE. Es cuando todos sus vértices, excepto tal vez el
primero y el último son distintos.
CICLO SIMPLE. Es un camino simple de longitud por lo menos de
uno que empieza y termina en el mismo vértice.
6.13. REPRESENTACIÓN EN MEMORIA ENLAZADA
Creación.
Inserción.
Búsqueda.
Eliminación.
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 vértices adyacentes p(dato) ?)
lee(respuesta)
si respueta=si entonces
repite
new(q)
lee(q(dato))
q(ld)<--p(ld)
p(ld)<--q
mensaje(otro vértice ?)
lee(respuesta2)
hasta respuesta2=no
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 vértices adyacentes?)
lee(respuesta)
si respuesta=si entonces
mensaje(Cuantos vértices?)
lee(número_vértices)
desde i=1 hasta número_vértices haz
new(p)
lee(p(dato))
q(ld)<--p
q<--q(ld)
en caso contrario
mensaje(no existe lista)
ALGORITMO DE BUSQUEDA
mensaje(vértice a buscar)
lee(vértice_a_buscar)
p<--top
repite
si p(dato)=vértice_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(vértice a borrar ?)
lee(vértice_a_borrar)
p&Lt--top
r<--p
q<--p
sw<--falso
repite
si p(dato)=vértice_a_borrar entonces
si p=top entonces
top<--top(la)
r<--top
sw<--verdadero
en caso contrario
r(la)<--p(la)
repite
1. Estructuras de Datos
http://cuhwww.upr.clu.edu/~jse/cursos/4097/notas/
http://www.csse.monash.edu.au/~lloyd/tildeAlgDS/index.html
4. Estructuras arbóreas
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.
http://decsai.ugr.es/~jfv/ed1/c++/cdrom5/index.htm