Implementar pilas

Hola necesito ayuda urgente porque tengo que hacer en java: implementar una cola, una pila y una lista circular usando una lista como estructura que almacene los datos
Soy incapaz y se me termina el plazo
(Tengo que ver que funcionan con algún problemilla)
Gracias por anticipado

4 respuestas

1
Respuesta de
Si lo que tienes es que implementar una cola de peticiones que realicen acciones, te recomiendo 2 cosas.
1. Crea una clase que herede de thread y que puedas lanzar en un hilo de ejecución independiente.
En el método init() inicia una variable a true.
En run() un bucle while (variable) y dentro del bucle llamas a 3 funciones.
En el método stop() la variable a false.
Esta clase debe contener un Hashtable para almacenar peticiones.
2. En el primer método accede a las peticiones (si están en una base de datos la lees, lees fichero externos, etc) y las almacenas en la hastable.
3. En el segundo proceso procesas las peticiones (enviando e-mail o lo que hagas) por lo que dentro del bucle habrá otro que recorra la lista.
4. El tercer método tiene de entrada un check de petición procesada o no. Si la petición es OK la borras de la hashtable y de tablas, fichero, etc. Si es KO controlas el número de intentos para descartarla en caso de superar un límite.
Por último la clase run tiene un método sleep para parar cuando la lista esté vacía.
El Run es independiente, debes arrancarlo y pararlo desde otra clase (por ejemplo desde el método init() y destroy() de un servlet si estás en un entorno web).
Un saludo.
Añade un comentario a esta respuesta
1
Respuesta de
¿No eres capas de crear las estructuras o los algoritmos?
Añade un comentario a esta respuesta
1
Respuesta de
Hola
Te anticipo que no soy un megaexperto de Java precisamente, pero creo que puedo ayudarte.
Para hacer una pila (LIFO) en java, tengo aquí tu ejercicio resuelto:
http://enterprise.eui.upm.es/grupos/EjercicioJava.pdf
Para una cola (FIFO), creo que esto te vale:
import java.io.*;
interface Queue {
public void enqueue(Object o);
public Object dequeue();
}
class LinkedQueue implements Queue {
Node top, bottom;
public void enqueue(Object o) {
Node n = new Node(o);
if (bottom != null) {
bottom.next = n;
bottom = n;
} else
top = bottom = n;
}
public Object dequeue() throws NullPointerException {
Object o = top.elem;
top = top.next;
if (top == null)
bottom = null;
return o;
}
class Node {
private Object elem;
private Node next;
public Node(Object o) {
this.elem = o;
}
}
}
class MyMain1 {
public static void main(String args[]) {
FileReader f;
StringWriter g = new StringWriter();
LinkedQueue h = new LinkedQueue();
try {
f = new FileReader(args[0]);
} catch(FileNotFoundException e) {
return;
}
for (int c = 0; c != -1; ) {
try {
c = f.read();
} catch (IOException e) {
c = -1;
}
switch (c) {
case -1 : if (g.getBuffer().length() > 0) {
h.enqueue(g.getBuffer().toString());
g.getBuffer().setLength(0);
}
break;
case '\n': h.enqueue(g.getBuffer().toString());
g.getBuffer().setLength(0);
continue;
default : g.write(c);
continue;
}
}
while (true) {
String s;
try {
s = (String)h.dequeue();
System.out.println(s);
} catch(NullPointerException e) {
break;
}
}
}
}
Para una lista circular, creo que en este largísimo enlace tienes lo que necesitas:
http://mailweb.udlap.mx/~ccastane/Syllabus_Estructura_Datos/Notas_Estr_Datos/Ejemplos/TercerParcial/Ejem_ListasLigCircular.html
Puede que estas cosas, aunque tengo la sospecha de que no he entendido bien la pregunta. ¿Quieres crear todas estas estructuras a partir de una lista? Es decir, ¿Quieres usar la pila, lista y cola como interface para manejar una lista? Si es así, puedo ayudarte algo más de lo que he hecho.
Saludos
Añade un comentario a esta respuesta
0
Respuesta de
Hola, perdona por la tardanza pero es que he estado fuera.
Para implementar esas estructuras solo tienes que hacer una clase que extienda una lista y redefinir los métodos para añadir y quitar elementos, si sabes como funciona una cola o una pila es muy sencillo.
Saludos.
Añade un comentario a esta respuesta
Añade tu respuesta
Haz clic para o
Escribe tu mensaje