利用java数组实现栈

版权声明:本文为博主原创文章,未经博主允许不得转载 https://blog.csdn.net/TTTZZZTTTZZZ/article/details/86574411

栈作为被广泛使用的数据结构,是在一个特定范围的存储单元中存储的数据,这些数据可以重新被取出使用,与线性表相比,它们的插入和删除受到更多的约束和限定,所以又称为限定性的线性表结构。不同的是,栈是一个FILO结构,
下面是采用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());
	}
}

猜你喜欢

转载自blog.csdn.net/TTTZZZTTTZZZ/article/details/86574411
今日推荐