栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

java数据结构之java实现栈

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

java数据结构之java实现栈

复制代码 代码如下:
import java.util.Arrays;


public class Stack {
 private int size;    //栈中元素的个数
 private Object[] arr;  //底层数组
 private final int defaultLength = 200; //默认长度

 
 public Stack(){
  arr = new Object[defaultLength];
  size = 0;
 }

 
 public Stack(int length){
  arr = new Object[length];
  size = 0;
 }

 
 public void push(T element){
  //是否需要扩容
  if(size >= arr.length){
   //数组扩容
   extendCapacity(size+1);
  }
  arr[size++] = element;
 }

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

 
 public void clear(){
  for(int i=0;i   arr[i]=null;
  }
  size = 0;
 }

 
 public int getSize(){
  return size;
 }

 
 public boolean isEmpty(){
  return size == 0;
 }

 
 @SuppressWarnings("unchecked")
 public void printStack(){
  for(int i=0;i   System.out.print(((T)arr[i]).toString());
  }
  System.out.println();
 }

 
 private void extendCapacity(int length){
  //当前数组长度和需要的长度取最大
  int minCapacity = Math.max(arr.length, length);
  //判断是否需要扩容
  if(minCapacity - arr.length>0){
   //数组长度增加一半
   int newLength = 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);
  }
 }
}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/152328.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号