数据结构——Stack

/**
 * 栈
 * 按照先进后出(FILO)的顺序获取数据。
 */
public class MyStack<E> {
	protected Object[] elementData;// 元素集合
	protected int capacityIncrement;// 当数组满后,增长的条数
	private int elementCount;// 当前元素个数

	public MyStack(int initialCapacity, int capacityIncrement) {
		this.elementData = new Object[initialCapacity];
		this.capacityIncrement = capacityIncrement;
	}

	public MyStack(int initialCapacity) {
		this(initialCapacity, 0);
	}

	public MyStack() {
		this(10);
	}

	public E push(E element) {
		int index = elementCount;
		elementCount += 1;
		int oldLen = elementData.length;
		if (elementCount > oldLen) {
			int newLength = oldLen
					+ (capacityIncrement > 0 ? capacityIncrement : oldLen);
			elementData = Arrays.copyOf(elementData, newLength);
		}
		elementData[index] = element;
		return element;
	}

	public E peek() {
		int len = size();
		if (len == 0)
			throw new RuntimeException("Stack is empty");
		return elementAt(len-1);
	}

	public E pop() {
		int len = size();
		E element = peek();
		elementCount -= 1;
		elementData[len-1] = null;// GC
		return element;
	}
	
	public E elementAt(int index){
		if(index>=elementCount){
			throw new IndexOutOfBoundsException(index + " >= " + elementCount);
		}
		return (E) elementData[index];
	}

	public int size() {
		return elementCount;
	}
}



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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值