Está en la página 1de 11

Universidad nacional de Guinea Ecuatorial ( U.N.G.

E)
Facultad de ciencias económicas, gestión y administración
Departamento de informática de gestión

Tecnología de la Programación
ACTIVIDAD 3.3. IMPLEMENTACIÓN DE PILA, COLA Y GRAFO EN JAVA
Ricardo Nzang Abeso Mbengono
Segundo de Informática de gestión .Grupo 2
prof : Militón Pablo
ACTIVIDAD 3.3. IMPLEMENTACIÓN DE PILA, COLA Y GRAFO EN
JAVA
Solución actividad 1
1. ¿Qué es una clase genérica en Java? Ponga 2
ejemplos de clase genérica y explique su
funcionamiento.
Una clase genérica (generic class) es aquella que contiene uno o más campos cuyo tipo de datos
es especificado por el cliente de la clase.  Para identificar los tipos de datos de los campos
genéricos se utilizan parámetros de tipo (type parameters), tales como T para tipo o E para
elemento, que se colocan entre corchetes angulares (<>). 

class ArrayList <E> {} // una clase genérica con parámetro


de tipo E

clase HashMap <K, V> {} // una clase genérica con


dos parámetros de tipo K y V
Solución actividad 2
2. Describir las clases: Pila, Cola, Nodo y Grafo indicando brevemente el significado de
cada campo y analizado la funcionalidad de cada uno de los métodos.

Representa una colección de instancias de tamaño variable de último en entrar, primero


en salir (LIFO) del mismo tipo especificado.

Parámetros de tipo T Especifica el tipo de elementos en la pila.

el método Push para insertar cinco cadenas en la pila. Los elementos


de la pila se enumeran, lo que no cambia el estado de la pila.

E
El método Pop se usa para extraer la primera cadena de la pila

El método Peek se usa para mirar el siguiente elemento en la pila.

Devolver el número de objetos almacenados en la cola


(size).

Averiguar si hay algún objeto almacenado en la cola


(isEmpty).

El método imprimir muestra por pantalla los elementos de la pila


Solución actividad 2
Representa una colección de objetos de tipo primero en entrar, primero
en salir.

T
Especifica el tipo de elementos en la cola.
el método Encolar para poner en cola cinco cadenas.
Los elementos de la cola se enumeran, lo que no
cambia el estado de la cola.
El método Desencolar se utiliza para eliminar la
primera cadena.
El método Peek se usa para mirar el siguiente
elemento en la cola.

Devolver el número de objetos almacenados en la cola


(size).

Averiguar si hay algún objeto almacenado en la cola


(isEmpty).

El método imprimir muestra por pantalla los elementos de la cola.


Solución actividad 2
clase Nodo,
cuyos campos son valor (int)
Nombre de tipo string
visitarnodo detipo boolean
Adyacentes, todos de tipo privado

El método Nodo coje dos parámetros uno de tipo int y otro de tipo
string
getvalor de tipo int, para obtener el valor
getnombre de tipo string, para obtener el nombre
visitado del tipo boolean, para conocer si un nodo es visitado o no
el método marcar, muestra los nodos marcados
el método desmarcar para que un nodo no esté ligado a otro
el método adyacentes, introduce los nodos en una matriz
adyacente
adyacente, indica los nodos que son adyacentes
Solución actividad 2
clase grafo
cuyosgrafo atributos de los campos son
Nodos (int)
Nombre de tipo string
visitarnodo detipo boolean
Adyacentes, todos de tipo privado

La clase tiene una variable de instancia de tipo


int[][] para guardar la matriz de
adyacencias del grafo, que deberá ser provista
como argumento en el constructor. La no
Adyacencia entre dos vértices será representada
con “infi nito”.

El método imprimir muestra por pantalla los elementos del grafo


Solución actividad 3
3. Implementar las clases Pila, Cola, Nodo y Grafo.
public class Pila<T> { public class Cola<T> {
private final ArrayList<T> items = new private final ArrayList<T> items = new ArrayList<T>();
ArrayList<T>(); public T desencolar() {
public T pop() { return items.remove(0);
return items.remove(0); }
} public T peek() {
public T peek() { return items.get(0);
return items.get(0); }
} public void encolar(T x) {
public void push(T x) { items.add(x);
items.add(0, x); }
} public boolean empty() {
public boolean empty() { return items.isEmpty();
return items.isEmpty(); }
} public int size() {
public int size() { return items.size();
return items.size(); }
} public void imprimir() {
public void imprimir() { for (var x : items) {
for (var x : items) { System.out.print(x + "\t ");
System.out.print(x + "\t "); }
} System.out.println();
System.out.println(); }
} }
}
public class Nodo { ublic class Grafo {
private final ArrayList<Nodo> nodos;
private final int valor;
private final int[][] adyacencia;
private final String nombre; public Grafo(int[] valores, int[][] adyacencia) {
private boolean visitado; nodos = new ArrayList<>();
private final ArrayList<Nodo> adyacentes; this.adyacencia = adyacencia.clone();
for (var valor : valores) {
public Nodo(int v, String n) {
nodos.add(new Nodo(valor, String.valueOf(valor)));
adyacentes = new ArrayList<>(); }
valor = v; int i = 0;
nombre = n; for (var nodo : nodos) {
int j = 0;
visitado = false;
for (var a : this.adyacencia[i]) {
} if (a > 0)
public String getNombre() { nodo.adayacente(nodos.get(j));
return nombre; j++;
}
} i++;
public int getValor() { }
return valor; }
} private void reset() {
for (Nodo nodo : nodos) {
public boolean visitado() { nodo.desmarcar();
return visitado; }
} }
public void marcar() { public void bfs() {
reset();
visitado = true; var cola = new Cola<Nodo>();
} var origen = nodos.get(0);
public void desmarcar() origen.marcar();
{ cola.encolar(origen);
while (!cola.empty()) {
visitado = false; var nodo = cola.desencolar();
} System.out.println("Visitado: " + nodo.getValor());
public Nodo[] adyacentes() { for (var a : nodo.adyacentes()) {
// adyacentes.sort(Comparator.comparing(Nodo::getValor)); if (!a.visitado()) {
a.marcar();
return adyacentes.toArray(new Nodo[adyacentes.size()]); cola.encolar(a);
} }
public void adayacente(Nodo n) { }
adyacentes.add(n); }
}
} public void dfs() {
} reset();
var pila = new Pila<Nodo>();
var origen = nodos.get(0);
origen.marcar();
pila.push(origen);
while (!pila.empty()) {
var nodo = pila.pop();
System.out.println("Visitado: " + nodo.getValor());
for (var a : nodo.adyacentes()) {
if (!a.visitado()) {
a.marcar();
pila.push(a);
}

También podría gustarte