您的位置:首页 > 理论基础 > 数据结构算法

数据结构复习:栈-Java数组实现

2009-11-27 16:38 246 查看
  栈是一种"后进先出(LIFO)"的数据结构.最近压入的数据项总是位于栈顶的.

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

 

/**
* Stack接口
* @author Chris Wang
*
* @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,下面是代码:

Code

/**

* 一个基于数组的栈实现


* @author Chris Wang  
* @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;

    }

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: