欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

利用java数组实现栈

程序员文章站 2022-07-10 20:28:53
...

栈作为被广泛使用的数据结构,是在一个特定范围的存储单元中存储的数据,这些数据可以重新被取出使用,与线性表相比,它们的插入和删除受到更多的约束和限定,所以又称为限定性的线性表结构。不同的是,栈是一个FIFO结构,
下面是采用java数组的方式时实现栈

/**
 * 利用java数组实现栈
 *
 * @author VicterTian
 * @version V1.0
 * @Date 2019/1/21
 */
public class MyStackByArray<E> {
	/**
	 * 定义一个栈
	 */
	private Object[] stack;
	/**
	 * 定义数组中存储元素的个数
	 */
	private int size;

	private MyStackByArray() {
		// 栈的初始长度为10
		stack = new Object[10];
	}

	/**
	 * 判断堆栈是否为空
	 */
	private Boolean isEmpty() {
		return this.size == 0;
	}
	/**
	 * 返回栈顶元素,却不删除
	 */
	@SuppressWarnings("unchecked")
	private E peek(){
		if (isEmpty()){
			return null;
		}
		return (E) stack[size-1];
	}

	/**
	 * 弹栈
	 */
	private E pop(){
		E e = peek();
		stack[size -1] = null;
		size--;
		return e;
	}

	/**
	 * 压栈
	 * @param item 要压栈的数据
	 */
	private void push(E item){
		ensureCapacity(size+1);
		stack[size ++] = item;
	}
	/**
	 * 判断数组容器是否已满,若已满则扩充空间
	 */
	private void ensureCapacity(int size){
		int length = stack.length;
		if(size > length){
			int newLen = 10;
			// copyOf()是系统自动在内部新建一个数组,
			// 调用arraycopy()将original内容复制到copy中去,并且长度为newLength。
			// 返回copy; 即将原数组拷贝到一个长度为newLength的新数组中,并返回该数组
			stack = Arrays.copyOf(stack,newLen);
		}
	}
	/**
	 * 测试
	 */
	public static void main(String[] args) {
		MyStackByArray<Integer> myStack = new MyStackByArray<>();
		myStack.push(1);
		myStack.push(2);
		System.out.println("myStack.size = " + myStack.size);
		System.out.println("myStack.pop() = " + myStack.pop());
		System.out.println("myStack.pop() = " + myStack.pop());
	}
}