【数据结构】栈的数组实现

来源:互联网 发布:如何获取扫描枪的数据 编辑:程序博客网 时间:2024/05/22 17:37
import java.util.EmptyStackException;public class ArrayStack<T> implements Cloneable{private T[] data;private int manyItems;// 默认构造函数public ArrayStack(){final int INITIAL_CAPACITY = 10;manyItems = 0;data = (T[]) new Object[INITIAL_CAPACITY];}public ArrayStack(int initialCapacity){manyItems = 0;data = (T[]) new Object[initialCapacity];}// 生成栈的一个副本public ArrayStack<T> clone(){ArrayStack<T> answer;try{answer = (ArrayStack<T>)super.clone();} catch (CloneNotSupportedExceptione){throw new RuntimeException("this class does not implement Cloneable.");}answer.data = data.clone();return answer;}// 改变栈当前的容量public void ensureCapacity(int minimumCapacity){T[] newArr;if (data.length < minimumCapacity){newArr = (T[])new Object[minimumCapacity];System.arraycopy(data, 0, newArr, 0, manyItems);data = newArr;}}// 存取方法,用于确定栈的当前容量。public int getCapacity(){return data.length;}// 判断是否为空public boolean isEmpty(){return (manyItems == 0);}// 在不移除栈顶元素的情况下,获得栈顶数据项的值public T peek(){if (manyItems == 0){throw new EmptyStackException();}return data[manyItems -1];}// 获得栈顶数据项,并将其从栈中移出public T pop(){if (manyItems == 0){throw new EmptyStackException();}// 获得栈顶项T answer = data[manyItems - 1];manyItems = manyItems - 1;data[manyItems] = null;return answer;}// 将一个数据项压入栈中,新的数据项可以是空引用public void push(T item){if (data.length == manyItems){ensureCapacity(manyItems*2 + 1);}data[manyItems] = item;manyItems++;}// 用于确定栈中数据项个数的存取方法public int size(){return manyItems;}public void trimToSize(){T trimmedArray[];if (data.length == manyItems){trimmedArray = (T[]) new Object[manyItems];System.arraycopy(data, 0, trimmedArray, 0, manyItems);data = trimmedArray;}}}

0 0
原创粉丝点击