数据结构基础(二) 栈

前言:计算机程序中,数据结构栈(堆栈)是什么?生活中,栈遍处都有,书堆呀、砖堆呀等等,基本上能看到堆起来的,都符合数据结构中堆栈的概念。如下图1、图2。

图1图2

 


栈的定义:栈(stack)又名堆栈,它是一种运算受限的线性表。限定仅在表尾进行插入和删除操作的线性表。这一端被称为栈顶,相对地,把另一端称为栈底。向一个栈插入新元素又称作进栈、入栈或压栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素;从一个栈删除元素又称作出栈或退栈,它是把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素。栈的操作规则:先进后出

 

JDK 中栈的实现

那么我们来看看 java JDK 中栈是如何实现的?在 JDK(java8) 中,栈的实现类是 Stack(java.util.Stack),它的继承关系如下图所示:

其实现源码如下:

package java.util;

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

    //入栈,添加元素,调用的是java.util.Vector#addElement方法
    public E push(E item) {
        addElement(item);

        return item;
    }

    //出栈,移除栈顶元素,调用的是java.util.Vector#removeElementAt方法	
    public synchronized E pop() {
        E       obj;//栈顶元素
        int     len = size();//获取栈的长度

        obj = peek();//获取当前栈顶元素
        removeElementAt(len - 1);//移除栈顶元素

        return obj;
    }

    //查找栈顶元素,调用 java.util.Vector#elementAt 的查询方法
    public synchronized E peek() {
        int     len = size();//获取栈的长度

        if (len == 0)//如果为空栈,抛出异常
            throw new EmptyStackException();
        return elementAt(len - 1);//查找栈顶元素
    }

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

    /**
    搜索在栈中的元素,调用的是java.util.Vector#lastIndexOf(java.lang.Object)
    ====又调用了===>java.util.Vector#lastIndexOf(java.lang.Object, int)方法
    注意:返回对象在此堆栈上从1开始的位置,不是从0开始
    **/
    public synchronized int search(Object o) {
        int i = lastIndexOf(o);

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

    /** use serialVersionUID from JDK 1.0.2 for interoperability */
    private static final long serialVersionUID = 1224463164541339165L;
}

jdk下Stack(java.util.Stack),Java™ Platform Standard Ed. 8说明文档文档如下:

boolean empty()

Tests if this stack is empty.//测试此堆栈是否为空。

E peek()

Looks at the object at the top of this stack without removing it from the stack.//查看位于此堆栈顶部的对象,而不将其从堆栈中移除。

E pop()

Removes the object at the top of this stack and returns that object as the value of this function.//移除此堆栈顶部的对象,并将该对象作为此函数的值返回。

E push(E item)

Pushes an item onto the top of this stack.//将项目推送到堆栈顶部。

int search(Object o)

Returns the 1-based position where an object is on this stack.//返回对象在此堆栈上从1开始的位置

 

 


使用场景:1)如android应用中activity就是栈的实现方式,当退出当前界面时,之前访问的界面就成为了栈顶的界面。2)浏览器中,页面的返回功能也是堆栈的实现。
小结:学习一种数据结构的时候,要对比出其与其他一些数据结构的不同,做到知其然并知其所以然。

Guess you like

Origin blog.csdn.net/u014132947/article/details/91356496