首页 > 代码库 > 数据结构之堆栈java版

数据结构之堆栈java版

import java.lang.reflect.Array;

/*

具体原理在c++版已经说的很清楚,这里不再赘述,

就提一点:java的泛型具有边界效应,一旦离开作用域立马被替换为object类型,在new泛型数组需要借助反射。

*/

 

 

interface BaseStack<T>{
  boolean push(T x);
  boolean pop();
  void clear();
  T top();
}
public class JBStack<T> implements BaseStack<T>{
  T[] mStack;
  int mMaxSize,mIndex;
  static public void main(String atgs[]){
    JBStack<Integer> test=new JBStack<Integer>(Integer.class,10);
    test.push(1);
  System.out.println(""+test.top());
  }
  public JBStack(Class<T> type,int Size) {
    // TODO Auto-generated constructor stub
    mMaxSize=Size;
    mIndex=-1;
    mStack=(T[])Array.newInstance(type,mMaxSize);//注意这里new泛型数组的方式 java的泛型有边界替换的特性
  }
  @Override
  public boolean push(T x) {
    // TODO Auto-generated method stub
    if(isFull()){
      //over flow
      return false;
    }
    mIndex++;
    mStack[mIndex] = x ;
  return true;
  }
  @Override
  public boolean pop() {
    // TODO Auto-generated method stub
    if(isEmpyty()){
    //empty
    return false;
    }
    mIndex--;
    return true;
  }

  @Override
  public void clear() {
    // TODO Auto-generated method stub
    mIndex=-1;
  }

  @Override
  public T top() {
    // TODO Auto-generated method stub
    return (T)mStack[mIndex];
  }
  boolean isEmpyty(){
    if(mIndex==-1){
      return true;
    }
    else{
      return false;
    }
  }
  boolean isFull(){
    if(mIndex<mMaxSize){
      return false;
    }
    else{
      return true;
    }
  }
}

数据结构之堆栈java版