现在的位置: 首页 > 综合 > 正文

JAVA实现简单的堆栈结构

2017年10月28日 ⁄ 综合 ⁄ 共 1390字 ⁄ 字号 评论关闭
package Stack;

public class Stack<E> {// 不知道栈中要存入什么类型,用泛型

	/**
	 * @param PLA
	 *  JAVA实现简单堆栈
	 */
	private Object[] stack;// java不支持泛型数组(可以用其它容器来使用)
	private int index;// 充当指针
	private static final int SIZE = 5;// 默认栈的初始大小

	// 默认构造器
	public Stack() {
		stack = new Object[SIZE];
		index = -1;
	}

	// 带参数的构造器
	public Stack(int size) {
		if (size < 0) {
			System.out.println("所输入的栈的大小不合法");
			throw new IllegalArgumentException();
		}
		stack = new Object[size];
		index = -1;
	}

	// 入栈操作
	public synchronized void push(E data) {
		if (isFull()) {// 若栈满了,创建一个新栈,容量为当前栈的两倍
			Object[] temp = stack;
			stack = new Object[temp.length * 2];
			System.arraycopy(temp, 0, stack, 0, temp.length);
			System.out.println("当前栈已满,已创建新栈,容量扩充一倍");
		}
		stack[++index] = data;
	}

	// 出栈操作
	public synchronized E poll() {
		if (!isEmpty()) {
			E temp = getTop();
			stack[index--] = null;
			return temp;
		}
		return null;
	}

	// 获取栈顶对象
	public E getTop() {
		return (E) stack[index];
	}

	public boolean isFull() {
		return index >= stack.length - 1;
	}

	public boolean isEmpty() {
		return index == -1;
	}

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		/*
		 * Stack<Integer> s = new Stack<Integer>(3); s.push(2); s.push(4);
		 * s.push(6); System.out.println(s.poll());
		 * System.out.println(s.poll()); System.out.println(s.poll());
		 * System.out.println(s.poll());
		 */
		Stack<String> s = new Stack<String>(3);
		s.push("哈哈1");
		s.push("哈哈2");
		s.push("哈哈3");
		s.push("哈哈4");
		System.out.println(s.poll());
		System.out.println(s.poll());
		System.out.println(s.poll());
		System.out.println(s.poll());
		System.out.println(s.poll());
	}

}

运行结果:

当前栈已满,已创建新栈,容量扩充一倍
哈哈4
哈哈3
哈哈2
哈哈1
null

抱歉!评论已关闭.