我必须在java中实现一些堆栈的函数,并选择一个练习来解决,例如,在堆栈的末尾插入一个新元素而不破坏顺序。我怎么能这样做?
// stack.java
// demonstrates stacks
// to run this program: C>java StackApp
////////////////////////////////////////////////////////////////
class Stack
{
private int maxSize; // size of stack array
private long[] stackArray;
private int top; // top of stack
//--------------------------------------------------------------
public Stack(int s) // constructor
{
maxSize = s; // set array size
stackArray = new long[maxSize]; // create array
top = -1; // no items yet
}
//--------------------------------------------------------------
public void makeEmpty( ) {
top = -1;
}
public void push(long j) // put item on top of stack
{
stackArray[++top] = j; // increment top, insert item
}
//--------------------------------------------------------------
public long pop() // take item from top of stack
{ return stackArray[top--]; // access item, decrement top
}
//--------------------------------------------------------------
public long peek() // peek at top of stack
{ return stackArray[top];
}
//--------------------------------------------------------------
public boolean isEmpty() // true if stack is empty
{return (top == -1);
}
//--------------------------------------------------------------
public boolean isFull() // true if stack is full
{return (top == maxSize-1);
}
}
//--------------------------------------------------------------
// end class StackX
答案 0 :(得分:4)
JVM库中有预构建的Stack
类;但是,如果您在创建自己的堆栈时这样做,可以使用单链接列表轻松完成此操作。
您将需要两个类,一个Stack
类,它将显示void push(Object)
,Object pop()
和任何方法,以及一个Node
类,它将代表链表。
在Stack
中为列表的头部维护一个成员变量,在Stack
中为列表的尾部维护一个成员变量。将Object
推入堆栈将需要新的Node
来保存对象,因此Node
将需要“数据”成员来引用推送的Object
,以及“next”引用“next”Node
。
推送问题的其余部分只是通过创建一个新的Node
来添加元素到节点链,让它引用推送的对象,将它的下一个节点成员指向当前尾部,并更新{{ 1}}当前的尾部引用。弹出将返回Stack
尾部Stack
引用的对象,并将更新尾部以指向“下一个”Node
。
有特殊情况要考虑,但它们并不困难。基本上你在推动空Node
时需要小心,当弹出时会有空Stack
。
完成所有这些操作后,您可以根据需要轻松添加Stack
方法等。