在java中实现堆栈

时间:2012-06-01 14:39:47

标签: java

我必须在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

1 个答案:

答案 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方法等。