¿Cuál es la mejor manera de implementar una pila usando listas enlazadas en Java?Implementación de la pila usando listas vinculadas
EDITAR: Definiría mejor como el más eficiente utilizando código limpio. Ya he utilizado una matriz para implementar una pila, pero no estoy familiarizado con listas de enlaces por lo que preguntaba si alguien me podría ayudar a implementar algo similar a continuación:
public class StackArray{
private Object [] objArray;
private int stackSize;
public StackArray(){
objArray = new Object[50];
stackSize = 0;
}
public StackArray(int size){
objArray = new Object[size];
stackSize = 0;
}
//public interface methods - push, pop, top, empty & clear
public void push(Object o)throws StackArrayException{
if(stackSize < objArray.length){
objArray[stackSize] = o;
stackSize ++;
}else{
throw new StackArrayException("Stack Overflow");
}
}
public Object pop()throws StackArrayException{
if(stackSize != 0){
stackSize--;
return(objArray[stackSize]);
}else{
throw new StackArrayException("Stack Underflow");
}
}
public void top() throws StackArrayException{
if(stackSize != 0){
return(objArray[stackSize-1]);
}else{
throw new StackArrayException("Stack Underflow");
}
}
public boolean empty(){
return (stackSize == 0):
}
public void clear(){
stackSize = 0;
}
}
EDIT: Aquí está la aplicación lista enlazada si alguien está interesado ..
public class StackList{
private Node listHead;
protected class Node{
protected Object datum;
protected Node next;
public Node(Object o, Node n){
datum = o;
next = n;
}
public StackList(){
listHead = null;
}
//public interface methods - push pop top empty clear
public void push(Object o){
listHead = new Node(o, listHead);
}
public Object pop() throws StackListException{
if(listHead!=null){
Object top = listHead.datum;
listHead = listHead.next;
return top;
}else{
throw new StackListException("Stack Underflow");
}
}
public Object top()throws StackListException{
if(listHead != null){
return(listHead.datum);
}else{
throw new StackListException("Stack Underflow");
}
}
public boolean empty(){
return (listHead == null);
}
public void clear(){
listHead = null;
}
}
Definir "mejor"! ¿Qué calidad mides? ¿Desarrollando tiempo? ¿Código limpio? ¿Rendimiento en tiempo de ejecución? ¿Uso de memoria? "Grado que recibo cuando lo convierto como tarea"? ¿Elegancia? Personajes por linea? –
¿Desea una pila (alias último en entrar, primero en salir/LIFO) o una cola (primero en entrar, primero en salir)? –
es esta tarea? – bguiz