Skip to content

d. Descripción de Estructuras de Datos Desarrolladas.

jesquivel48 edited this page Sep 22, 2018 · 17 revisions

Estructuras de Datos.

Para el presente proyecto, se requería utilizar Estructuras de Datos Lineales. En nuestro caso particular utilizamos las siguientes:

  1. Listas Enlazadas
  2. Cola de Jugadores (Queue)
  3. Diccionario (HashMap)

1. Listas Enlazadas.

Descripción: Las listas enlazadas son listas que están compuestas por nodos, estos nodos tienen el dato deseado y la dirección del nodo anterior a el, en el caso del último nodo el siguiente tiene un valor de "null". Para acceder a la lista se tiene que tener la dirección del último nodo que se agrego y se va ir recorriendo la lista llamando al siguiente nodo encontrar el dato deseado o hasta llegar al final de la lista.

Implementación: Se implementan las listas enlazadas en dos funciones principales, para las listas de la función de los botones se utiliza una lista de listas, las listas tienen los valores de el nombre del botón y un valor de lista, al crear estas listas se crea una lista de nodos con los nombres y luego se mete la lista de los botones en una lista en el valor de list dentro de ella. Esta lista de listas se va utilizar para nombrar valores en la malla del juego y mandarlo al cliente por medio de los sockets. También se va utilizar una lista en el diccionario, para enlazar el valor de la linea con los valores de de los dos puntos adyacentes, para esto se va utilizar una lista que tenga dos valores ambos con los nombres de uno de los dos botones.

package app.server;

public class List {
		
	public NodeList firstPoint;
	public static NodeList firstPointFinal;
			
	public boolean firstEmpty() {
		
		return (firstPoint == null);
		
	}
	
	public void addNode(List matriz) {
		
		NodeList newNode = new NodeList(matriz);
		newNode.next = firstPoint;
		firstPoint = newNode;
		firstPointFinal = newNode;
		
	}
	
	public void addPoint(String pointNumber) {
	
		NodeList newPoint = new NodeList(pointNumber);
		newPoint.next = firstPoint;
		firstPoint = newPoint;
	}
	
	public void displayPoint() {
		
		NodeList LN = firstPoint;
		NodeList LN1 = LN.matrix.firstPoint;
		while(LN != null) {
			while(LN1 != null) {
				LN1.display();		
				System.out.println("Next Link "+ LN1.next + "\n\n");

				
				LN1 = LN1.next;
				
			}
			LN = LN.next;
			try {
			LN1 = LN.matrix.firstPoint;
			}catch (Exception e) {
				System.out.println(e);
			}
		}
		
	}
	
	public void display() {
		
		NodeList LN = firstPoint;
		while (LN != null) {
			LN.display();		
			System.out.println("Next Link "+ LN.next + "\n\n");

			
			LN = LN.next;
			
		}		
		
	}
	
	public static List creteLinkedList() { // Mover Server
 		int p = 0;
 		int q = 4;
 		List matrix = new List();
 		for(int i = 0; i < 4; i++) {
 			List list = new List();
 			for(int j = 0; j < 4; j++) {
 				list.addPoint("p" + Integer.toString((4*q)-p)); p++;
 			}
 			q--;
			p=0;
			matrix.addNode(list);
		}
		matrix.displayPoint();
		return matrix;
	}
}

2. Cola de Jugadores.

Descripción: La cola de jugadores o Queue, estas listas tienen comportamiento FIFO (First in First Out).

Implementación: Para implementar la cola se va crear las dos operaciones necesarias de las listas de cola enqueue y dequeue estas van a servir para hacer que los clientes entren en cola hasta que termine el juego que esta en proceso o hasta que entre un segundo jugador, cuando se cumplen los dos casos se van a remover de la lista los primeros usuarios en entrar y se van a ingresar al juego.

public class QueueNode 
{ 
	public int port; 
	public QueueNode next; 
	
	public QueueNode(int port) { 
		this.port = port; 
		this.next = null; 
	} 
} 

public class Queue 
{ 
	public QueueNode front;
	public QueueNode rear; 
	
	public Queue() { 
		this.front = null;
		this.rear = null; 
	} 
	
	public void enqueue(int port) { 
		QueueNode queue = new QueueNode(port); 
	 
		if (this.rear == null) { 
		this.front = queue;
		this.rear = queue;
		} 

		this.rear.next = queue; 
		this.rear = queue; 
	} 
	
	public QueueNode dequeue() { 
		if (this.front == null) 
		return null; 
	
		QueueNode queue = this.front; 
		this.front = this.front.next; 
	
		if (this.front == null) 
		this.rear = null; 
		return queue; 
		
	} 
} 

3. Diccionario (HashMap)

Descripción: El HashMap es uno de los objetos mas utilizados en java, implementa la interficie Map y no es mas que un conjunto de key-value. En esto objeto puedes guardar cualquier tipo de objeto, asignándole una key, para, mas tarde, poder recuperar ese objeto mediante la key. EL HashMap tiene un constructor sin parámetros new HashMap() y otros constructores con parámetro que, para un uso "normal", no los necesitas. Tiene infinidad de usos, pero suele utilizarse para "agrupar" diferente información en un único objeto