栈模型

栈(stack)是限制插入和删除只能在一个位置上进行的表,该位置是表的末端,叫作 栈的顶(top)。对栈的基本操作有push(进栈)和pop(出栈),前者相当于插入,后者则是删除最后插入的元素。最后插入的元素可以通过使用top例程在执行pop之前进行考查。对空栈进行的pop或top一般被认为是栈中的一个错误。另一方面,当运行push时空间用尽是一个实现限制,但不是错误。

栈有时又叫做LIFO(后进先出)表。下图中描述的模型只象征着push是输入操作而pop和top是输出操作。普通的清空栈的操作和判断是否空栈的测试都是栈的操作指令系统的一部分,但是,我们对栈所能够做的,基本上也就是push和pop操作。

下图表示在进行若干操作后的一个抽象的栈。一般的模型是,存在某个元素位于栈顶,而该元素是唯一的可见元素。

栈的实现

public class Stack<E> extends Vector<E> {
    
    //创建一个空栈
    public Stack(){
    }

    //push操作
    public E push(E item){
        addElement(item);

        return item;
    }

    //pop操作
    public syncrhonized E pop(){
        E obj;
        int len = size();

        obj = peek();
        removeElementAt(len - 1);

        return obj;
    }

    //查看此栈顶部的对象,而不将其从栈中删除。
    public syncrhonized E peek(){
        int len = size();

        if(len == 0){
            throw new EmptyStackException();
        }
        return elementAt(len - 1);
    }

    //是否为空
    public boolean empty(){
        return size() == 0;
    }

    //查找某个对象
    public syncrhonized int search(Object o){
        int i = lastIndexOf(o);

        if(i >= 0){
            return size() - i;
        }
        return -1;
    }
}

参考数据:
《数据结构与算法分析》

posted @ 2019-01-19 10:55  Tu9oh0st  阅读(240)  评论(0编辑  收藏  举报