利用java数组实现栈

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值