Está en la página 1de 107

333333

NDICE GENERAL
CONCEPTOS GENERALES .............................................. 2
SISTEMA DE PROCESAMIENTO DE DATOS. ............................. 2
REPRESENTACIN FSICA DE LOS DATOS. ............................ 3
DEFINICIN DE ESTRUCTURA DE DATOS: ............................. 4
CLASIFICACIN DE ESTRUCTURAS DE DATOS: ......................... 4
OPERACIONES SOBRE LOS DATOS ESTRUCTURADOS. ..................... 7
RECURSIVIDAD ..................................................... 8
REGLA DE RECURSIVIDAD EN LA RESOLUCIN DE PROBLEMAS. ........... 9
TIPOS DE RECURSIVIDAD. ........................................ 10
ESTRUCTURA: PILA ................................................ 13
IMPLEMENTACIN DE LA ESTRUCTURA PILA EN JAVA. ................. 15
ESTRUCTURA: COLA SIMPLE ......................................... 20
IMPLEMENTACIN DE LA ESTRUCTURA COLA SIMPLE EN JAVA. .......... 21
LECTURA COMPLEMENTARIA: ....................................... 27
COLAS DE PRIORIDAD ............................................ 27
ESTRUCTURA: COLA CIRCULAR ....................................... 28
IMPLEMENTACIN DE LA ESTRUCTURA COLA CIRCULAR EN JAVA. ........ 30
ESTRUCTURA: BI COLA ............................................. 38
IMPLEMENTACIN DE LA ESTRUCTURA BI-COLA EN JAVA. .............. 39
VARIANTES DE LAS BI-COLAS ..................................... 48
ESTRUCTURA: LISTA SIMPLE ........................................ 51
IMPLEMENTACIN DE LA ESTRUCTURA LISTA SIMPLE EN JAVA. ......... 52
ESTRUCTURA: LISTA CIRCULAR ...................................... 64
IMPLEMENTACIN DE LISTA CIRCULAR EN JAVA, ..................... 65
ESTRUCTURA: LISTA DOBLEMENTE ENLAZADA ........................... 76
IMPLEMENTACIN DE LA CLASE LISTA DOBLE EN JAVA, ............... 77
ESTRUCTURA: RBOLES. ............................................ 91
ARBOLES BINARIOS DE BSQUEDA (ABB) ............................ 95
IMPLEMENTACIN DE UN RBOL BINARIO DE BSQUEDA EN JAVA. ....... 96
ESTRUCTURA DE DATOS

CONCEPTOS GENERALES

DEFINICIN DE COMPUTADOR.

Computadora, computador u ordenador,


es una mquina electrnica, capaz de
reconocer datos de entrada,
procesarlos y producir informacin
destacado; todo esto bajo el control
de un programa de instrucciones, que
es almacenado previamente.

SISTEMA DE PROCESAMIENTO DE DATOS.

El propsito de toda computadora es el procesamiento de


datos, estos datos pueden ser: las cifras de ventas de un
supermercado, las calificaciones de un curso, lista de
clientes, lista de proveedores, registros de los empleados.

2 Ing. Pascual Yana Chejo


ESTRUCTURA DE DATOS

DEFINICIN DE DATO,

El dato es una representacin simblica (numrica,


alfabtica, algortmica, etc.) de un atributo o variable
cuantitativa. Los datos describen hechos empricos, sucesos y
entidades.

La ejecucin de programas de instrucciones, son reflejados en


los cambios de valor que sufren los datos de entrada, dando
lugar a los datos de salida (informacin).

En la resolucin de problemas con computadora. El diseo de


la estructura de datos es tan importante, como el diseo del
algoritmo, o el desarrollo e implementacin del programa.

REPRESENTACIN FSICA DE LOS DATOS.

a. DEFINICIN DE BIT:

Es la unidad de informacin ms sencilla posible en el


sistema binario. Significa dgito binario, o lo que es lo
mismo, nmero (dgito) con dos posibles valores: 0 1.

b. DEFINICIN DE BYTE:

Unidad de informacin que consta de 8 bits equivalente a


un nico caracter, como una letra, nmero o signo
especial.

3 Ing. Pascual Yana Chejo


ESTRUCTURA DE DATOS

c. DEFINICIN DE CARACTER:

Es un elemento tomado de un conjunto de smbolos. En el


cual se incluyen dgitos, los caracteres del alfabeto y
algunos caracteres especiales.

{0,1,2,3,4,5,6,7,8,9,A,B,C....Y,z,,-,+,*}

d. DEFINICIN DE PALABRA:

Conjunto de bits que, como unidad elemental, puede


manipular una computadora. La longitud en bits de una
palabra en una computadora puede ser de 8, 16, 32, etc., y
depende del microprocesador de su unidad central de
proceso.

DEFINICIN DE ESTRUCTURA DE DATOS:

En programacin, una estructura de datos es una forma de


organizar un conjunto de datos simples con el objetivo de
facilitar su manipulacin. Un dato elemental es la mnima
informacin que se tiene en un sistema.

Una estructura de datos define la organizacin y la


interrelacin que existe entre stos datos. Adems de un
conjunto de operaciones que permite manipularlos.

CLASIFICACIN DE ESTRUCTURAS DE DATOS:


En un programa, cada variable pertenece a alguna estructura
de datos explcita o implcitamente definida, la cual
determina el conjunto de operaciones vlidas para ella.

4 Ing. Pascual Yana Chejo


ESTRUCTURA DE DATOS

DATOS SIMPLES (PRIMITIVOS). Son aquellos que no estn


compuestos por otras estructuras:

a. Enteros, Una estructura de datos primitiva. Miembro del


siguiente conjunto de nmeros: {...,-(n+1), -n,...-2,-
1,0,1,2...n,n+1,...}

Las operaciones fundamentales sobre enteros son: suma,


resta, multiplicacin, divisin, exponenciacin y otras.

5 Ing. Pascual Yana Chejo


ESTRUCTURA DE DATOS
b. Reales, Los nmeros reales siempre tienen un punto
decimal y pueden ser positivos o negativos. Un nmero
real consta de un entero y una parte decimal, por
ejemplo, 0.08,3789.25,-8.12,3.0

Las operaciones fundamentales sobre enteros son: suma,


resta, multiplicacin, divisin, exponenciacin y otras

c. Booleanos, llamado tambin lgico. Es un elemento que


puede tener uno de dos valores: verdadero o falso (1 o
0).

Los tres operadores booleanos bsicos son not, and, y or


(negacin, conjuncin, y disyuncin)

d. Caracter, Un dato tipo carcter contiene slo un


carcter. se reconoce los siguientes caracteres
alfabticos y numricos:

- Caracteres Alfabticos (A,B,C...X,Y,Z) (a,b,c,.....z)

- Caracteres Numricos (1,2,3......,9,0)

- Caracteres especiales (+,-,*,/,`,<,>,,$,&....)

DATOS ESTRUCTURADOS. Los datos simples se pueden combinar de


varias maneras para formar estructuras ms complejas como:

a. ESTRUCTURA DE DATOS ESTTICOS.

Son aquellos que tienen una cantidad fija de memoria, la


cual es asignado en el momento de su creacin y no puede
cambiar durante la ejecucin del programa.

Ejemplo.

String, Arrays, Registros y Archivos

6 Ing. Pascual Yana Chejo


ESTRUCTURA DE DATOS
b. ESTRUCTURA DE DATOS DINMICOS.

Son aquellos que no tienen una cantidad fija de memoria.


La cantidad de memoria va incrementando o disminuyendo
durante la ejecucin del programa.

Entre las principales tenemos

- Lineales: Pilas, Colas (simples, circulares, dobles) y


Listas (simples, circulares, dobles)

- No Lineales: rboles (general, binario, binario de


bsqueda) y Grafos.

OPERACIONES SOBRE LOS DATOS ESTRUCTURADOS.


Las operaciones bsicas son:

a. Inserciones, adicionar un nuevo valor a la


estructura.

b. Eliminaciones, borrar un valor de la estructura.

c. Bsquedas, encontrar un determinado valor en la


estructura para realizar una operacin con este
valor, en forma secuencial(o binario, siempre y
cuando los datos estn ordenados).

d. Recorridos, visitar cada uno de los elementos de la


estructura.

CONCLUSIN.

Cada estructura ofrece ventajas y desventajas en relacin a


la sencillez y eficiencia para la realizacin de cada
operacin. De esta forma, la eleccin de la estructura de
datos apropiada para cada problema; depende de factores como
la frecuencia y el orden en que se realiza cada operacin
sobre los datos.

7 Ing. Pascual Yana Chejo


ESTRUCTURA DE DATOS

RECURSIVIDAD
DEFINICIN DE FUNCIONES.

Las funciones, son SUBPROGRAMAS (conjunto de


instrucciones), que realizan una tarea concreta y
retorna un nico valor.

CARACTERSTICAS DE LAS FUNCIONES.

a) Poseen un nombre (identificador),

b) Posee variables para recibir datos (parmetros de


entrada),

c) Una funcin es invocado por el programa principal u


otras funciones,

d) El resultado se almacena en el nombre de la funcin,

e) Para retornar un valor se usa la palabra return.

8 Ing. Pascual Yana Chejo


ESTRUCTURA DE DATOS
RECURSIVIDAD.

La recursividad no es una
estructura de datos, sino, una
tcnica de programacin que
permite que un bloque de
instrucciones sea ejecutada un
cierto nmero de veces. Y
constituye una alternativa al uso
de los bucles while, do while y
for.

DEFINICIN DE RECURSIVIDAD.

La recursividad a un proceso mediante el que una funcin se


llama a s misma de forma repetida, hasta que se satisface
una condicin establecida.

REGLA DE RECURSIVIDAD EN LA RESOLUCIN DE PROBLEMAS.

Para poder implementar la solucin de un problema de forma


recursiva, es necesario que se cumplan las siguientes
condiciones:

a) El problema debe poder definirse en trminos de s mismo.

b) El problema debe incluir una condicin de finalizacin


(criterio base).

c) Cuando la condicin de finalizacin, sea verdadera, la


funcin no debe volver a llamarse a s misma.

d) El problema debe poder resolverse en un conjunto finito


de pasos.

9 Ing. Pascual Yana Chejo


ESTRUCTURA DE DATOS
TIPOS DE RECURSIVIDAD.
Dependiendo del nmero de funciones a utilizarse podemos
diferenciar:

1. RECURSIVIDAD DIRECTA.
a. RECURSIN SIMPLE. En la recursin simple cada llamada
recursiva genera, como mucho, otra llamada recursiva.

Ejemplo 1.

Implementar una funcin recursiva en java, que calcule


la factorial de un nmero n.

int factorial(int n)
{
if(n==0) return 1;
else return n*factorial(n-1);
}

Ejemplo 2.

Implementar una funcin recursiva en java, que permita


hacer la divisin por restas sucesivas.

int division(int a, int b)


{
if(b > a) return 0;
else
return division(a-b, b) + 1;
}

10 Ing. Pascual Yana Chejo


ESTRUCTURA DE DATOS
b. RECURSIN MLTIPLE. Alguna llamada recursiva puede
generar ms de una llamada a la funcin.

Ejemplo 3.

Implementar una funcin recursiva en java, que calcule


un nmero de la serie Fibonacci.

int fibonacci(int n){

if(n==1 || n==2) return 1;

else return fibonaci(n-1)+fibonaci(n-2);

2. RECURSIVIDAD INDIRECTA.

c. RECURSIN MUTUA. Implica ms de una funcin, que se


llaman mutuamente.

Ejemplo 4.

Implementar una funcin recursiva en java, que determine


si un nmero es impar.

public boolean par(int n){


if(n==0) return true;
else return impar(n-1);
}

public boolean impar(int n){


if(n==0) return false;
else return par(n-1);
}

11 Ing. Pascual Yana Chejo


ESTRUCTURA DE DATOS
Ejemplo 5.

Implementar una funcin recursiva en java, que determine


si un nmero es positivo.

public boolean positivo(int n){


if(n>0) return true;
else return negativo(n);
}

public boolean negativo(int n){


if(n<0) return false;
else return positivo(n);
}

IMPORTANTE: Para ejecutar cada una de las funciones se debe


crear la clase principal que contendr el mtodo main().

public class Principal {

public static void main(String[] args) {

int f = fibonacci(5); // llama a la funcin.

System.out.println("x: " + f); // imprime f

12 Ing. Pascual Yana Chejo


ESTRUCTURA DE DATOS

ESTRUCTURA: PILA

DEFINICIN.

Una pila (stack) es una estructura de datos lineal y


esttico, en la que el modo de almacenar y recuperar los
datos es de tipo LIFO (Last In First Out, ltimo en entrar,
primero en salir).

CARACTERSTICAS.

- Para el manejo de los datos se cuenta con dos


operaciones bsicas: PUSH() y POP.

o PUSH(), que coloca un dato en la pila,

o POP(), que retira el ltimo dato apilado.

- En cada momento slo se tiene acceso a la parte superior


de la pila denominada TOP.
- Tanto para la bsqueda como para el recorrido, se hace
uso de una pila auxiliar.

13 Ing. Pascual Yana Chejo


ESTRUCTURA DE DATOS

REPRESENTACIN GRAFICA DE UNA PILA.

La estructura de PILA puede ser representada mediante:


- Vectores,
- Listas Enlazadas.
En el presente apartado, se lo har por medio de vectores o
arrays.

ELEMENTOS DE UNA PILA.

La implementacin de esta estructura de datos se realizar


con el uso de vectores, en ese entendido, citamos los
elementos.

maxPila: Variable que contiene la capacidad de almacenar


datos en la pila.

PILA[]: Vector que apila los datos en la pila.

TOP: Puntero que apunta al ltimo dato de la pila.

14 Ing. Pascual Yana Chejo


ESTRUCTURA DE DATOS

IMPLEMENTACIN DE LA ESTRUCTURA PILA EN JAVA.

Solo con fines didcticos la implementacin se realiza a


travs de dos clases: Principal y Pila.

I. CLASE PRINCIPAL EN JAVA.

Permite crear una pila X y hacer uso de las operaciones


definidas sobre ella.

public class Principal {

public static void main(String[] args) {


Pila p1=new Pila(); // crea el objeto pila.

// Agrega cdigo necesario para resolucin de


// problemas con pilas
// Ejemplo: System.out.println("el top: " +p1.top);
}
}

II.CLASE PILA EN JAVA.

Define los atributos y los mtodos propios de la pila.

public class Pila {


// agregue aqu los atributos y mtodos que
// conformara la estructura de datos PILA
}

VARIABLES DE LA CLASE PILA [ATRIBUTOS].

final int maxPila = 100; // define el tamao de la pila


int[] PILA; // define un vector que
almacenara los datos
int top; // define el puntero de la pila

15 Ing. Pascual Yana Chejo


ESTRUCTURA DE DATOS
DEFINICIN DE OPERACIONES SOBRE PILAS [MTODOS].

Las operaciones que se definen sobre una pila, se detallan a


continuacin:

1. OPERACIONES DE ESTADO.
Mtodos, que permiten conocer el estado actual de la pila
como ser: valor del elemento TOP, nmero de elementos,
etc.

a. CREAR E INICIALIZAR PILA [CONSTRUCTOR], crear la pila e


inicializa el puntero TOP en -1.

public Pila() {
PILA = new int[maxPila];
top = -1;
}

b. PILA VACA, Devuelve verdadero si no existe ningn


elemento en la pila.

public boolean pilaVacia() {


return top == -1;
}

c. TAMAO DE PILA. Devuelve el nmero de elementos que


posee la pila.

public int tamaoPila() {


return top + 1;
}

16 Ing. Pascual Yana Chejo


ESTRUCTURA DE DATOS
d. PILA LLENA. Devuelve verdadero si la pila est llena.

public boolean pilaLlena() {


return top == maxPila - 1;
}

e. MOSTRAR ELEMENTO TOP. Devuelve el elemento que se


encuentra en la ltima posicin.

public int Tope() {


return PILA[top];
}

2. OPERACIONES FUNDAMENTALES.
Son mtodos, que permiten gestionar los datos almacenados
en la pila:

a. INSERTAR UN ELEMENTO. Inserta un dato por el TOP en la


pila.

public void push(int elemento) {


if (pilaLlena()) {
System.out.println("Pila Llena! No se pudo
adicionar.");
} else {
top++;
PILA[top] = elemento;
}
}

17 Ing. Pascual Yana Chejo


ESTRUCTURA DE DATOS
b. ELIMINAR UN ELEMENTO. Elimina un dato por TOP en la
pila.

public int pop() {


int elemento = 0;
if (pilaVacia()) {
System.out.println("Pila Vacia! No se pudo
eliminar.");
} else {
elemento = PILA[top];
top--;
}
return elemento;
}

3. OPERACIONES ADICIONALES.

Mtodos que permiten complementar a las operaciones


rutinarias como ser: insertar N datos en la pila, imprimir
los datos de la pila, etc.

a. RECORRER PILA. Muestra todos los elementos de la pila de


IZQUIERDA A DERECHA

public void imprimirPila() {


Pila PAux = new Pila();
int a;
if (pilaVacia())
System.out.println("Pila Vaca! No se puede
mostrar nada.");
else {
while (!pilaVacia()) {

18 Ing. Pascual Yana Chejo


ESTRUCTURA DE DATOS
a = pop();
System.out.println(" " + a);
PAux.push(a);
}
}
// retorna los datos a la pila origen
while (!PAux.pilaVacia()) {
push(PAux.pop());
}
}

b. BSQUEDA DE ELEMENTOS. Devuelve la posicin que ocupa el


elemento en la pila. en caso de no encontrarse devuelve
el valor -1.

c. INSERTAR N ELEMENTOS EN LA PILA. Inserta N datos por el


TOP, en la pila.

public void pushNelementos() {


Scanner t = new Scanner(System.in);
System.out.print("Nro. de elementos a agregar a la
PILA: ");
int n = t.nextInt();
System.out.println("ingrese los elementos:");
for (int i = 0; i < n; i++) {
System.out.print("Pila[" + (i + 1) + "]: ");
int x = t.nextInt();
this.push(x);
}
}

19 Ing. Pascual Yana Chejo


ESTRUCTURA DE DATOS

ESTRUCTURA: COLA SIMPLE

El nombre proviene de la
analoga con una
ventanilla de atencin a
personas, en que el
primero que llega es el
primero en ser atendido,
y todos aquellos que van
llegando, se van situando
a continuacin uno del
otro a la espera de que
les llegue el turno.

DEFINICIN.

Una cola es una estructura de datos lineal y esttico, con


procedimientos de acceso a datos FIFO (First In, First Out).
El primero que entra es el primero que sale, lo que significa
que el primer dato que llegue a la cola es el primero en ser
tratado.

REPRESENTACIN GRAFICA DE UNA COLA.

20 Ing. Pascual Yana Chejo


ESTRUCTURA DE DATOS
ELEMENTOS DE UNA COLA.

maxCola: Variable que contiene la capacidad mxima de


datos que puede albergar la cola.

COLA[]: Vector que almacena los datos de la cola.

F: Frente, puntero que apunta al primer dato de la cola.

R: Final, puntero que apunta al ltimo dato de la cola.

IMPLEMENTACIN DE LA ESTRUCTURA COLA SIMPLE EN JAVA.

Solo con fines didcticos la implementacin se realiza a


travs de dos clases: Principal y Cola.

I. CLASE PRINCIPAL EN JAVA.


Permite crear una cola simple C1 y verificar el
funcionamiento de las operaciones definidas sobre ella.

public class Principal {

public static void main(String[] args) {

Cola C1=new Cola(); // crea el objeto cola.

// Agrega cdigo necesario para resolucin de


// problemas con colas

II.CLASE COLA EN JAVA.

Define los atributos y los mtodos propios de una cola


simple.

21 Ing. Pascual Yana Chejo


ESTRUCTURA DE DATOS

public class Cola {


// Agregue aqu los atributos y mtodos que
// conformar la estructura de datos COLA SIMPLE
}

ATRIBUTOS DE LA COLA.
Se define los elementos de la cola, como son las variables:

public class Cola {

final int maxCola = 100; // define el tamao de la cola


int[] COLA; // define un vector que almacenara
los datos
int F; // define los punteros frente
int R; // y final de la cola

//Agregue aqu los mtodos (operaciones) que se desarrollen


// en clases.

OPERACIONES DEFINIDOS SOBRE COLAS.

Las operaciones que se definen sobre una cola simple son:

1. OPERACIONES DE ESTADO.

a. CREAR E INICIALIZA COLA [CONSTRUCTOR].

public cola() {
COLA = new int[maxCola];
F = -1;
R = -1;
}

22 Ing. Pascual Yana Chejo


ESTRUCTURA DE DATOS
b. COLA VACA, Devuelve verdadero si no existe ningn
elemento en la cola.

public boolean ColaVacia() {


return ((F == -1) && (R == -1));
}

c. TAMAO DE COLA. Devuelve el nmero de elementos que


posee la cola.

public int TamaoCola() {


if (colaVacia())
return R - F;
return (R - F) + 1;
}

d. COLA LLENA. Devuelve verdadero si la cola est llena.

public boolean ColaLlena() {


return (R+1) == maxCola;
}

23 Ing. Pascual Yana Chejo


ESTRUCTURA DE DATOS
2. OPERACIONES ELEMENTALES

a. INSERTAR UN ELEMENTO. Inserta un elemento por el FINAL


[R] en la cola.

public void insertar(int x) {


if (colaLlena()) {
System.out.println("Cola Llena! No se pudo
adicionar.");
} else {
if ((F == -1) && (R == -1)) {
R++;
COLA[R] = x;
F = 0;
} else {
R++;
COLA[R] = x;
}
}
}

b. ELIMINAR UN ELEMENTO. Elimina un elemento por FRENTE [F]


en la cola.

public int eliminar() {


int x = -1;
if (colaVacia()) {
System.out.println("Cola Vacia! No se pudo
eliminar.");
} else {
if (R == F) {
x = COLA[F];
F = -1;
R = -1;
} else {
x = COLA[F];
F = F + 1;
}
}
return x;
}

24 Ing. Pascual Yana Chejo


ESTRUCTURA DE DATOS
3. OPERACIONES COMPLEMENTARIAS

a. RECORRER COLA. Muestra elementos de la cola de IZQUIERDA


A DERECHA

public void Recorrer() {


if (colaVacia()) {
System.out.println("Cola Vacia! No se puede
mostrar nada.");
} else {
cola aux = new cola();
System.out.print("COLA: ");
while (!colaVacia()) {
int x = eliminar();
System.out.print(x + " ");
aux.insertar(x);
}
while (!aux.colaVacia()) {
insertar(aux.eliminar());
}
}
}

b. BSQUEDA DE ELEMENTOS.

Devuelve la posicin de un elemento dentro de la cola. En


caso de no encontrarse, devuelve el valor -1.

public void Buscar() {


// queda como tarea para el estudiante
}

25 Ing. Pascual Yana Chejo


ESTRUCTURA DE DATOS
c. INSERTAR N ELEMENTOS EN LA COLA. Inserta N elementos por
el FINAL en la cola.

public void InsertarNElementos() {


Scanner in = new Scanner(System.in);
System.out.print("Nro.Elementos: ");
int n = in.nextInt();
System.out.println("Ingrese elementos:");
for (int i = 0; i < n; i++) {
int x = in.nextInt();
insertar(x);
}
}

TAREA Nro.2.

En la clase cola simple:

a. Desarrolle un mtodo que permita mostrar el primer


elemento de la cola.
b. Desarrolle un mtodo que permita mostrar el ltimo
elemento de la cola.
c. Desarrolle un mtodo que permita buscar un valor en la
cola y devuelva la posicin que ste ocupa en la cola.
d. Desarrolle un mtodo que permita eliminar N primeros
elementos de la cola.
e. Desarrolle un mtodo que permita cargar con N elementos
aleatorios a la cola.

26 Ing. Pascual Yana Chejo


ESTRUCTURA DE DATOS

LECTURA COMPLEMENTARIA:
COLAS DE PRIORIDAD
Una cola de prioridades es una estructura de datos en la que
los elementos se atienden en el orden indicado por una
prioridad asociada a cada uno. Si varios elementos tienen la
misma prioridad, se atendern de modo convencional segn la
posicin que ocupen.

Este tipo especial de colas tienen las mismas operaciones que


las colas, pero con la condicin de que los elementos se
atienden en orden de prioridad.

Entendiendo la prioridad como un valor numrico y asignando a


altas prioridades valores pequeos.

Formas de implementacin:

- Aadir un campo a cada nodo con su prioridad. Resulta


conveniente mantener la cola ordenada por orden de
prioridad.
- Crear tantas colas como prioridades haya, y almacenar cada
elemento en su cola.

Tipos de colas de prioridad

- Colas de prioridades con ordenamiento ascendente: en ellas


los elementos se insertan de forma arbitraria, pero a la
hora de extraerlos, se extrae el elemento de menor
prioridad.
- Colas de prioridades con ordenamiento descendente: son
iguales que las colas de prioridad con ordenamiento
ascendente, pero al extraer el elemento se extrae el de
mayor prioridad.

27 Ing. Pascual Yana Chejo


ESTRUCTURA DE DATOS

ESTRUCTURA: COLA CIRCULAR

Las eliminaciones que se realizan en una cola simple generan


espacios que no pueden ser reutilizados. La solucin que se
describe implica la reutilizacin de esos espacios, a travs
del mecanismo llamado COLA CIRCULAR.

DEFINICIN.

Una cola circular es una estructura de datos lineal y


esttica, que permite insertar datos en los espacios
generados por el mtodo eliminar() de la clase cola, una vez
que se haya alcanzado la capacidad mxima(maxColac).

CARACTERSTICAS UNA COLA CIRCULAR.

Una cola circular es una estructura de datos en la que los


datos estarn organizados lgicamente de forma circular.

28 Ing. Pascual Yana Chejo


ESTRUCTURA DE DATOS
- Las eliminaciones, como una cola simple se los realiza
por FC (frente).
- Las inserciones, se los realiza por el RD (final). Si se
hubiera llegado a maxColac, se inserta en los espacios
generados por el mtodo eliminar().
- Para las bsquedas y recorridos en las colas circulares,
se hace uso de una cola auxiliar.

REPRESENTACIN GRFICA DE UNA COLA CIRCULAR.

En el presente apartado se representara a las colas


circulares mediante vectores o arrays unidimensionales.

a)

b)

29 Ing. Pascual Yana Chejo


ESTRUCTURA DE DATOS
ELEMENTOS DE UNA COLA CIRCULAR.

maxColac: Variable que contiene la capacidad de la cola.

COLAC[]: Vector que almacena los datos de la cola.

FC: puntero que apunta al primer dato de la cola.

RC: puntero que apunta al ltimo dato de la cola.

IMPLEMENTACIN DE LA ESTRUCTURA COLA CIRCULAR EN JAVA.


Con fines didcticos la implementacin de la cola circular se
realiza a travs de dos clases: principal y colaCircular.

I. CLASE PRINCIPAL EN JAVA.


Crea una cola simple C1 y confirma el funcionamiento de las
operaciones definidas sobre ella.

public class Principal {

public static void main(String[] args) {

ColaCircular CC1=new ColaCircular();

// crea el objeto cola.

// Agrega cdigo necesario para resolucin de


// problemas con colas

II.CLASE COLA CIRCULAR EN JAVA.

Define los atributos y los mtodos propios de una cola


circular.

30 Ing. Pascual Yana Chejo


ESTRUCTURA DE DATOS
public class ColaCircular {
// Agregue aqu los atributos y mtodos que
// conformar la estructura de datos COLA SIMPLE
}

ATRIBUTOS DE LA ESTRUCTURA COLA CIRCULAR.


Se define los elementos de la cola, como son las variables:

public class ColaCircular {

final int MaxColac = 100; // define el tamao de la cola


int[] COLAC; // define un vector que almacenara
los datos
int FC; // define los punteros frente
int RC; // y final de la cola

//Agregue aqu los mtodos (operaciones) que se desarrollen


// en clases.

OPERACIONES DEFINIDOS SOBRE COLAS.

Las operaciones que se definen sobre una cola simple son:

1. OPERACIONES DE ESTADO.

a. CREAR E INICIALIZAR COLA CIRCULAR [CONSTRUCTOR].

public ColaCircular() {
COLAC = new int[MaxColac];
FC = -1;
RC = -1;
}

31 Ing. Pascual Yana Chejo


ESTRUCTURA DE DATOS
b. COLA CIRCULAR VACA, Devuelve verdadero si no existe
ningn elemento en la cola.

public boolean ColaVacia() {


return ((FC == -1) && (RC == -1));
}

c. TAMAO DE COLA CIRCULAR. Devuelve el nmero de elementos


que posee la cola.

public int Tamao() {


if (ColaVacia())
return (RC - FC + MaxColac) % MaxColac;
return ((RC - FC + MaxColac) % MaxColac) + 1;
}

d. COLA CIRCULAR LLENA. Devuelve verdadero si la cola est


llena.

public boolean ColaLlena() {


return Tamao() == MaxColac;
}

32 Ing. Pascual Yana Chejo


ESTRUCTURA DE DATOS
2. OPERACIONES FUNDAMENTALES

a. INSERTAR UN ELEMENTO EN LA COLA CIRCULAR. Inserta un


elemento por el FINAL [RC] en la cola.

public void Insertar(int x) {


if (ColaLlena()) {
System.out.println("Cola Llena! No se pudo
adicionar.");
} else {
if ((FC == -1) && (RC == -1)) {
RC = RC + 1;
COLAC[RC] = x;
FC = 0;
} else {
if (RC == (MaxColac - 1)) {
RC = 0;
COLAC[RC] = x;
} else {
RC = RC + 1;
COLAC[RC] = x;
}
}
}
}

33 Ing. Pascual Yana Chejo


ESTRUCTURA DE DATOS

b. ELIMINAR UN ELEMENTO DE LA COLA CIRCULAR. Elimina un


elemento por FRENTE [FC] en la cola.

public int Eliminar() {


int x = -1;
if (ColaVacia()) {
System.out.println("Cola Vacia! No se pudo
eliminar.");
} else {
if (RC == FC) {
x = COLAC[FC];
FC = -1;
RC = -1;
} else {
if (FC == (MaxColac - 1)) {
x = COLAC[FC];
FC = 0;
} else {
x = COLAC[FC];
FC = FC + 1;
}
}
}
return x;
}

34 Ing. Pascual Yana Chejo


ESTRUCTURA DE DATOS

c. RECORRER COLA CIRCULAR. Muestra todos los elementos de


la cola circular (de IZQUIERDA A DERECHA)

public void Recorrer() {


if (ColaVacia()) {
System.out.println("Cola Vacia! No se puede
mostrar nada.");
} else {
ColaCircular CCaux = new ColaCircular();
System.out.print("COLAC: ");
while (!ColaVacia()) {
int x = Eliminar();
System.out.print(x + " ");
CCaux.Insertar(x);
}
while (!CCaux.ColaVacia()) {
Insertar(CCaux.Eliminar());
}
}
}

d. BSQUEDA DE UN ELEMENTO. Muestra la ubicacin (ndice)


de un elemento dentro de la cola circular. Si se
encuentra, caso contrario despliega un mensaje de Error.

35 Ing. Pascual Yana Chejo


ESTRUCTURA DE DATOS

public void Buscar() {


int pos=-1;
int c=0;
Scanner in = new Scanner(System.in);
System.out.println("Ingrese el valor a Buscar:);
int eb= in.nextInt();
if (ColaVacia()) {
System.out.println("Cola Vacia! No se puede
realizar Bsqueda de ningn elemento.");
} else {
ColaCircular CCaux = new ColaCircular();
while (!ColaVacia()) {
pos = FC;
int x = Eliminar();
if (x == eb) { c=c+1;
System.out.println("posicin: " + pos);
CCaux.Insertar(x);}
else{ CCaux.Insertar(x);}
}
while (!CCaux.colaVacia()) {
Insertar(CCaux.Eliminar());
}
}
if (c == 0)) { System.out.println("No!, no existe
el elemento en la Cola Circular.");

} else { System.out.println(" Se encontr: "+ c +


"elementos en la cola circular");
}
}

36 Ing. Pascual Yana Chejo


ESTRUCTURA DE DATOS
3. OPERACIONES COMPLEMENTARIAS

a. INSERTAR N ELEMENTOS EN LA COLA CIRCULAR. Inserta N


elementos por el FINAL en la cola.

public void InsertaN() {


Scanner in = new Scanner(System.in);
System.out.print("Nro.Elementos: ");
int n = in.nextInt();
System.out.println("Ingrese elementos:");
for (int i = 0; i < n; i++) {
int x = in.nextInt();
Insertar(x);
}
}

EJERCICIOS.

a. Desarrollar un mtodo que permita mostrar el primer


elemento de la cola.
b. Desarrollar un mtodo que permita mostrar el ltimo
elemento de la cola.
c. Desarrollar un mtodo que permita eliminar N primeros
elementos de la cola.
d. Desarrollar un mtodo que permita cargar con N elementos
aleatorios a la cola.

37 Ing. Pascual Yana Chejo


ESTRUCTURA DE DATOS

ESTRUCTURA: BI COLA

DEFINICIN. Una BI-COLA es una estructura de datos lineal y


esttica, que permite insertar y eliminar datos por ambos
extremos.

Es un mecanismo que integra en una nica estructura las


funcionalidades de las pilas y las colas.

CARACTERSTICAS DE UNA BI-COLA.

- Las eliminaciones, se los realiza por el frente, es


decir por FI(izquierda) o FD (derecha).
- Las inserciones, se los realiza por el final ya sea ste
RI(izquierda) o RD(derecha).
- Para las bsquedas y recorridos en las Bi-colas, se hace
uso de una cola auxiliar.

38 Ing. Pascual Yana Chejo


ESTRUCTURA DE DATOS

REPRESENTACIN GRFICA DE UNA COLA CIRCULAR.

Se representara una bi-cola, por medio de vectores a las que


se las conoce tambin como arrays unidimensionales.

ELEMENTOS DE UNA BI-COLA.

MaxBiCola: Variable que contiene la capacidad de la bi-


cola.

BICOLA[]: Vector que almacena los datos de la bi-cola

FI: puntero que apunta al primer dato por lado izquierdo


de la bi-cola.

RI: puntero que apunta al ltimo dato por lado izquierdo


de la bi-cola.

FD: puntero que apunta al primer dato por lado derecho


de la bi-cola.

RD: puntero que apunta al ltimo dato por lado derecho


de la bi-cola.

IMPLEMENTACIN DE LA ESTRUCTURA BI-COLA EN JAVA.

Con fines didcticos la implementacin se realiza a travs de


dos clases: Principal y BiCola.

I. CLASE PRINCIPAL EN JAVA.


Crea un objeto BC1 (Bi-Cola) y se ejecuta las operaciones que
se han definido sobre esa estructura de datos.

39 Ing. Pascual Yana Chejo


ESTRUCTURA DE DATOS

public class Principal {

public static void main(String[] args) {

BiCola BC1=new BiCola ();

// crea el objeto bi-cola.

// Agrega cdigo necesario para resolucin de


// problemas con colas

}
}

II.CLASE BI-COLA EN JAVA.

Define los atributos y los mtodos propios de una Bi-Cola.

public class BiCola {


// Agregue aqu los atributos y mtodos que
// conformar la estructura de datos BI-COLA
}

ATRIBUTOS DE LA ESTRUCTURA COLA CIRCULAR.


Se define los elementos de la cola, como son las variables
con los que se implementar esta nueva estructura:

public class BiCola {

final int MaxBiCola = 100; // define el tamao de la cola


int[] BICOLA; // define un vector que almacenara
los datos
int FI, FD; // define los punteros frente

int RI, RD; // y final de la cola


//Agregue aqu los mtodos (operaciones) que se desarrollen
// en clases.

40 Ing. Pascual Yana Chejo


ESTRUCTURA DE DATOS
1. OPERACIONES ELEMENTALES O DE ESTADO.

a. CREAR E INICIALIZAR BI-COLA [CONSTRUCTOR].

public BiCola() {
BCOLA = new int[MaxBiCola];
FI = -1; FD = -1;
RI = -1; RD = -1;
}

b. COLA VACA, Devuelve verdadero si no existe ningn


elemento en la bi-cola.

public boolean colaVacia() {


return ((FI == -1) && (RI == -1) && (FD == -1)
&& (RD == -1));
}

c. TAMAO DE LA BI-COLA. Devuelve el nmero de elementos


que posee la bi-cola

public int TamaoCola() {


return (RI - FI) + 1;
}

d. COLA LLENA EXTREMO DERECHO. Devuelve verdadero si la bi-


cola est llena, cuando se lee de IZQUIERDA a DERECHA

public boolean ColaLlenaRI() {


return RI == (MaxBiCola 1);
}

41 Ing. Pascual Yana Chejo


ESTRUCTURA DE DATOS
e. COLA LLENA EXTREMO IZQUIERDA. Devuelve verdadero si la
bi-cola est llena, cuando se lee de DERECHA a IZQUIERDA

public boolean ColaLlenaRD() {


return (RD - 1) < 0;
}

OPERACIONES FUNDAMENTALES

a. INSERTAR ELEMENTO POR EXTREMO DERECHO. Inserta un


elemento por el FINAL IZQUIERDO en la bi-cola; siempre y
cuando se pueda, caso contrario despliega un mensaje de
error.

public void InsertarRI(int x) {


if (ColaLlenaRI()) {
System.out.println("Cola Llena! No se pudo
adicionar por FINAL IZQUIERDA.");
} else {
if (colaVacia()) {
RI = RI + 1;
BICOLA[RI] = x;
FI = 0; FD = 0; RD = 0;
} else {
RI = RI + 1;
BICOLA[RI] = x;
FD = RI;
}
}
}

42 Ing. Pascual Yana Chejo


ESTRUCTURA DE DATOS
b. INSERTAR ELEMENTO POR EXTREMO IZQUIERDO. Inserta un
elemento por el FINAL DERECHO en la bi-cola. Si la bi-
cola esta vacia y si existe elemento en posicin 0,
muestra un mensaje de error.

public void InsertarRD(int x) {


if (colaLlenaDI()) {
System.out.println("Cola Llena! No se pudo
adicionar.");
} else {
if (colaVacia()) {
System.out.println("No se pudo adicionar
por elementos FINAL DERECHO.");
} else {
RD = RD - 1;
BICOLA[RD] = x;
FI = RD; }
}
}

c. ELIMINAR ELEMENTO POR EXTREMO IZQUIERDO. Elimina un


elemento por FRENTE IZQUIERDO de la bi-cola. Pone en
consideracin los siguientes casos:

Caso 1: si se trata de una bi-cola vaca, entonces


muestra un mensaje de no realizar el proceso.
Caso 2: nico elemento, se elimina el elemento y todos
los punteros se colocan en -1.
Caso 3: si existiera elementos y no no fuera el nico
entonces se elimina el dato y se actualiza el
puntero a la siguiente posicin.

43 Ing. Pascual Yana Chejo


ESTRUCTURA DE DATOS

public int eliminarFI() {


int x = -1;
if (colaVacia()) {
System.out.println("Cola Vacia! No se pudo
eliminar.");
} else {
if (RI == FI) {
x = BICOLA[FI];
FI = -1; RI = -1;
FD = -1; RD = -1;
} else {
x = BICOLA[FI];
FI = FI + 1;
RD = FI;
}
}
return x;
}

d. ELIMINAR ELEMENTO POR EXTREMO DERECHO. Elimina un


elemento de la bi cola por el frente derecho.
Caso 1 y 2 : Se procede dem al apartadoanterior.
Caso 3: se elimina el elemento y se actualiza el puntero
a una posicin anterior.

public int eliminarFD() {


int x = -1;
if (colaVacia()) {
System.out.println("Cola Vaca! No se pudo
eliminar.");

44 Ing. Pascual Yana Chejo


ESTRUCTURA DE DATOS
} else {
if (RD == FD) {
x = BICOLA[FD];
FI = -1; RI = -1;
FD = -1; RD = -1;
} else {
x = BICOLA[FD];
FD = FD - 1;
RI = FD;
}
}
return x;
}

e. RECORRER BI-COLA DE IZQUIERDA A DERECHA. Muestra todos


los elementos de la bi-cola de IZQUIERDA A DERECHA,
siempre y cuando existiera elemento alguno caso
contrario muestra un mensaje de error.

public void mostrarID() {


if (colaVacia()) {
System.out.println("Cola Vaca!!!!!");
} else {
bcola aux = new bcola();
System.out.print("COLA: ");
while (!colaVacia()) {
int x = eliminarFI();
System.out.print(x + " ");
aux.insertarRI(x);
}
while (!aux.colaVacia()) {
insertarRI(aux.eliminarFI());
}
}
}

45 Ing. Pascual Yana Chejo


ESTRUCTURA DE DATOS

f. RECORRER BI-COLA DE DERECHA A IZQUIERDA. Muestra todos


elementos de la bi-cola de DERECHA A IZQUIERDA, si
existen caso contrario despliega un mensaje de error.

public void mostrarDI() {


if (colaVacia()) {
System.out.println("Cola Vaca! No se
puede mostrar nada.");
} else {
bcola aux = new bcola();
System.out.print("BICOLA: ");
while (!colaVacia()) {
int x = eliminarFD();
System.out.print(x + " ");
aux.insertarRI(x);
}
while (!aux.colaVacia()) {
insertarRI(aux.eliminarFD());
}
}

g. BSQUEDA DE ELEMENTOS EN UNA BI COLA. Muestra la


ubicacin (ndice) de un elemento dentro de la bi-cola,
as como el total de las ocurrencias, si se los
encuentra; caso contrario despliega un mensaje de Error.

46 Ing. Pascual Yana Chejo


ESTRUCTURA DE DATOS

public void Buscar() {


int pos=-1;
int c=0;
Scanner in = new Scanner(System.in);
System.out.println("Ingrese el valor a Buscar:);
int eb= in.nextInt();
if (ColaVacia()) {
System.out.println("Bi-Cola Vacia! No se
puede realizar Bsqueda de ningn
elemento.");
} else {
BiCola BCaux = new BiCola();
while (!ColaVacia()) {
pos = FC;
int x = EliminarFI();
if (x == eb) { c=c+1;
System.out.println("posicin: " + pos);
BCaux.InsertarRI(x);}
else{ BCaux.InsertarRI(x);}
}
while (!BCaux.colaVacia()) {
InsertarRI(BCaux.EliminarFI());
}
}
if (c == 0)) { System.out.println("No!, no existe
el elemento en la Cola Circular.");
} else { System.out.println(" Se encontr: "+ c +
"elementos en la cola circular");
}
}

47 Ing. Pascual Yana Chejo


ESTRUCTURA DE DATOS
2. OPERACIONES COMPLEMENTARIAS

a. INSERTAR N ELEMENTOS EN LA BI-COLA. Permite insertan N


elementos por el FINAL IZQUIERDO en la bi-cola.

public void insertarNElementos() {

Scanner in = new Scanner(System.in);


System.out.print("Nro. Elementos: ");
int n = in.nextInt();
System.out.println("Ingrese elementos:");
for (int i = 0; i < n; i++) {
int x = in.nextInt();
insertarRI(x);
}
}

VARIANTES DE LAS BI-COLAS


Es posible definir restricciones en una bicola con respecto
al tipo de entrada o el tipo de salida de datos.

Existen dos variantes de la doble cola:

a. DOBLE COLA DE ENTRADA RESTRINGIDA. Una bicola con


entrada restringida es aquella que solo permite
inserciones por uno de los extremos [FINAL]. Pero
realiza las eliminaciones por los dos extremos.

48 Ing. Pascual Yana Chejo


ESTRUCTURA DE DATOS

b. DOBLE COLA DE SALIDA RESTRINGIDA. Una bicola con


restriccin en la salida es aquella que admite
inserciones por los dos extremos. Pero solo elimina
datos por uno de los extremos [FRENTE].

TAREA NRO.5

a. Implemente la clase BiColaEntradaRestrungida.

b. Implemente la clase BiColaSalidaRestribgida

49 Ing. Pascual Yana Chejo


ESTRUCTURA DE DATOS
EJERCICIOS.

a. Desarrollar los mtodos que permitan mostrar el primer


elemento de la bi-cola.(considerar tanto el de la
izquierda con el de la derecha)
b. Desarrollar los mtodos que permitan mostrar el ltimo
elemento de la bi-cola.(considerar tanto el de la
izquierda con el de la derecha)
c. Desarrollar un mtodo que permita eliminar N primeros
elementos de la bi-cola.
d. Desarrollar un mtodo que permita cargar con N
elementos, de forma aleatoria la bi-cola.
e. Desarrollar un mtodo que permita centralizar la
operacin insertarRI() y insertarRD().
f. Desarrollar un mtodo que permita centralizar la
operacin EliminarFI() y EliminarFD().

50 Ing. Pascual Yana Chejo


ESTRUCTURA DE DATOS

ESTRUCTURA: LISTA SIMPLE

Las listas permiten organizar


numerosas entidades del
mundo real como por ejemplo,
los datos de estudiantes de
un paralelo, los datos del
personal de empleados de una
institucin, programas
informticos almacenados en
un disco magntico, etc.

DEFINICIN DE LISTA

Es una estructura de datos lineales y dinmica, compuesta por


una secuencia de elementos llamadas nodos que corresponden a
un mismo tipo. Y en la que, de cada uno de los ellos se puede
indicar cul es su siguiente (en caso de existir).

Los nodos pueden ser insertados al inicio, al final o antes o


despus de un nodo X de la lista. La impresin de la lista se
realiza en orden ascendente, desde el primer nodo hasta el
ltimo.

REPRESENTACIN DE LISTAS SIMPLES.

51 Ing. Pascual Yana Chejo


ESTRUCTURA DE DATOS
ELEMENTOS DE UNA LISTA SIMPLE.

a. NODO. Variable que est compuesto de un campo dato


(almacena los dato o informacin) y campo apuntador
(contiene la direccin de memoria del siguiente nodo de
la lista).

b. PRIMERO. Puntero de tipo nodo, que apunta a la direccin


de memoria del primer nodo de la lista.

c. ULTIMO. Puntero de tipo nodo, que apunta a la direccin


de memoria del ltimo nodo de la lista.

IMPLEMENTACIN DE LA ESTRUCTURA LISTA SIMPLE EN JAVA.

Solo con fines didcticos la implementacin se realiza a


travs de dos clases: principal, nodo y listaSimple.

I. CLASE PRINCIPAL EN JAVA.


Que permite crear una lista simple X y hacer uso de las
operaciones definidas sobre ella.

public class Principal {

public static void main(String[] args) {

ListaSimple LS1=new ListaSimple ();


// crea el objeto Lista Simple.
// Agrega cdigo para resolucin de problemas
}
}

52 Ing. Pascual Yana Chejo


ESTRUCTURA DE DATOS

II.IMPLEMENTACIN DE LA CLASE NODO EN JAVA. Se crea un nodo


con dos campos, una para almacenar la informacin y la
otra un puntero.

public class Nodo {


int dato;
Nodo siguiente;
}

III. IMPLEMENTACIN DE LA CLASE LISTA SIMPLE EN JAVA, Crea la


lista, se declara los punteros que apuntaran al primer y
ltimo nodo de la lista.

public class ListaSimple {


// Agregue ac los atributos y mtodos de la clase
lista....!
}

ATRIBUTOS DE UNA LISTA SIMPLE.

public class ListaSimple {


Nodo primero;
Nodo ultimo;
// Agregue ac los mtodos de la clase lista....!
}

OPERACIONES SOBRE UNA LISTA. Las operaciones que se


desarrollan sobre las listas; se clasifican en operaciones de
estado, operaciones fundamentales y operaciones
complementarias:

53 Ing. Pascual Yana Chejo


ESTRUCTURA DE DATOS
1. OPERACIONES DE ESTADO, son aquellos que verifican el
estado actual de la lista como ser: ver si existe algn
elemento, quien es el primero de la lista, etc.

a. Inicializar lista. Inicializa los punteros de la lista,


asigna valor null.

public lista() {
primero = null; ultimo = null;
}

b. Lista vaca. Devuelve verdadero si la lista, No posee


ningn nodo.

public boolean listaVacia() {


return ((primero == null) && (ultimo == null));
}

c. Tamao de lista. Devuelve el nmero de nodos que posee


la lista simple.

public int TamaoLista() {


int tam = 0;
if (listaVacia()) {
return 0;
} else {
nodo aux = primero;
while (aux != null) {
tam++;
aux = aux.siguiente;
}
}
return tam;
}

54 Ing. Pascual Yana Chejo


ESTRUCTURA DE DATOS
2. OPERACIONES FUNDAMENTALES, lo conforman los mtodos que
permiten insertar nuevos nodos y eliminarlos por uno de
los extremos.

a. Insertar al inicio de la lista. Se consideran los


siguientes casos:

55 Ing. Pascual Yana Chejo


ESTRUCTURA DE DATOS

public void insertarAlInicio(int xdato) {


nodo nuevo = new nodo();
nuevo.dato = xdato;
if (listaVacia()) {
nuevo.siguiente = null;
ultimo = primero = nuevo;
} else {
nuevo.siguiente = primero;
primero = nuevo;
}
}

b. Insercin al medio, El caso si la lista tuviera


elementos ya, Se crea un nuevo nodo y se inserta en la
posicin indicada por el usuario.

[La implementacin en java queda como practica para el


estudiante]

56 Ing. Pascual Yana Chejo


ESTRUCTURA DE DATOS
c. Insertar ltimo nodo en la lista. Inserta un nodo al
final de la lista [ultimo nodo].

public void insertarAlFinal(int xdato) {


nodo nuevo = new nodo();
nuevo.dato = xdato;
if (listaVacia()) {
nuevo.siguiente = null;
ultimo = primero = nuevo;
} else {
nuevo.siguiente = null;
ultimo.siguiente = nuevo;
ultimo = nuevo;
}
}

d. Eliminar el primer nodo en la lista. Elimina el nodo que se


encuentra primero en la lista

57 Ing. Pascual Yana Chejo


ESTRUCTURA DE DATOS

public int eliminarAlInicio() {

int x = -1;
if (listaVacia())
System.out.println("Lista vaca..!, no hay elem.");
else {
if (primero == ultimo) {
x = primero.dato;
primero = ultimo = null;
} else {
x = primero.dato;
primero = primero.siguiente;
}
}
return x;
}

58 Ing. Pascual Yana Chejo


ESTRUCTURA DE DATOS

e. Eliminar el ltimo nodo en la lista. Elimina el nodo


que se encuentra ltimo en la lista.

59 Ing. Pascual Yana Chejo


ESTRUCTURA DE DATOS

public int eliminarAlFinalUltimo() {


int x = -1;
if (listaVacia())
System.out.println("Lista vaca..!, no se
pudo eliminar");
else {
if (primero == ultimo) {
x = primero.dato;
primero = ultimo = null;
} else {
nodo aux = primero;
while (aux.siguiente != ultimo) {
aux = aux.siguiente;
}
x = ultimo.dato;
ultimo = aux;
ultimo.siguiente = null;
}
}
return x;
}

f. Recorrer lista simple. Muestra en pantalla el contenido


de la lista.

60 Ing. Pascual Yana Chejo


ESTRUCTURA DE DATOS

public void mostrarLista() {


nodo aux = primero;
if (aux == null)
System.out.println("Lista vaca...! No hay
nada que mostrar");
else {
while (aux != null) {
System.out.print(" " + aux.dato);
aux = aux.siguiente;
}
}
}

g. Buscar un dato en una lista, muestra la posicin.


Muestra por pantalla la ubicacin de un valor dentro de
la lista.

61 Ing. Pascual Yana Chejo


ESTRUCTURA DE DATOS

public void buscar() {


Scanner in = new Scanner(System.in);
System.out.println(Ingrese el elemento a buscar:);
int x = in.nextInt():
nodo aux = primero;
int cont = 0;
int pos = 0;
if (ListaVacia()){System.out.println(Lista Vaca..!
no existe elementos para buscar
en la lista.);}
else {
while (aux != null) {
pos++;
if (x == aux.dato) {
cont=cont+1;
System.out.println("posicin: + pos);
aux = aux.siguiente;
} else {
aux = aux.siguiente;}
}
}
if (cont == 0) {
System.out.println("Ese dato no existe..!
En la lista);
} else {
System.out.println("se encontr un total de:
+ cont + elementos en la lista");
}
}

62 Ing. Pascual Yana Chejo


ESTRUCTURA DE DATOS
3. OPERACIONES COMPLEMENTARIAS, son aquellos mtodos que son
adicionales a las operaciones fundamentales como recorrer
la lista, mostrar los datos de lista, etc.

EJERCICIOS.

1. Desarrollar un mtodo que muestre por pantalla Primero de


la lista.
2. Desarrollar un mtodo que muestre por pantalla ltimo de
la lista.
3. Desarrollar un mtodo que muestre por pantalla
Localizacin de un dato dentro de la lista.
4. Desarrollar un mtodo que permita Insertar un nodo antes
de un determinado dato.
5. Desarrollar un mtodo que permita Insertar un nodo despus
de un determinado dato.
6. Desarrollar un mtodo que permita Insertar un nodo en una
posicin dada.
7. Desarrollar un mtodo que permita Eliminar un determinado
dato.
8. Desarrollar un mtodo que permita Eliminar un nodo de una
determinada posicin.
9. Desarrollar un mtodo que permita Insertar N elementos en
lista.

63 Ing. Pascual Yana Chejo


ESTRUCTURA DE DATOS

ESTRUCTURA: LISTA CIRCULAR

stas listas poseen nodos simples que generan una secuencia


circular. Donde la insercin de un nuevo nodo, as como su
eliminacin no rompen esa estructura circular.

DEFINICIN DE LISTA CIRCULAR.

Es una estructura de datos lineal y dinmica, en la que el


campo siguiente del ltimo nodo, apunta al primer nodo de la
lista.
Las inserciones y eliminaciones de los nodos simples se los
realiza generalmente por los extremos de la lista.

REPRESENTACIN GRAFICA.

ELEMENTOS DE UNA LISTA SIMPLE.

a. NODO, Variable que est compuesto de un campo dato y


campo enlace que apunta al siguiente nodo de la lista.

64 Ing. Pascual Yana Chejo


ESTRUCTURA DE DATOS

b. PRIMERO. Puntero de tipo nodo, que apunta a la direccin


de memoria del primer nodo de la lista.

c. ULTIMO. Puntero de tipo nodo, que apunta a la direccin de


memoria del ltimo nodo de la lista.

IMPLEMENTACIN DE LISTA CIRCULAR EN JAVA,

Por circunstancias de didctica la implementacin se


realizara mediante las clases: nodo, listaCircular y
principal; Cada una de ellas en una ficha por separado.

I. IMPLEMENTACIN DE LA CLASE NODO,


Se crea un nodo con dos campos, una para almacenar la
informacin y la otra un puntero.

public class nodo {


int dato;
nodo siguiente;
}

II.IMPLEMENTACIN DE LA CLASE PRINCIPAL,


En esta clase se encuentra el mtodo main(). Y nos permitir
probar lo mtodos que iremos desarrollando.

public class principal {

public static void main(String[] args) {


listaCircular LC1=new listaCircular();

// v1.tamaoLista();
// v1.listaVacia(); y dems sentencias
}
}

65 Ing. Pascual Yana Chejo


ESTRUCTURA DE DATOS
III. IMPLEMENTACIN DE LA CLASE LISTA CIRCULAR,
Crea la lista, se declara los punteros que apuntaran al
primer y ltimo nodo de la lista.
ATRIBUTOS DE LA CLASE LISTA CIRCULAR.

public class listaCircular {


nodo primero;
nodo ultimo;
// Agregue ac todos los mtodos de la clase
listaCircular..!
}

OPERACIONES SOBRE UNA LISTA. Las operaciones que se


desarrollan sobre las listas circulares son las mismas que
con una lista simple.

1. OPERACIONES DE ESTADO, aquellos que verifican el estado


actual de la lista como ser: ver si existe algn elemento,
quien es el primero de la lista, etc.

a. Inicializar lista. Inicializa los punteros de la lista,


asigna valor null.

public listaCircular() {
primero = null;
ultimo = null;
}

b. Lista vaca. Devuelve verdadero si la lista no posee


ningn nodo.

66 Ing. Pascual Yana Chejo


ESTRUCTURA DE DATOS

public boolean listaVacia() {


return ((primero == null) && (ultimo == null));
}

c. Tamao de lista. Devuelve el nmero de elementos que


posee la lista.

public int tamanioLista() {


int tam = 0;
if (listaVacia()) {
return 0;
} else {nodo aux = primero;
do {
tam++;
aux = aux.siguiente;
} while (aux != primero);
return tam;
}

2. OPERACIONES FUNDAMENTALES, lo conforman los mtodos que


permiten insertar nuevos nodos y eliminarlos por uno de
los extremos.

a. Insertar primer nodo en la lista. En el caso de que la


lista no tuviese ningn elemento, se crea el nuevo nodo
y actualiza el puntero.

67 Ing. Pascual Yana Chejo


ESTRUCTURA DE DATOS

public void insertarAlInicio(int xdato) {


nodo nuevo = new nodo();
nuevo.dato = xdato;
if ((primero == null) && (ultimo == null)) {
primero = ultimo = nuevo;
ultimo.siguiente = primero;
} else {
nuevo.siguiente = primero;
primero = nuevo;
ultimo.siguiente = primero;
}
}

b. Insercin al medio, El caso si la lista tuviera


elementos ya, Se crea un nuevo nodo y se inserta en la
posicin indicada por el usuario.
[La implementacin en java queda como practica para el
estudiante]

68 Ing. Pascual Yana Chejo


ESTRUCTURA DE DATOS
c. Insertar ltimo nodo en la lista. Inserta un nodo al
final de la lista [ultimo nodo].

public void insertarAlFinal(int xdato) {


nodo nuevo = new nodo();
nuevo.dato = xdato;
if (listaVacia()) {
primero = ultimo = nuevo;
ultimo.siguiente = primero;
} else {
ultimo.siguiente = nuevo;
ultimo = nuevo;
ultimo.siguiente = primero;
}
}

d. Eliminar el primer nodo en la lista. Elimina el nodo que


se encuentra primero en la lista.

69 Ing. Pascual Yana Chejo


ESTRUCTURA DE DATOS

public int eliminarElPrimero() {

int x = -1;
if (listaVacia())
System.out.println("Lista vaca..!, no hay elem.");
else {
if (primero == ultimo) {
x = primero.dato;
primero = ultimo = null;
} else {
x = primero.dato;
primero = primero.siguiente;
ultimo.siguiente = primero;
}
}
return x;
}

70 Ing. Pascual Yana Chejo


ESTRUCTURA DE DATOS
e. Eliminar el ltimo nodo en la lista. Elimina el nodo que
se encuentra ltimo en la lista.

71 Ing. Pascual Yana Chejo


ESTRUCTURA DE DATOS

public int eliminarElUltimo() {


int x = -1;
if (primero == null)
System.out.println("Lista vaca..!, no hay elem.");
else {
if (primero == ultimo) {
x = primero.dato;
primero = ultimo = null;
} else {
nodo aux = primero;

while (aux.siguiente != ultimo) {


aux = aux.siguiente;
}
x = ultimo.dato;
ultimo = aux;
ultimo.siguiente = primero;
}
}
return x;
}

3. OPERACIONES COMPLEMENTARIAS, son aquellos mtodos que son


adicionales a las operaciones fundamentales como recorrer
la lista, mostrar los datos de lista, etc.

a. Buscar un dato en una lista, muestra la posicin.


Muestra por pantalla la ubicacin de un valor dentro de
la lista.

72 Ing. Pascual Yana Chejo


ESTRUCTURA DE DATOS

public void buscar(int x) {


nodo aux = primero;
boolean sw = false;
int pos = 0;
do { pos++;
if (x == aux.dato) { // Si encuentra el dato
sw = true;
} else { // Apunta al siguiente nodo
aux = aux.siguiente;
}
} while ((aux != primero) && (sw != true));
if (sw == true) {
System.out.println("Ese dato est en la lista.
Se encuentra en la posicion: " + pos);
} else {
System.out.println("Ese dato no existe...! En
la lista");
}
}

b. Imprimir lista de izquierda a derecha. Muestra en


pantalla el contenido de la lista.

73 Ing. Pascual Yana Chejo


ESTRUCTURA DE DATOS

public void mostrarLista() {


nodo aux;
if (listaVacia())
System.out.println("Lista vaca...! No hay
nada que mostrar");
else {
aux = primero;
do {
System.out.print(" " + aux.dato);
aux = aux.siguiente;
} while (aux != primero);

}
}

74 Ing. Pascual Yana Chejo


ESTRUCTURA DE DATOS

EJERCICIOS.

1. Desarrollar un mtodo que muestre por pantalla Primero de


la lista.
2. Desarrollar un mtodo que muestre por pantalla ltimo de
la lista.
3. Desarrollar un mtodo que muestre por pantalla
Localizacin de un dato dentro de la lista.
4. Desarrollar un mtodo que permita Insertar un nodo antes
de un determinado dato.
5. Desarrollar un mtodo que permita Insertar un nodo despus
de un determinado dato.
6. Desarrollar un mtodo que permita Insertar un nodo en una
posicin dada.
7. Desarrollar un mtodo que permita Eliminar un determinado
dato.
8. Desarrollar un mtodo que permita Eliminar un nodo de una
determinada posicin.
9. Desarrollar un mtodo que permita Insertar N elementos en
lista.

75 Ing. Pascual Yana Chejo


ESTRUCTURA DE DATOS

ESTRUCTURA: LISTA DOBLEMENTE ENLAZADA

Es una estructura de datos lineal y dinmica, que se


caracterizan por poseer nodos con dos campos enlace y campo
dato; las mismas que guardan referencias a un nodo anterior y
siguiente.
Los elementos pueden ser ingresados al principio o final de
la lista. Se puede recorrer la lista hacia adelante o hacia
atrs, permitiendo tener la impresin en orden normal u orden
inverso.

REPRESENTACIN GRAFICA.

ELEMENTOS DE UNA LISTA DOBLE.

a. NODO, Variable que est compuesto de un campo dato y


dos campos que apunta al anterior y siguiente nodo
respectivamente.

76 Ing. Pascual Yana Chejo


ESTRUCTURA DE DATOS
b. PRIMERO. Puntero de tipo nodo, que apunta a la direccin
de memoria del primer nodo de la lista.

c. ULTIMO. Puntero de tipo nodo, que apunta a la direccin


de memoria del ltimo nodo de la lista.

IMPLEMENTACIN DE LA CLASE LISTA DOBLE EN JAVA,

Se realizara a travs de tres clases:

I. IMPLEMENTACIN DE LA CLASE NODO EN JAVA.


Se crea un nodo con tres campos, una para almacenar la
informacin y las otras de punteros.

public class nodo {


int dato;
nodo siguiente;
nodo anterior;
}

II.IMPLEMENTACIN DE LA CLASE PRINCIPAL,


Representa la implementacin de la clase nodo y clase
listaDoble.

public class principal {

public static void main(String[] args) {


listaDoble LD1=new listaDoble();

// LD1.tamaoListaDoble();
// LD1.listaDobleVacia(); y dems sentencias

}
}

77 Ing. Pascual Yana Chejo


ESTRUCTURA DE DATOS
III. IMPLEMENTACIN DE LA CLASE LISTA DOBLE,
Crea la lista, se declara los punteros que apuntaran al
primer y ltimo nodo de la lista.
ATRIBUTOS DE LA CLASE LISTA DOBLE

public class listaDoble {


nodo primero;
nodo ultimo;
// Agregue aqu los mtodos de la clase...!
}

OPERACIONES SOBRE UNA LISTA. Las operaciones que se


desarrollan sobre las listas doblemente enlazadas son:

1. OPERACIONES DE ESTADO, son aquellos que verifican el


estado actual de la lista como ser: ver si existe algn
elemento, quien es el primero de la lista, etc.

a. Inicializar lista. Inicializa los punteros de la lista,


asigna valor null.

public listaDoble() {
primero = null;
ultimo = null;
}

b. Lista vaca. Devuelve verdadero si la lista no posee


ningn nodo.

public boolean listaVacia() {


return ((primero == null) && (ultimo == null));
}

78 Ing. Pascual Yana Chejo


ESTRUCTURA DE DATOS

c. Tamao de lista. Devuelve el nmero de elementos que


posee la lista.

public int tamanioLista() {


int tam = 0;
if (listaVacia()) {
return 0;
} else {
nodo aux = primero;
while (aux != null) {
tam++;
aux = aux.siguiente;
}
}
return tam;
}

2. OPERACIONES FUNDAMENTALES, lo conforman los mtodos que


permiten insertar nuevos nodos y eliminarlos por uno de
los extremos.

a. Insertar primer nodo en la lista. En el caso de que la


lista no tuviese ningn elemento, se crea el nuevo nodo
y actualiza el puntero.

79 Ing. Pascual Yana Chejo


ESTRUCTURA DE DATOS

public void insertarAlInicio(int xdato) {


nodo nuevo = new nodo();
nuevo.dato = xdato;
if (listaVacia()) {
nuevo.anterior = null;
nuevo.siguiente = null;
ultimo = primero = nuevo;
} else {
nuevo.anterior = null;
nuevo.siguiente = primero;
primero.anterior = nuevo;
primero = nuevo;
}
}

80 Ing. Pascual Yana Chejo


ESTRUCTURA DE DATOS
b. Insercin al medio, El caso si la lista tuviera
elementos ya, Se crea un nuevo nodo y se inserta en la
posicin indicada por el usuario.
[La implementacin en java queda como practica para el
estudiante]

c. Insertar ltimo nodo en la lista. Inserta un nodo al


final de la lista [ultimo nodo].

81 Ing. Pascual Yana Chejo


ESTRUCTURA DE DATOS

public void insertarAlFinal(int xdato) {


nodo nuevo = new nodo();
nuevo.dato = xdato;
if (listaVacia()) {
nuevo.anterior = null;
nuevo.siguiente = null;
ultimo = primero = nuevo;
} else {
nuevo.siguiente = null;
nuevo.anterior = ultimo;
ultimo.siguiente = nuevo;
ultimo = nuevo;
}
}

82 Ing. Pascual Yana Chejo


ESTRUCTURA DE DATOS
d. Eliminar el primer nodo en la lista. Elimina el nodo que
se encuentra primero en la lista.

83 Ing. Pascual Yana Chejo


ESTRUCTURA DE DATOS

public int eliminarPrimero() {

int x = -1;
if (listaVacia())
System.out.println("Lista vaca..!, no se
pudo eliminar");
else {
if (primero == ultimo) {
x = primero.dato;
primero = ultimo = null;
} else {
x = primero.dato;
primero = primero.siguiente;
primero.anterior = null;
}
}
return x;
}

84 Ing. Pascual Yana Chejo


ESTRUCTURA DE DATOS
e. Eliminar el ltimo nodo en la lista. Elimina el nodo que
se encuentra ltimo en la lista.

85 Ing. Pascual Yana Chejo


ESTRUCTURA DE DATOS

public int eliminarUltimo() {

int x = -1;
if (listaVacia())
System.out.println("Lista vaca..!, no se
pudo eliminar");
else {
if (primero == ultimo) {
x = primero.dato;
primero = ultimo = null;
} else {
x = ultimo.dato;
ultimo = ultimo.anterior;
ultimo.siguiente = null;
}
}
return x;
}

3. OPERACIONES COMPLEMENTARIAS, son aquellos mtodos que son


adicionales a las operaciones fundamentales como recorrer
la lista, mostrar los datos de lista, etc.

a. Buscar un dato en una lista, muestra la posicin.


Muestra por pantalla la ubicacin de un valor dentro de
la lista.

86 Ing. Pascual Yana Chejo


ESTRUCTURA DE DATOS

public void buscar(int x) {


nodo aux = primero;
boolean sw = false;
int pos = 0;
while (aux != null && sw != true) {
pos++;
if (x == aux.dato) { // si encuentra el dato
sw = true;
} else { // apunta al siguiente nodo
aux = aux.siguiente;
}
}
if (sw == true) {
System.out.println("Ese dato est en la lista. Se
encuentra en la posicion: " + pos);
} else {
System.out.println("Ese dato no existe...! En la
lista");
}
}

87 Ing. Pascual Yana Chejo


ESTRUCTURA DE DATOS

b. Imprimir lista de izquierda a derecha. Muestra en


pantalla el contenido de la lista.

public void mostrarListaID() {


nodo aux = primero;
if (aux == null)
System.out.println("Lista vaca..! no hay
nada que mostrar");
else {
while (aux != null) {
System.out.print(" " + aux.dato);
aux = aux.siguiente;
}
}
}

88 Ing. Pascual Yana Chejo


ESTRUCTURA DE DATOS

c. Imprimir lista de derecha a izquierda. Muestra en


pantalla el contenido de la lista.

public void mostrarListaDI() {


nodo aux = ultimo;
if (aux == null)
System.out.println("Lista vaca..! no hay
nada que mostrar");
else {
while (aux != null) {
System.out.print(" " + aux.dato);
aux = aux.anterior;
}
}
}

89 Ing. Pascual Yana Chejo


ESTRUCTURA DE DATOS
EJERCICIOS.

1. Desarrollar un mtodo que muestre por pantalla Primero de


la lista.
2. Desarrollar un mtodo que muestre por pantalla ltimo de
la lista.
3. Desarrollar un mtodo que muestre por pantalla
Localizacin de un dato dentro de la lista.
4. Desarrollar un mtodo que permita Insertar un nodo antes
de un determinado dato.
5. Desarrollar un mtodo que permita Insertar un nodo despus
de un determinado dato.
6. Desarrollar un mtodo que permita Insertar un nodo en una
posicin dada.
7. Desarrollar un mtodo que permita Eliminar un determinado
dato.
8. Desarrollar un mtodo que permita Eliminar un nodo de una
determinada posicin.
9. Desarrollar un mtodo que permita Insertar N elementos en
lista.

90 Ing. Pascual Yana Chejo


ESTRUCTURA DE DATOS

ESTRUCTURA: RBOLES.

DEFINICIN DE RBOL

Un rbol es una estructura de datos no lineal, dinmica y


jerrquica; en la que cada nodo puede apuntar a uno o varios
nodos.

Un rbol se define como una estructura de datos formada por


elementos del mismo tipo, llamados nodos, relacionados de tal
modo que:

- Existe un nodo especial denominado raz.


- Los nodos restantes se dividen en A1, A2, A3,... AN;
cada uno de los cuales, a su vez es rbol (subrboles).

Y se conoce la direccin del nodo raz, a partir de l se


tiene acceso a todos los otros miembros de la estructura.

REPRESENTACIN GRAFICA DE UN RBOL: Un rbol general se


representa atreves de grafos.

91 Ing. Pascual Yana Chejo


ESTRUCTURA DE DATOS

TERMINOLOGA DE ARBOLES:

Definiciones en relacin con otros nodos:

Nodo padre: Es el nodo rbol que tiene por lo menos un


nodo hijo.

Ejm. A es el padre de B, C y D.
B es padre de E y F.
D es el padre de G y H
E es padre de I y J
F es el padre de K y L
G es padre de M

Nodo hijo: Es aquel nodo que siempre va a tener un nodo


antecesor o padre.

Ejm. B, C y D son hijos de A


E y F son de hijos de B
G y H son hijos de D
I y J son hijos de E
K y L son hijos de F
M es hijo de G

Nodo hermano: son aquellos que se encuentran en el mismo


nivel, es decir si tienen el mismo padre.

Ejm. B, C y D son hermanos porque son hijos de A


E y F son hermanos porque son hijos de B
G y H son hermanos porque son hijos de D
I y J son hermanos porque son hijos de E
K y L son hermanos porque son hijos de F

92 Ing. Pascual Yana Chejo


ESTRUCTURA DE DATOS

En cuanto a la posicin dentro del rbol:

Nodo raz: Es el nodo principal de un rbol y no tiene


antecesores. Este es el nodo que usaremos para referirnos
al rbol.

Ejm. A es nodo raz.

Nodo hoja: Son aquellos nodos que no tienen hijos o


tambin los nodos finales de un rbol.

Ejm. C, I, J, K, L y M son nodos hojas

Nodo rama: aunque esta definicin apenas la usaremos,


estos son los nodos que no pertenecen a ninguna de las
dos categoras anteriores.

Ejm. B, D, E, F y G son nodos rama.

Conceptos en relacin a su tamao:

Orden: es el nmero potencial de hijos que puede


tener cada nodo de rbol.

Grado: se dice que el grado de un nodo es el nmero


de hijos que tiene dicho nodo.

Nivel o profundidad: Se dice que el nivel de un nodo


es el nmero de arcos que deben ser recorridos,
partiendo de la raz para llegar hasta l.

Altura: Se dice que la altura de un rbol es el


mximo de los niveles considerando todos sus nodos.

Rama: es el arco que uno nodo con otro.

Es importante conservar siempre el nodo raz ya que es el


nodo a partir del cual se desarrolla el rbol, si perdemos
este nodo, perderemos el acceso a todo el rbol.

93 Ing. Pascual Yana Chejo


ESTRUCTURA DE DATOS

ARBOLES BINARIOS:

Un rbol binario es un conjunto finito de cero o ms nodos


tales que:

- Existe un nodo denominado raz del rbol.


- Cada nodo pude tener 0, 1 2 subrboles; a los que se
les conoce como subrbol izquierdo y subrbol derecho.

Dnde: se dice que dos rboles binarios son similares si


tienen la misma estructura y equivalentes si contienen la
misma informacin.

Un rbol binario est equilibrado si las alturas de los dos


subrboles de cada nodo del rbol se difieren en una unidad
como mximo.

Un rbol binario est lleno cuando todas sus hojas estn al


mismo nivel y sus nodos interiores tienen cada uno dos hijos.

Un rbol binario completo es equilibrado mientras un rbol


binario lleno es totalmente equilibrado.

RECORRIDOS EN UN RBOL BINARIO: Recorrer significa visitar


los nodos del rbol en forma sistemtica; de tal manera que
todos los nodos del mismo sean visitados una sola vez:

94 Ing. Pascual Yana Chejo


ESTRUCTURA DE DATOS
El recorrido en PRE-ORDEN, es tambin llamado orden previo y
consiste en:

- Visitar la raz.
- Recorrer el subrbol izquierdo en pre-orden.
- Recorrer el subrbol derecho en pre-orden.

Ejm. A B D H I E J K C F L G M N

El recorrido en IN-ORDEN, tambin llamado orden simtrico;

- Recorrer el subrbol izquierdo en in-orden.


- Visitar la raz.
- Recorrer el subrbol derecho en in-orden.

Ejm. H D I B J E K A L F C M G N

El recorrido en POST-ORDEN, tambin llamado orden Posterior;

- Recorrer el subrbol izquierdo en post-orden.


- Recorrer el subrbol derecho en post-orden.
- Visitar la raz.

Ejm. H I D J K E B L F M N G C A

ARBOLES BINARIOS DE BSQUEDA (ABB)

95 Ing. Pascual Yana Chejo


ESTRUCTURA DE DATOS
Es un rbol binario ordenado, que cumple las siguientes
premisas:

- Existe un nodo denominado raz del rbol ABB.


- Los datos de los nodos del subrbol izquierdo son
menores que la del nodo raz.
- Los datos de los nodos del subrbol derecho son mayores
que la del nodo raz.
- No existen dos nodos con un mismo dato.
- A su vez tanto el subrbol izquierdo como el derecho son
arboles binarios de bsqueda.

NOTA: Un rbol binario ordenado es aquel del cual se puede


obtener una secuencia ordenada de sus datos, a travs del
recorrido IN-ORDEN.

IMPLEMENTACIN DE UN RBOL BINARIO DE BSQUEDA EN JAVA.

Se implementa a travs de tres clases: clase nodo, que define


los atributos de un nodo; la clase rbol ABB, que define los

96 Ing. Pascual Yana Chejo


ESTRUCTURA DE DATOS
atributos y los mtodos de esta clase; y la clase principal,
que contendr el mtodo main [a cargo del estudiante].

I. CLASE NODO EN JAVA.

Se crea un nodo con tres


campos: puntero izquierdo,
que apunta al subrbol
izquierdo; puntero derecho,
que apunta al subrbol
derecho; y el campo dato, que
contiene la informacin.

public class nodo {


int dato;
nodo izquierdo;
nodo derecho;
// Constructor, que inicializa los punteros en null....!
nodo() {
izquierdo = null;
derecho = null;
}
}

II.CLASE PRINCIPAL EN JAVA,


Se implementa en aula juntamente docente y estudiante.

III. CLASE RBOL BINARIO DE BSQUEDA EN JAVA,


Define la clase con el nombre de abb, adems establece el
nodo raz en null.

97 Ing. Pascual Yana Chejo


ESTRUCTURA DE DATOS

public class abb {


nodo raiz = null;
// Agregue ac los mtodos de la clase lista....!
}

OPERACIONES SOBRE UN RBOL BINARIO DE BSQUEDA. Las


operaciones que se desarrollan sobre un ABB; se clasifican en
operaciones de estado, operaciones fundamentales y
operaciones complementarias:

1. OPERACIONES DE ESTADO, son aquellos que verifican el


estado actual de la lista como ser: ver si existe algn
elemento, quien es el primero de la lista, etc.

a. rbol vaco. Devuelve verdadero si la lista no posee


ningn nodo.

public boolean arbolVacio() {


return raiz == null;
}

b. Padre de. Devuelve la direccin de memoria del padre de


un nodo hijo.

98 Ing. Pascual Yana Chejo


ESTRUCTURA DE DATOS

public nodo padreDe(nodo nodoX) {


nodo raizAux = raiz;
nodo padre = null;
while (raizAux != null) {
if (nodoX.dato == raizAux.dato)
return padre;
else if (nodoX.dato > raizAux.dato) {
padre = raizAux;
raizAux = raizAux.derecho;
} else {
padre = raizAux;
raizAux = raizAux.izquierdo;
}
}
return null;
}

2. OPERACIONES FUNDAMENTALES, lo conforman los mtodos que


permiten insertar nuevos nodos y eliminarlos; para ello se
apoyan en otros mtodos como ser: buscar (existeDato),
padre de, recorrerIzquierda, etc.

a. BSQUEDA EN UN ABB: La bsqueda se iniciar por el nodo


raz. Si X es igual al campo dato del nodo, la bsqueda
finaliza con xito. Si X es menor al campo dato del
nodo, se deber realizar la bsqueda en el subrbol
izquierdo. Si por el contrario, X es mayor entonces la
bsqueda continua por el subrbol derecho.

99 Ing. Pascual Yana Chejo


ESTRUCTURA DE DATOS
El proceso contina hasta que se encuentre un nodo con el
campo dato igual a X o un subrbol vaco [NULL] quin
avala que no existe ningn nodo con el valor X.

public nodo existeDato(int datoX) {


nodo raizAux = raiz;
while (raizAux != null) {
if (datoX == raizAux.dato)
return raizAux;
else if (datoX > raizAux.dato)
raizAux = raizAux.derecho;
else
raizAux = raizAux.izquierdo;
}
return null;

b. INSERCIN DE UN NODO EN UN ABB: lo primero que se debe


hacer es realizar la bsqueda. Si el dato a insertar se
encuentra en el rbol, no se hace nada. En caso
contrario, se inserta el dato en el lugar que
corresponde. Manteniendo la estructura ABB.

100 Ing. Pascual Yana Chejo


ESTRUCTURA DE DATOS

public void insertarNodo(int x) {


nodo nuevo = new nodo();
nuevo.dato = x;
if (arbolVacio())
// Caso: rbol estuviese vaco el nuevo es la raz
raiz = nuevo;
else {
// Caso: rbol tuviera otros nodos.
if (existeDato(x) == null) {
nodo padre = null;
nodo raizAux = raiz;
// Recorre hasta ubicar el lugar a insertar
while (raizAux != null) {
padre = raizAux;
if (x < raizAux.dato)
raizAux = raizAux.izquierdo;
else
raizAux = raizAux.derecho;
}
// Enlaza como hijo izquierdo o derecho
if (x < padre.dato)
padre.izquierdo = nuevo;
else
padre.derecho = nuevo;
} else
// Caso: valor repetido, no se inserta
System.out.println("YA Existe... " + x + "!, en el
rbol.");
}

101 Ing. Pascual Yana Chejo


ESTRUCTURA DE DATOS
NOTA: Los nodos se insertan siempre por las hojas, ya que
la bsqueda acaba sin xito cuando se accede a un subrbol
izquierdo o derecho que est vaco.

c. ELIMINACIN DE UN NODO EN UN ABB: Es un proceso complejo


ya que se debe mantenerse la estructura de un rbol
binario, lo primero es buscar en el rbol la posicin
del nodo a eliminar y luego eliminar segn el caso:
- Eliminar un nodo sin hijos (hoja), simplemente se
elimina el nodo.

- Eliminar un nodo con un solo hijo, solo hay que


realizar una reasignacin de punteros. el padre del
nodo que queremos eliminar pasa a apuntar al hijo del
nodo que est siendo eliminado.

- Eliminar un nodo con dos hijos,


1. Se reemplaza el campo dato del nodo que queremos
eliminar con el dato mximo de su subrbol
izquierdo (o el elemento mnimo de su subrbol
derecho)
2. Seguidamente, se elimina el nodo mximo (o mnimo,
segn el caso).

public int eliminarNodo(nodo dne) {


if (!arbolVacio()) {
int x = dne.dato;
// Creamos var para saber si tiene hijos izq y der
boolean tieneNodoDerecha = dne.derecho != null? true :
false;
boolean tieneNodoIzquierda = dne.izquierdo != null? true
: false;
// Caso 1: No tiene hijos (es un nodo hoja)

102 Ing. Pascual Yana Chejo


ESTRUCTURA DE DATOS
if(!tieneNodoDerecha && !tieneNodoIzquierda) {
nodo padre = padreDe(dne);
if (padre.izquierdo == dne) {
padre.izquierdo = null;
}
if (padre.derecho.dato == dne.dato) {
padre.derecho = null;
}
}
// Caso 2: Tiene un solo hijo y el otro no
if ((tieneNodoDerecha && !tieneNodoIzquierda) ||
(!tieneNodoDerecha && tieneNodoIzquierda)) {
nodo padre = padreDe(dne);
/* Guardemos los hijos del padre temporalmente para
saber cul de ellos hay que eliminar*/

nodo hijoActual = dne.izquierdo != null ?


dne.izquierdo : dne.derecho;
if (padre.izquierdo == dne) {
padre.izquierdo = hijoActual;
}
if (padre.derecho == dne) {
padre.derecho = hijoActual;
}
}
// Caso 3: Tiene ambos hijos
if (tieneNodoDerecha && tieneNodoIzquierda) {
/* Tomamos el hijo derecho del Nodo que queremos
eliminar*/
nodo nodoMasALaIzquierda =
recorrerIzquierda(dne.derecho);
nodo padre = padreDe(nodoMasALaIzquierda);
/* Reemplazamos el valor del nodo que queremos eliminar
por el nodo que se encuentra ms a la izquierda.*/

103 Ing. Pascual Yana Chejo


ESTRUCTURA DE DATOS
dne.dato = nodoMasALaIzquierda.dato;
// Eliminamos el nodo ms a la izquierda
if (padre.dato != nodoMasALaIzquierda.dato)
padre.izquierdo = null;
else
padre.derecho = null;
}
return x;
} else
System.out.println("rbol Vaco...! No hay nada para
eliminar");
return 0;
}
/* Recorre recursivamente hasta encontrar el nodo ms a
la izquierda*/

public nodo recorrerIzquierda(nodo dne) {


if (dne.izquierdo != null) {
return recorrerIzquierda(dne.izquierdo);
}
return dne;
}

3. OPERACIONES COMPLEMENTARIAS, son aquellos mtodos que son


adicionales a las operaciones fundamentales como recorrer
el rbol, mostrar los datos del rbol, etc.

a. Imprimir los datos en In-Orden, se realiza mediante el


recorrido In-Orden.

104 Ing. Pascual Yana Chejo


ESTRUCTURA DE DATOS
private void imprimirInOrden(nodo aux) {
if (aux != null) {
imprimirInOrden(aux.izquierdo);
System.out.print(aux.dato + " ");
imprimirInOrden(aux.derecho);
}
}
public void imprimirInOrden() {
if (!arbolVacio()) {
imprimirInOrden(raiz);
System.out.println("");
} else
System.out.println("rbol sin hojas...! No hay nada que
mostrar.");
}

b. Imprimir los datos en Pre-Orden, se realiza mediante el


recorrido Pre-Orden.

private void imprimirPreOrden(nodo aux) {


if (aux != null) {
System.out.print(aux.dato + " ");
imprimirPreOrden(aux.izquierdo);
imprimirPreOrden(aux.derecho);
}
}
public void imprimirPreOrden() {
if (!arbolVacio()) {
imprimirPreOrden(raiz);
System.out.println("");
} else
System.out.println("rbol sin hojas...! No hay nada
que mostrar.");
}

105 Ing. Pascual Yana Chejo


ESTRUCTURA DE DATOS

c. Imprimir los datos en Post-Orden, se realiza mediante el


recorrido Post-Orden.

private void imprimirPostOrden(nodo aux) {


if (aux != null) {
imprimirPostOrden(aux.izquierdo);
imprimirPostOrden(aux.derecho);
System.out.print(aux.dato + " ");
}
}
public void imprimirPostOrden() {
if (!arbolVacio()) {
imprimirPostOrden(raiz);
System.out.println("");
} else
System.out.println("rbol sin hojas...! No hay nada
que mostrar.");
}

106 Ing. Pascual Yana Chejo


ESTRUCTURA DE DATOS
EJERCICIOS.

1. Desarrollar un mtodo que muestre por pantalla la cantidad


de nodos hoja.
2. Desarrollar un mtodo que muestre por pantalla la altura
del rbol.
3. Desarrollar un mtodo que muestre por pantalla
Localizacin de un dato mayor del rbol.
4. Desarrollar un mtodo que muestre por pantalla
Localizacin de un dato menor del rbol.

www.buenastareas.com
www.rena.edu.ve

107 Ing. Pascual Yana Chejo