zl程序教程

您现在的位置是:首页 >  后端

当前栏目

java数据结构之java实现栈

2023-06-13 09:15:20 时间

复制代码代码如下:


importjava.util.Arrays;

/**
 *栈的实现<br>
 *@authorSkip
 *@version1.0
 */
publicclassStack<T>{
 privateintsize;   //栈中元素的个数
 privateObject[]arr;  //底层数组
 privatefinalintdefaultLength=200; //默认长度

 /**
 *无参构造,使用默认长度初始化数组
 */
 publicStack(){
  arr=newObject[defaultLength];
  size=0;
 }

 /**
 *使用长度参数初始化数组
 *@paramlength长度
 */
 publicStack(intlength){
  arr=newObject[length];
  size=0;
 }

 /**
 *入栈
 *@paramelement数据
 */
 publicvoidpush(Telement){
  //是否需要扩容
  if(size>=arr.length){
   //数组扩容
   extendCapacity(size+1);
  }
  arr[size++]=element;
 }

 /**
 *出栈
 *@return数据
 */
 @SuppressWarnings("unchecked")
 publicTpop(){
  //元素个数为0,无法执行出栈操作
  if(size==0){
   returnnull;
  }
  Tt=(T)arr[size-1];
  arr[--size]=null;  //数据已出栈,还原为null
  returnt;
 }

 /**
 *清空栈
 */
 publicvoidclear(){
  for(inti=0;i<size;i++){
   arr[i]=null;
  }
  size=0;
 }

 /**
 *获得当前栈中元素的个数
 *@return元素的个数
 */
 publicintgetSize(){
  returnsize;
 }

 /**
 *判断是否为空栈
 *@return空为true,非空为false
 */
 publicbooleanisEmpty(){
  returnsize==0;
 }

 /**
 *打印栈中所有的元素
 */
 @SuppressWarnings("unchecked")
 publicvoidprintStack(){
  for(inti=0;i<size;i++){
   System.out.print(((T)arr[i]).toString());
  }
  System.out.println();
 }

 /**
 *扩容
 *@paramlength需要的长度
 */
 privatevoidextendCapacity(intlength){
  //当前数组长度和需要的长度取最大
  intminCapacity=Math.max(arr.length,length);
  //判断是否需要扩容
  if(minCapacity-arr.length>0){
   //数组长度增加一半
   intnewLength=arr.length+arr.length/2;
   //如果新的长度还比需求要小,将需求的长度作为数组长度
   if(newLength<minCapacity){
    newLength=minCapacity;
   }
   //数组长度不能超过Integer.Max_Value
   if(newLength>Integer.MAX_VALUE-8){
    newLength=Integer.MAX_VALUE;
   }
   //数组扩容
   arr=Arrays.copyOf(arr,newLength);
  }
 }
}