【发布时间】:2011-07-29 22:56:45
【问题描述】:
在 Java 中使用链表实现堆栈的最佳方法是什么?
编辑:我将最好定义为使用干净代码最有效。我已经使用数组来实现堆栈,但不熟悉链接列表,所以想知道是否有人可以帮助我实现类似于以下内容:
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;
}
}
编辑:如果有人感兴趣,这里是链表实现。
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;
}
}
【问题讨论】:
-
定义“最佳”!你衡量什么质量?开发时间?干净的代码?运行时性能?内存使用情况? “当我把它作为家庭作业上交时我得到的成绩”?优雅?每行字符数?
-
你想要一个堆栈(又名后进先出 / LIFO)还是一个队列(先进先出)?
-
在pop方法中,如果返回项“NEXT”设置为null就不好了??
标签: java queue linked-list adt