You are on page 1of 120

UNIVERSIDAD PBLICA DE EL ALTO

ING. DE SISTEMAS ESTRUCTURA DE DATOS


333333

FUNDAMENTOS DE ESTRUCTURA DE DATOS

DEFINICIN DE COMPUTADORA.

Computadora, computador u ordenador,


es una mquina electrnica, capaz de
reconocer datos de entrada,
procesarlos y producir informacin
relevante; 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.

1 Ing. Pascual Yana Chejo


UNIVERSIDAD PBLICA DE EL ALTO
ING. DE SISTEMAS 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.

2 Ing. Pascual Yana Chejo


UNIVERSIDAD PBLICA DE EL ALTO
ING. DE SISTEMAS 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 sistema1.

Una estructura de datos define la organizacin y la


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

1
http://es.wikipedia.org

3 Ing. Pascual Yana Chejo


UNIVERSIDAD PBLICA DE EL ALTO
ING. DE SISTEMAS ESTRUCTURA DE DATOS

CLASIFICACIN DE ESTRUCTURAS DE DATOS:

En un programa, cada variable pertenece a alguna estructura


de datos explcita o implcitamente, la cual establece el
conjunto de operaciones vlidas para ella.

La clasificacin se la describe de la siguiente manera:

- Entero
ESTANDAR O - Real
PRIMITIVOS - Logico
E S T R U C T U R AS D E D A T O S

- Caracter
DATOS
SIMPLES
DEFINIDOS POR - Subrango (subrange)
EL
PROGRAMADOR - Enumerativo (enumerated)

- Cadena
- Array 's (vector/Matriz)
ESTTICOS
- Registro
- Archivo

DATOS
ESTRUCTURA
DOS - Pilas
- LINEALES - Colas
- Listas
DINMICOS

-rboles
- NO LINEALES
- Grafos

4 Ing. Pascual Yana Chejo


UNIVERSIDAD PBLICA DE EL ALTO
ING. DE SISTEMAS 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.

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. Carcter, 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:

5 Ing. Pascual Yana Chejo


UNIVERSIDAD PBLICA DE EL ALTO
ING. DE SISTEMAS ESTRUCTURA DE DATOS
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

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.

6 Ing. Pascual Yana Chejo


UNIVERSIDAD PBLICA DE EL ALTO
ING. DE SISTEMAS ESTRUCTURA DE DATOS

CONCLUSIN.

Cada estructura de datos, 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


UNIVERSIDAD PBLICA DE EL ALTO
ING. DE SISTEMAS ESTRUCTURA DE DATOS

RECURSIVIDAD

DEFINICIN DE FUNCIONES.

Las funciones, son SUBPROGRAMAS (conjunto de


instrucciones), que realizan una tarea concreta y retornan
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


UNIVERSIDAD PBLICA DE EL ALTO
ING. DE SISTEMAS 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.

Establece una alternativa al uso de


los bucles while, do while y for.

DEFINICIN DE FUNCIN RECURSIVA.

Una funcin es recursiva, si y solo, si se llama a s misma


repetidas veces, hasta que satisfaga una condicin
establecida con anterioridad, denominado criterio base.

REGLA DE RECURSIVIDAD EN LA RESOLUCIN DE PROBLEMAS.

Para poder implementar la solucin de un problema de forma


recursiva, es necesario cumplir con 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 (criterio base),


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


UNIVERSIDAD PBLICA DE EL ALTO
ING. DE SISTEMAS ESTRUCTURA DE DATOS

TIPOS DE FUNCIONES RECURSIVAS.

Dependiendo del nmero de funciones a utilizarse podemos


diferenciar:

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

Ejemplo 1.

Implementar una funcin recursiva en java, que obtener


el 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


UNIVERSIDAD PBLICA DE EL ALTO
ING. DE SISTEMAS ESTRUCTURA DE DATOS
b. FUNCIN RECURSIVA MLTIPLE. Cada llamada recursiva
genera 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. FUNCIN RECURSIVA MUTUA. Cada llamada recursiva genera
que dos funciones se llamen 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


UNIVERSIDAD PBLICA DE EL ALTO
ING. DE SISTEMAS 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);
}

NOTA IMPORTANTE: Para ejecutar cada una de las funciones se


debe crear una clase denominada aplicacin, la que deber
contener el mtodo main().

Ejemplo 6.

public class Aplicacin {

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


UNIVERSIDAD PBLICA DE EL ALTO
ING. DE SISTEMAS 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, a travs de un puntero denominado TOP.

13 Ing. Pascual Yana Chejo


UNIVERSIDAD PBLICA DE EL ALTO
ING. DE SISTEMAS ESTRUCTURA DE DATOS
- Tanto para la bsqueda como para el recorrido, se hace
uso de una pila auxiliar.

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


almacenaje de 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


UNIVERSIDAD PBLICA DE EL ALTO
ING. DE SISTEMAS ESTRUCTURA DE DATOS

IMPLEMENTACIN DE LA ESTRUCTURA PILA EN JAVA.


Solo con fines didcticos la implementacin se realiza a
travs de dos clases: Aplicacin y Pila.

I. CLASE APLICACION EN JAVA.


Permite crear una pila p1 y hacer uso de las operaciones
definidas sobre ella.

public class Aplicacin {

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


UNIVERSIDAD PBLICA DE EL ALTO
ING. DE SISTEMAS 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. CREA E INICIALIZA UNA PILA [CONSTRUCTOR], crea una pila


e inicializa el puntero TOP en -1.

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

b. PILA VACA, Devuelve el valor booleano true (verdadero)


si no existe ningn elemento en la pila.

public boolean pilaVacia() {


return top == -1;
}

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


hasta el momento en la pila.

public int tamaoPila() {


return top + 1;
}

16 Ing. Pascual Yana Chejo


UNIVERSIDAD PBLICA DE EL ALTO
ING. DE SISTEMAS ESTRUCTURA DE DATOS
d. PILA LLENA. Devuelve el valor booleano true (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 cima de la pila.

public int Tope() {


return PILA[top];
}

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

a. INSERTAR UN ELEMENTO. agrega un elemento por el TOP, en


la pila; conocido tambin como el proceso de apilar.

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


UNIVERSIDAD PBLICA DE EL ALTO
ING. DE SISTEMAS ESTRUCTURA DE DATOS
b. ELIMINAR UN ELEMENTO. Elimina un elemento por el TOP,
en la pila; Tambin llamado proceso desapilar.

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 datos de la pila; donde


el ltimo elemento de la pila se imprimir a la
IZQUIERDA y el primero estar a la DERECHA

public void recorrer() {


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

18 Ing. Pascual Yana Chejo


UNIVERSIDAD PBLICA DE EL ALTO
ING. DE SISTEMAS ESTRUCTURA DE DATOS
while (!pilaVacia()) {
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.
[Queda como prctica para el estudiante]

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


TOP, en la pila.

public void pushN() {


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


UNIVERSIDAD PBLICA DE EL ALTO
ING. DE SISTEMAS ESTRUCTURA DE DATOS

ESTRUCTURA: COLA SIMPLE

INTRODUCCIN.

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 DE COLA SIMPLE.

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.

20 Ing. Pascual Yana Chejo


UNIVERSIDAD PBLICA DE EL ALTO
ING. DE SISTEMAS ESTRUCTURA DE DATOS
REPRESENTACIN GRAFICA DE UNA COLA.

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: Aplicacin, Cola y los elementos sern
de tipo entero.

I. CLASE APLICACION EN JAVA.


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

public class Aplicacin {

public static void main(String[] args) {

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

21 Ing. Pascual Yana Chejo


UNIVERSIDAD PBLICA DE EL ALTO
ING. DE SISTEMAS ESTRUCTURA DE DATOS

// 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.

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:

22 Ing. Pascual Yana Chejo


UNIVERSIDAD PBLICA DE EL ALTO
ING. DE SISTEMAS ESTRUCTURA DE DATOS
1. OPERACIONES DE ESTADO.

a. CREAR E INICIALIZA COLA [CONSTRUCTOR], define un vector


COLA para almacenar los elementos e inicializa los
punteros F y R en -1.

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

b. COLA VACA, Devuelve un valor booleano true (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 true (verdadero) si la cola est


llena.

public boolean ColaLlena() {


return (R+1) == maxCola;
}

23 Ing. Pascual Yana Chejo


UNIVERSIDAD PBLICA DE EL ALTO
ING. DE SISTEMAS 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


UNIVERSIDAD PBLICA DE EL ALTO
ING. DE SISTEMAS 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


UNIVERSIDAD PBLICA DE EL ALTO
ING. DE SISTEMAS ESTRUCTURA DE DATOS
c. INSERTAR N ELEMENTOS EN LA COLA. Inserta N elementos por
el FINAL en la cola.

public void InsertarN() {


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


UNIVERSIDAD PBLICA DE EL ALTO
ING. DE SISTEMAS 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, las colas de prioridad
nos permiten aadir elementos en cualquier orden y
recuperarlos de menor a mayor.

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


UNIVERSIDAD PBLICA DE EL ALTO
ING. DE SISTEMAS ESTRUCTURA DE DATOS

ESTRUCTURA: COLA CIRCULAR

INTRODUCCIN

Las eliminaciones realizadas 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


UNIVERSIDAD PBLICA DE EL ALTO
ING. DE SISTEMAS 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


UNIVERSIDAD PBLICA DE EL ALTO
ING. DE SISTEMAS 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: Aplicacin y colaCircular.

I. CLASE PRINCIPAL EN JAVA.


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

public class Aplicacin {

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.

public class ColaCircular {


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

30 Ing. Pascual Yana Chejo


UNIVERSIDAD PBLICA DE EL ALTO
ING. DE SISTEMAS ESTRUCTURA DE DATOS

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;
}

b. COLA CIRCULAR VACA, Devuelve verdadero si no existe


ningn elemento en la cola.

31 Ing. Pascual Yana Chejo


UNIVERSIDAD PBLICA DE EL ALTO
ING. DE SISTEMAS ESTRUCTURA DE DATOS

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;
}

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;

32 Ing. Pascual Yana Chejo


UNIVERSIDAD PBLICA DE EL ALTO
ING. DE SISTEMAS ESTRUCTURA DE DATOS
COLAC[RC] = x;
FC = 0;
} else {
if (RC == (MaxColac - 1)) {
RC = 0;
COLAC[RC] = x;
} else {
RC = RC + 1;
COLAC[RC] = x;
}
}
}
}

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 {

33 Ing. Pascual Yana Chejo


UNIVERSIDAD PBLICA DE EL ALTO
ING. DE SISTEMAS ESTRUCTURA DE DATOS
x = COLAC[FC];
FC = FC + 1;
}
}
}
return x;
}

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.

34 Ing. Pascual Yana Chejo


UNIVERSIDAD PBLICA DE EL ALTO
ING. DE SISTEMAS 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");
}
}

35 Ing. Pascual Yana Chejo


UNIVERSIDAD PBLICA DE EL ALTO
ING. DE SISTEMAS 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.

36 Ing. Pascual Yana Chejo


UNIVERSIDAD PBLICA DE EL ALTO
ING. DE SISTEMAS 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.

37 Ing. Pascual Yana Chejo


UNIVERSIDAD PBLICA DE EL ALTO
ING. DE SISTEMAS 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: Aplicacin y BiCola.

I. CLASE APLICACION EN JAVA.


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

38 Ing. Pascual Yana Chejo


UNIVERSIDAD PBLICA DE EL ALTO
ING. DE SISTEMAS ESTRUCTURA DE DATOS

public class Aplicacin {

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 para los datos
int FI, FD; // define los punteros frente

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


//Agregue aqu los mtodos que se desarrollen en clases.

39 Ing. Pascual Yana Chejo


UNIVERSIDAD PBLICA DE EL ALTO
ING. DE SISTEMAS 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);
}

40 Ing. Pascual Yana Chejo


UNIVERSIDAD PBLICA DE EL ALTO
ING. DE SISTEMAS 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;
}
}
}

41 Ing. Pascual Yana Chejo


UNIVERSIDAD PBLICA DE EL ALTO
ING. DE SISTEMAS 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.

42 Ing. Pascual Yana Chejo


UNIVERSIDAD PBLICA DE EL ALTO
ING. DE SISTEMAS 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 apartado anterior.
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.");
} else {

43 Ing. Pascual Yana Chejo


UNIVERSIDAD PBLICA DE EL ALTO
ING. DE SISTEMAS ESTRUCTURA DE DATOS
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 recorrerID() {


if (colaVacia()) {
System.out.println("Cola Vaca! No se
puede mostrar nada.");
} 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());

44 Ing. Pascual Yana Chejo


UNIVERSIDAD PBLICA DE EL ALTO
ING. DE SISTEMAS 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 recorrerDI() {


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.

public void Buscar() {


int pos=-1;

45 Ing. Pascual Yana Chejo


UNIVERSIDAD PBLICA DE EL ALTO
ING. DE SISTEMAS ESTRUCTURA DE DATOS
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");
}
}

46 Ing. Pascual Yana Chejo


UNIVERSIDAD PBLICA DE EL ALTO
ING. DE SISTEMAS 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 insertarN() {

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.

47 Ing. Pascual Yana Chejo


UNIVERSIDAD PBLICA DE EL ALTO
ING. DE SISTEMAS 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 estructura de datos bi-Cola con estrada


restringida.

b. Implemente una estructura de datos bi-cola con salida


restringida.

48 Ing. Pascual Yana Chejo


UNIVERSIDAD PBLICA DE EL ALTO
ING. DE SISTEMAS 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().

49 Ing. Pascual Yana Chejo


UNIVERSIDAD PBLICA DE EL ALTO
ING. DE SISTEMAS 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.

50 Ing. Pascual Yana Chejo


UNIVERSIDAD PBLICA DE EL ALTO
ING. DE SISTEMAS ESTRUCTURA DE DATOS

REPRESENTACIN DE LISTAS SIMPLES.

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.

51 Ing. Pascual Yana Chejo


UNIVERSIDAD PBLICA DE EL ALTO
ING. DE SISTEMAS ESTRUCTURA DE DATOS
IMPLEMENTACIN DE LA ESTRUCTURA LISTA SIMPLE EN JAVA.
Solo con fines didcticos la implementacin se realiza a
travs de dos clases: Aplicacin, nodo y listaSimple.

I. CLASE APLICACION EN JAVA.


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

public class Aplicacin {

public static void main(String[] args) {

ListaSimple LS1=new ListaSimple ();

// crea el objeto Lista Simple.

// Agrega cdigo necesario para resolucin de


// problemas con listas simples

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.

52 Ing. Pascual Yana Chejo


UNIVERSIDAD PBLICA DE EL ALTO
ING. DE SISTEMAS ESTRUCTURA DE DATOS

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:

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;
}

53 Ing. Pascual Yana Chejo


UNIVERSIDAD PBLICA DE EL ALTO
ING. DE SISTEMAS ESTRUCTURA DE DATOS
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;
}

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:

54 Ing. Pascual Yana Chejo


UNIVERSIDAD PBLICA DE EL ALTO
ING. DE SISTEMAS 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.

55 Ing. Pascual Yana Chejo


UNIVERSIDAD PBLICA DE EL ALTO
ING. DE SISTEMAS ESTRUCTURA DE DATOS

[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].

public void insertarAlFinal(int xdato) {


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

56 Ing. Pascual Yana Chejo


UNIVERSIDAD PBLICA DE EL ALTO
ING. DE SISTEMAS ESTRUCTURA DE DATOS
} 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


UNIVERSIDAD PBLICA DE EL ALTO
ING. DE SISTEMAS ESTRUCTURA DE DATOS

public int eliminarAlInicio() {

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;
}
}
return x;
}

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


que se encuentra ltimo en la lista.

58 Ing. Pascual Yana Chejo


UNIVERSIDAD PBLICA DE EL ALTO
ING. DE SISTEMAS 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;

59 Ing. Pascual Yana Chejo


UNIVERSIDAD PBLICA DE EL ALTO
ING. DE SISTEMAS ESTRUCTURA DE DATOS
}
x = ultimo.dato;
ultimo = aux;
ultimo.siguiente = null;
}
}
return x;
}

f. Recorrer lista de izquierda a derecha. Muestra en


pantalla el contenido de la lista.

public void recorrerLista() {


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;
}
}
}

60 Ing. Pascual Yana Chejo


UNIVERSIDAD PBLICA DE EL ALTO
ING. DE SISTEMAS ESTRUCTURA DE DATOS

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


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

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 {

61 Ing. Pascual Yana Chejo


UNIVERSIDAD PBLICA DE EL ALTO
ING. DE SISTEMAS ESTRUCTURA DE DATOS
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");
}
}

3. OPERACIONES COMPLEMENTARIAS, son aquellos mtodos que son


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

62 Ing. Pascual Yana Chejo


UNIVERSIDAD PBLICA DE EL ALTO
ING. DE SISTEMAS 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.

63 Ing. Pascual Yana Chejo


UNIVERSIDAD PBLICA DE EL ALTO
ING. DE SISTEMAS 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


UNIVERSIDAD PBLICA DE EL ALTO
ING. DE SISTEMAS 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
Aplicacin; 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 APLICACION,


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

65 Ing. Pascual Yana Chejo


UNIVERSIDAD PBLICA DE EL ALTO
ING. DE SISTEMAS ESTRUCTURA DE DATOS
public class Aplicacin {

public static void main(String[] args) {


listaCircular LC1=new listaCircular();

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

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.

66 Ing. Pascual Yana Chejo


UNIVERSIDAD PBLICA DE EL ALTO
ING. DE SISTEMAS ESTRUCTURA DE DATOS

public listaCircular() {
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 elementos que


posee la lista.

public int tamaoLista() {


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

67 Ing. Pascual Yana Chejo


UNIVERSIDAD PBLICA DE EL ALTO
ING. DE SISTEMAS ESTRUCTURA DE DATOS
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.

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;

68 Ing. Pascual Yana Chejo


UNIVERSIDAD PBLICA DE EL ALTO
ING. DE SISTEMAS 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].

public void insertarAlFinal(int xdato) {


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

69 Ing. Pascual Yana Chejo


UNIVERSIDAD PBLICA DE EL ALTO
ING. DE SISTEMAS ESTRUCTURA DE DATOS
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.

public int eliminarElPrimero() {

int x = -1;
if (listaVacia())

70 Ing. Pascual Yana Chejo


UNIVERSIDAD PBLICA DE EL ALTO
ING. DE SISTEMAS ESTRUCTURA DE DATOS
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;
ultimo.siguiente = primero;
}
}
return x;
}

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


se encuentra ltimo en la lista.

71 Ing. Pascual Yana Chejo


UNIVERSIDAD PBLICA DE EL ALTO
ING. DE SISTEMAS ESTRUCTURA DE DATOS

public int eliminarElUltimo() {


int x = -1;
if (primero == null)
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) {

72 Ing. Pascual Yana Chejo


UNIVERSIDAD PBLICA DE EL ALTO
ING. DE SISTEMAS ESTRUCTURA DE DATOS
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.

public void buscar(int x) {


nodo aux = primero;
boolean sw = false;
int pos = 0;
do { pos++;

73 Ing. Pascual Yana Chejo


UNIVERSIDAD PBLICA DE EL ALTO
ING. DE SISTEMAS ESTRUCTURA DE DATOS
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.

public void mostrarLista() {


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

74 Ing. Pascual Yana Chejo


UNIVERSIDAD PBLICA DE EL ALTO
ING. DE SISTEMAS ESTRUCTURA DE DATOS
System.out.print(" " + aux.dato);
aux = aux.siguiente;
} while (aux != primero);

}
}

75 Ing. Pascual Yana Chejo


UNIVERSIDAD PBLICA DE EL ALTO
ING. DE SISTEMAS 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.

76 Ing. Pascual Yana Chejo


UNIVERSIDAD PBLICA DE EL ALTO
ING. DE SISTEMAS ESTRUCTURA DE DATOS

ESTRUCTURA: LISTA DOBLEMENTE ENLAZADA

LISTAS DOBLEMENTE ENLAZADAS

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.

77 Ing. Pascual Yana Chejo


UNIVERSIDAD PBLICA DE EL ALTO
ING. DE SISTEMAS 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 APLICACION,


Representa la implementacin de la clase nodo y clase
listaDoble.

78 Ing. Pascual Yana Chejo


UNIVERSIDAD PBLICA DE EL ALTO
ING. DE SISTEMAS ESTRUCTURA DE DATOS

public class Aplicacion {

public static void main(String[] args) {


listaDoble LD1=new listaDoble();

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

}
}

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.

79 Ing. Pascual Yana Chejo


UNIVERSIDAD PBLICA DE EL ALTO
ING. DE SISTEMAS ESTRUCTURA DE DATOS

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));
}

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;
}

80 Ing. Pascual Yana Chejo


UNIVERSIDAD PBLICA DE EL ALTO
ING. DE SISTEMAS ESTRUCTURA DE DATOS

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.

81 Ing. Pascual Yana Chejo


UNIVERSIDAD PBLICA DE EL ALTO
ING. DE SISTEMAS 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;
}
}

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].

82 Ing. Pascual Yana Chejo


UNIVERSIDAD PBLICA DE EL ALTO
ING. DE SISTEMAS 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;
}
}

83 Ing. Pascual Yana Chejo


UNIVERSIDAD PBLICA DE EL ALTO
ING. DE SISTEMAS ESTRUCTURA DE DATOS

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


se encuentra primero en la lista.

84 Ing. Pascual Yana Chejo


UNIVERSIDAD PBLICA DE EL ALTO
ING. DE SISTEMAS 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;
}

85 Ing. Pascual Yana Chejo


UNIVERSIDAD PBLICA DE EL ALTO
ING. DE SISTEMAS ESTRUCTURA DE DATOS

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


se encuentra ltimo en la lista.

86 Ing. Pascual Yana Chejo


UNIVERSIDAD PBLICA DE EL ALTO
ING. DE SISTEMAS 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;
}

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


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

87 Ing. Pascual Yana Chejo


UNIVERSIDAD PBLICA DE EL ALTO
ING. DE SISTEMAS 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");

88 Ing. Pascual Yana Chejo


UNIVERSIDAD PBLICA DE EL ALTO
ING. DE SISTEMAS ESTRUCTURA DE DATOS
}
}

g. Recorrer lista de izquierda a derecha. Muestra en


pantalla el contenido de la lista.

public void recorrerListaID() {


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;
}
}
}

h. Recorrer lista de derecha a izquierda. Muestra en


pantalla el contenido de la lista.

89 Ing. Pascual Yana Chejo


UNIVERSIDAD PBLICA DE EL ALTO
ING. DE SISTEMAS ESTRUCTURA DE DATOS

public void recorrerListaDI() {


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;
}
}
}

3. OPERACIONES COMPLEMENTARIAS, son aquellos mtodos que son


adicionales a las operaciones fundamentales.

90 Ing. Pascual Yana Chejo


UNIVERSIDAD PBLICA DE EL ALTO
ING. DE SISTEMAS 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.

91 Ing. Pascual Yana Chejo


UNIVERSIDAD PBLICA DE EL ALTO
ING. DE SISTEMAS ESTRUCTURA DE DATOS

ESTRUCTURA: RBOLES

Un rbol es una estructura de datos no lineal, que


puede representarse como un conjunto de nodos enlazados
entre s por medio de ramas. La informacin contenida
en un nodo puede ser de cualquier tipo simple o estructura de
datos.

Los rboles permiten modelar diversas entidades del


mundo real tales como, por ejemplo: el ndice de un
libro, clasificacin del reino animal, el rbol genealgico,
etc.

92 Ing. Pascual Yana Chejo


UNIVERSIDAD PBLICA DE EL ALTO
ING. DE SISTEMAS ESTRUCTURA DE DATOS
DEFINICIN 1.

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


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

DEFINICIN 2.

Un rbol es una estructura de datos base que cumple una de


estas dos condiciones:

- Es una estructura vaca, o


- Es un nodo de tipo base que tiene de 0 a N subrboles
disjuntos entre s.

Al nodo base, que debe ser nico, se le denomina raz y se


establece el convenio de representarlo grficamente en la
parte superior.

REPRESENTACIN GRAFICA DE UN RBOL: Un rbol general se


representa a travs de grafos.

TERMINOLOGA DE ARBOLES:

1. En relacin con otros nodos: La relacin entre dos nodos


separados de forma inmediata por una rama se denomina
padre/hijo

93 Ing. Pascual Yana Chejo


UNIVERSIDAD PBLICA DE EL ALTO
ING. DE SISTEMAS ESTRUCTURA DE DATOS
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 nico


nodo padre(o antecesor).

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 nodo 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

2. En cuanto a la posicin dentro del rbol:

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


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

Ejm. A es nodo raz.

94 Ing. Pascual Yana Chejo


UNIVERSIDAD PBLICA DE EL ALTO
ING. DE SISTEMAS ESTRUCTURA DE DATOS
Nodo hoja: Son aquellos nodos que no tienen hijos o
tambin llamados 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.

3. En relacin a tamao:

Orden: es el nmero potencial de hijos que puede


tener cada nodo de rbol.

Grado: el mayor de los grados de uno de los nodos.

Se dice que el grado de un nodo es el nmero de


hijos que tiene.

Altura / profundidad / nivel: hace referencia al


mximo de los niveles del rbol, considerando
todos sus nodos.

Donde nivel de un nodo es el nmero de arcos que


deben ser recorridos, partiendo de la raz para
llegar hasta l.

Amplitud / Anchura: Representa el nmero de nodos


del nivel ms poblado.

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.

95 Ing. Pascual Yana Chejo


UNIVERSIDAD PBLICA DE EL ALTO
ING. DE SISTEMAS ESTRUCTURA DE DATOS

ESTRUCTURA: RBOLES BINARIOS

Se definen como rboles de grado dos, tales que:

- Existe un nodo denominado raz del rbol.


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

CONCEPTOS GENERALES DE RBOLES BINARIOS:

1. rboles binarios similares/equivalentes: se dice que dos


rboles binarios son similares si tienen la misma
estructura y equivalentes si contienen la misma
informacin.

2. rbol binario equilibrado: Un rbol binario est


equilibrado si las alturas de los dos subrboles de cada
nodo del rbol se difieren en una unidad como mximo.

3. rbol binario lleno: Un rbol binario est lleno cuando


todas sus hojas estn al mismo nivel y sus nodos
interiores tienen cada uno dos hijos.

96 Ing. Pascual Yana Chejo


UNIVERSIDAD PBLICA DE EL ALTO
ING. DE SISTEMAS ESTRUCTURA DE DATOS
4. rbol binario completo: 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.

En cualquier caso, el recorrido se puede realizar basndose


en las siguientes modalidades:

1. Modalidad de Recorrido En Profundidad. Se progresa


verticalmente desde la raz hacia las hojas y, en
principio, de izquierda a derecha. Se plantean tres
posibilidades atendiendo al momento en que se procesa la
clave.

a. Recorrido PRE-ORDEN, tambin llamado orden


previo consiste;

- 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

b. 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

97 Ing. Pascual Yana Chejo


UNIVERSIDAD PBLICA DE EL ALTO
ING. DE SISTEMAS ESTRUCTURA DE DATOS
c. 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

2. Modalidad Recorrido en amplitud. Implica un acceso a las


claves recorriendo cada nivel de izquierda a derecha y
descendiendo al siguiente. Por ejemplo, la exploracin en

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

98 Ing. Pascual Yana Chejo


UNIVERSIDAD PBLICA DE EL ALTO
ING. DE SISTEMAS ESTRUCTURA DE DATOS

ESTRUCTURA: RBOLES BINARIOS DE BSQUEDA

Se denota por las siglas ABB.

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.

99 Ing. Pascual Yana Chejo


UNIVERSIDAD PBLICA DE EL ALTO
ING. DE SISTEMAS ESTRUCTURA DE DATOS
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 arbolABB, que define los
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.

100 Ing. Pascual Yana Chejo


UNIVERSIDAD PBLICA DE EL ALTO
ING. DE SISTEMAS ESTRUCTURA DE DATOS

public class nodo {


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

II.CLASE APLICACION EN JAVA,


Se implementa en aula juntamente docente y estudiante.

public class Aplicacin {

public static void main(String[] args) {


abb A1=new abb();

// llamada a los mtodos de la clase abb;

}
}

III. CLASE RBOL BINARIO DE BSQUEDA EN JAVA,


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

public class abb {


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

101 Ing. Pascual Yana Chejo


UNIVERSIDAD PBLICA DE EL ALTO
ING. DE SISTEMAS ESTRUCTURA DE DATOS

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.

102 Ing. Pascual Yana Chejo


UNIVERSIDAD PBLICA DE EL ALTO
ING. DE SISTEMAS 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.

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.

103 Ing. Pascual Yana Chejo


UNIVERSIDAD PBLICA DE EL ALTO
ING. DE SISTEMAS ESTRUCTURA DE DATOS

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.

104 Ing. Pascual Yana Chejo


UNIVERSIDAD PBLICA DE EL ALTO
ING. DE SISTEMAS 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.");
}

105 Ing. Pascual Yana Chejo


UNIVERSIDAD PBLICA DE EL ALTO
ING. DE SISTEMAS 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)

106 Ing. Pascual Yana Chejo


UNIVERSIDAD PBLICA DE EL ALTO
ING. DE SISTEMAS 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);

107 Ing. Pascual Yana Chejo


UNIVERSIDAD PBLICA DE EL ALTO
ING. DE SISTEMAS ESTRUCTURA DE DATOS
/* Reemplazamos el valor del nodo que queremos eliminar por
el nodo que se encuentra ms a la izquierda.*/

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;
}

d. Recorrido en In-Orden, se realiza mediante el recorrido


In-Orden.

private void imprimirInOrden(nodo aux) {


if (aux != null) {
imprimirInOrden(aux.izquierdo);
System.out.print(aux.dato + " ");

108 Ing. Pascual Yana Chejo


UNIVERSIDAD PBLICA DE EL ALTO
ING. DE SISTEMAS ESTRUCTURA DE DATOS
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.");
}

e. Recorrido 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.");
}

109 Ing. Pascual Yana Chejo


UNIVERSIDAD PBLICA DE EL ALTO
ING. DE SISTEMAS ESTRUCTURA DE DATOS
f. Recorrido 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.");
}

3. OPERACIONES COMPLEMENTARIAS, son aquellos mtodos que son


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

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.

110 Ing. Pascual Yana Chejo


UNIVERSIDAD PBLICA DE EL ALTO
ING. DE SISTEMAS ESTRUCTURA DE DATOS

ESTRUCTURA: GRAFOS.

Un grafo es una manera de representar relaciones que


existen entre pares de objetos.

En un grafo se distinguen bsicamente dos elementos: los


nodos, mejor conocidos como vrtices, y los arcos, llamados
aristas, que conecta un vrtice con otro. Los vrtices
almacenan informacin y las aristas representan relaciones
entre dichas informacin.

DEFINICIONES DE GRAFOS.

111 Ing. Pascual Yana Chejo


UNIVERSIDAD PBLICA DE EL ALTO
ING. DE SISTEMAS ESTRUCTURA DE DATOS
Definicin 1. Un grafo se define como un par G = (V, A),
donde V es un conjunto finito no vaco de vrtices y A es un
conjunto de pares de vrtices de V, es decir, las aristas.

Definicin 2. Un grafo G se define como un par ordenado, G =


(V, A), donde V es un conjunto finito y A es un conjunto que
consta de dos elementos de V.

TERMINOLOGA Y CONCEPTOS.

1. GRAFOS DIRIGIDOS Y NO DIRIGIDOS. Dependiendo del tipo de


relacin entre los vrtices del grafo, se definen
distintos tipos de grafos. As se distinguen aristas
dirigidas y no dirigidas:

ARISTA DIRIGIDA: es aquella que define un par ordenado


de vrtices (u,v), donde el primer vrtice u es el
origen de la arista y el segundo vrtice v es el trmino
(o vrtice final). El par (u, v) (v, u).

ARISTA NO DIRIGIDA: es aquella que define un par no


ordenado de vrtices (u, v), donde (u, v) = (v, u).

GRAFO DIRIGIDO: Es aquel cuyas aristas son dirigidas.


Los grafos dirigidos suelen representar relaciones
asimtricas como por ejemplo: relaciones de herencia,
los vuelos entre ciudades, etc.

GRAFO NO DIRIGIDO: Es aquel cuyas aristas son no


dirigidas. Representan relaciones simtricas como
relaciones de hermandad y colaboracin, conexiones de

112 Ing. Pascual Yana Chejo


UNIVERSIDAD PBLICA DE EL ALTO
ING. DE SISTEMAS ESTRUCTURA DE DATOS
transportes, etc.

2. INCIDENCIA, ADYACENCIA Y GRADO DE UN VRTICE. Sea un


grafo G = (V, A), los vrtices u y v pertenecientes a
V; y una arista (u,v) perteneciente a A, se dice que:

INCIDENCIA: la arista (u,v) es incidente con los vrtices


u y con v.

ADYACENCIA: Dos vrtices u y v son adyacentes si existe


una arista cuyos vrtices sean u y v, donde:

El vrtice u es adyacente a v
El vrtice v es adyacente desde u

GRADO: El grado de un vrtice u es el nmero de vrtices


adyacentes a u.

113 Ing. Pascual Yana Chejo


UNIVERSIDAD PBLICA DE EL ALTO
ING. DE SISTEMAS ESTRUCTURA DE DATOS
3. GRAFOS SIMPLES Y MULTIGRAFOS. Un grafo simple es aquel
que no tiene aristas paralelas o mltiples que unan el
mismo par de vrtices. Un grafo que cuente con mltiples
aristas entre dos vrtices se denomina multigrafo.

Si asumimos un grafo simple, se observan las siguientes


propiedades:

- Si G es un grafo no dirigido con m vrtices,


entonces

Una arista (u, v) se cuenta dos veces en este


sumatorio, uno como vrtice final u y otro como
vrtice final v. Entonces, la contribucin total
de las aristas a los grados de los vrtices
es dos veces el nmero de las aristas.

- Si G es un grafo dirigido con m vrtices, entonces:

En un grafo dirigido, una arista (u,v) contribuye

114 Ing. Pascual Yana Chejo


UNIVERSIDAD PBLICA DE EL ALTO
ING. DE SISTEMAS ESTRUCTURA DE DATOS
una unidad al grado de salida de su origen u y una
unidad al grado de entrada de su vrtice final v.
Por tanto, la contribucin total de las aristas
al grado de salida de los vrtices es igual al
nmero de aristas, y similar para los grados de
salida.

- Sea G un grafo simple con n vrtices y m aristas,


entonces:
Si G es no dirigido: m n(n-1)/2.
Si G es dirigido: m n(n-1).

4. CAMINO, BUCLE Y CICLO.

CAMINO. Es una secuencia que alterna vrtices y


aristas q ue comienza por un vrtice y termina en
vrtice tal que cada arista es incidente a su vrtice
predecesor y sucesor.

Es decir, un camino es un sucesin de vrtices de vi V:


<v0, v1, v2, vk> que cumple que:

(vi,,vi+1) A i {0 k-1}.

Se dice que este camino tiene longitud k. Es decir, el


nmero de aristas de un camino o ciclo es la longitud
del camino.

Un camino es simple si cada vrtice en el camino es


distinto, excepto posiblemente por el primero y el
ltimo vrtice. Un camino simple cumple la siguiente
restriccin:

vi vj i {0k}, j {1k-1}, ij

Para todo vrtice x, existe el camino simple <x>, que

115 Ing. Pascual Yana Chejo


UNIVERSIDAD PBLICA DE EL ALTO
ING. DE SISTEMAS ESTRUCTURA DE DATOS
sera el camino de longitud 0.

BUCLE. Es un camino de longitud 1 que comienza y


termina en el mismo vrtice: <xi, xi>.

CICLO. Es un camino simple <v0, vk> que cumple las


siguientes restricciones:

v0= vk

Si es no dirigido, k = 1 (es un bucle) o k 3.

5. GRAFOS CONEXOS. Sea G = (V, A) un grafo no dirigido, se


le denomina conexo si existe un camino entre dos
vrtices cualesquiera de G. Para un grafo dirigido G,
su grafo asociado no dirigido es aquel que se obtiene
ignorando la direccin de las aristas. G se considera
conexo si su grafo asociado es conexo. La Figura 5.5
muestra ejemplos de grafos conexos y no conexos.

116 Ing. Pascual Yana Chejo


UNIVERSIDAD PBLICA DE EL ALTO
ING. DE SISTEMAS ESTRUCTURA DE DATOS

6. GRAFOS VALORADOS Y GRAFOS ETIQUETADOS. Un grafo valorado


(o ponderado) es una terna <V, A, f> donde <V, A> es un
grafo y f es una funcin cualquiera, denominada funcin
de coste, que asocia un valor o peso a cada arista en
el grafo. El peso de un camino en un grafo con pesos es
la suma de los pesos de todas las aristas atravesadas.
En un grafo etiquetado, la funcin f tiene como imagen
un conjunto de etiquetas no numricas.

IMPLEMENTACIN DE GRAFOS

Los dos tipos de implementacin ms frecuentes


(independientemente del lenguaje de programacin) para la
representacin de grafos son las matrices de adyacencias y
las listas de adyacencias. En este tema, se detallarn ambas
implementaciones en el lenguaje Java.

1. MATRIZ DE ADYACENCIAS

117 Ing. Pascual Yana Chejo


UNIVERSIDAD PBLICA DE EL ALTO
ING. DE SISTEMAS ESTRUCTURA DE DATOS

Una matriz de adyacencias A (implementada como una matriz


bidimensional) determina las adyacencias entre pares de
vrtices de un grafo. En una matriz de adyacencias,
los vrtices se conciben como enteros en el conjunto
{0,1,,n-1} y las aristas como pares de tales enteros. Esto
permite almacenar referencias a las aristas en las celdas de
la matriz bidimensional de NxN. Cada fila y cada columna
representan un vrtice del grafo y cada posicin representa
una arista (o la ausencia de esta) cuyo vrtice origen se
encuentra en la fila y vrtice final se encuentra en la
columna. La Figura 5.7 muestra la representacin grfica de
un grafo y su matriz de adyacencias.

En una tabla de adyacencias, los vrtices se representan


mediante ndices. As, sea un grafo con los vrtices
{a,b,c,d,e}, estos sern representados mediante sus
ndices

{0,1,2,3,4} tal y como se muestra en la Figura 5.9.

De esta manera, podemos definir una matriz A bidimensional


de n x n donde la celda [i, j] guarda informacin referente
a la arista (v, w), en caso de que exista, donde v es el
vrtice con ndice i y w es el vrtice con ndice j. Existen
varias posibilidades para representar la arista (v, w) en su

118 Ing. Pascual Yana Chejo


UNIVERSIDAD PBLICA DE EL ALTO
ING. DE SISTEMAS ESTRUCTURA DE DATOS
correspondiente celda A [i, j]:

Si no es etiquetado: un valor booleano que toma el valor 1


si existe la arista y 0 en caso contrario.

Si es valorado: un real con el valor f (i, j) si existe la


arista. En caso contrario,toma el valor . Se obtendra la
matriz de costes del grafo.

Si es etiquetado: una etiqueta con el valor f (i, j) si


existe la arista. En caso contrario, toma el valor
etiqueta imposible. Se obtendra la matriz de etiquetas
del grafo.

A continuacin, se muestra una posible implementacin de un


grafo en una matriz de adyacencias en Java. Se asume que se
trata de un grafo simple no etiquetado (tanto dirigido como
no dirigido).

2. LISTA DE ADYACENCIAS

Otra implementacin frecuente para la estructura grafo es


la lista de adyacencias. En una lista de adyacencias, a
cada vrtice i se le asocia una lista enlazada con todos
los vrtices j adyacentes a i. De esta forma slo se
reserva memoria para las aristas adyacentes a i y no para
todas las posibles aristas que pudieran tener como origen
i (como ocurre en una matriz de adyacencias).

119 Ing. Pascual Yana Chejo


UNIVERSIDAD PBLICA DE EL ALTO
ING. DE SISTEMAS ESTRUCTURA DE DATOS
El grafo, por tanto, se representa por medio de un vector
de n componentes, siendo n el nmero de vrtices del grafo,
donde cada componente constituye la lista de adyacencias
correspondiente a cada uno de los vrtices del grafo. Cada
nodo de la lista consta de un campo indicando el vrtice
adyacente. En caso de que el grafo sea etiquetado o
valorado, habr que aadir un segundo campo para mostrar
el valor de la etiqueta o el peso de la arista.

120 Ing. Pascual Yana Chejo