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推荐
作者:
Chris Wang
出处:
http://chriswang.cnblogs.com/
文章版权归本人所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。