Java数组栈ArrayStack


作者: wangding263  链接:http://wangding263.javaeye.com/blog/254057  发表时间: 2008年10月16日

声明:本文系JavaEye网站发布的原创博客文章,未经作者书面许可,严禁任何网站转载本文,否则必将追究法律责任!

  栈是一种"后进先出(LIFO)"的数据结构.最近压入的数据项总是位于栈顶的.

   首先我们先定义一个Stack Interface,我们把他定义成泛型的.

/**
 * Stack接口
 * @author 鼎鼎
 *
 * @param <E>
 */
public interface Stack<E> {
    /**
       * 判断栈是否为空
     * @return
       */     
 public boolean isEmpty();
      /**
       * 返回栈中元素个数
       * @return
       */
      public int size();
      /**
       * 入栈
       * @param target
       * 
       */
      public void push(E target);
      /**
       * 出栈
       * @return E
       */
      public E pop();
      /**
       * 返回栈顶元素,并不出栈
       * @return
       */
      public E top();
      
     
}

 

 

然后进行利用Java中的数组实现ArrayStack,下面是代码:

/**
 * 一个基于数组的栈实现
 * 
 * @author 鼎鼎  
 * @param <E>
 */
public class ArrayStack<E> implements Stack<E> {
	/**
	 * 表示要存入栈里的元素
	 */
	private E[] data;

	/**
	 * 表示当前栈的容量
	 */
	private int size = 0;

	public ArrayStack() {
		data = (E[]) new Object[10];
	//一开始的时候 栈中元素为空
		size = 0;
	}

	public int size() {
		return size;

	}

	public boolean isEmpty() {
		return size < 1;
	}

	/**
	 * 返回栈顶元素,但是不出栈
	 */
	public E top() {
		if (isEmpty()) {

			throw new RuntimeException("链表为空!!");
		}
		return data[size-1];
	}

	/**
	 * 出栈
	 */
	public E pop() {
		if (isEmpty()) {

			throw new RuntimeException("链表为空!!");
		}
		// 先保存那个栈顶元素
		E element = data[size - 1];
		// 然后清空栈顶元素,
		data[size] = null;
		//栈中元素减少一个
		size--;
		return element;
	}

	/**
	 * 入栈的时候先判断 栈是否已满,如栈满就扩充
	 */
	public void push(E target) {
		if(target==null)
			throw new RuntimeException("插入的元素不可为NULL");
		if (isFull()) {
			enlarge();

		}
		size++;
		// 往栈顶添加一个元素
		data[size - 1] = target;
		

	}

	/**
	 * 扩充数组长度 注意:一般是判断栈满以后 才扩充 扩充为原数组的两倍长度
	 */
	public void enlarge() {
		E[] newData = (E[]) new Object[data.length * 2];
		for (int i = 0; i < size; i++) {
			newData[i] = data[i];

		}
		data = newData;

	}

	/**
	 * 如果数组的长度 已经等于 放入栈中的元素数量 则表示 栈已经满了
	 * 
	 * @return
	 */
	public boolean isFull() {

		return data.length == size;
	}

}

  



已有 0 人发表留言,猛击->>这里<<-参与讨论


JavaEye推荐



posted @ 2008-10-16 22:15  Chris Wang  阅读(2639)  评论(1编辑  收藏  举报