栈和队列

概述

栈是一种比较简单的数据结构,常用一句话描述其特性,后进先出。栈本身是一个线性表,但是在这个表中只有一个口子允许数据的进出。

栈的常用操作包括入栈PUSH和出栈POP,对于数据的压入和压出。还有访问栈顶数据、判断栈是否为空和判断栈的大小等。由于栈后进先出的特性,常可以作为数据的临时容器,对数据的顺序进行调控,与其它数据结构相结合可获得许多灵活的处理。

image.png

Stack

stack是栈,它的特性是:先进后出。java工具包中的stack是继承于vector(矢量队列)的,由于vector是通过数组实现的,这就意味着,stack也是通过数组实现的,而非链表。当然,我们也可以将LinkedList当做栈来使用。Stack的继承关系

image.png

package java.util;

public class Stack<E> extends Vector<E> {
    // 版本ID。这个用于版本升级控制,这里不须理会!
    private static final long serialVersionUID = 1224463164541339165L;
// 构造函数
public Stack() {
}

// push函数:将元素存入栈顶
public E push(E item) {
    // 将元素存入栈顶。
    // addElement()的实现在Vector.java中
    addElement(item);
    return item;
}

// pop函数:返回栈顶元素,并将其从栈中删除
public synchronized E pop() {
    E   obj;
    int  len = size();
    obj = peek();
    // 删除栈顶元素,removeElementAt()的实现在Vector.java中
    removeElementAt(len - 1);
    return obj;
}

// peek函数:返回栈顶元素,不执行删除操作
public synchronized E peek() {
    int  len = size();
    if (len == 0)
        throw new EmptyStackException();
    // 返回栈顶元素,elementAt()具体实现在Vector.java中
    return elementAt(len - 1);
}

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

// 查找“元素o”在栈中的位置:由栈底向栈顶方向数
public synchronized int search(Object o) {
    // 获取元素索引,elementAt()具体实现在Vector.java中
    int i = lastIndexOf(o);
    if (i >= 0) {
        return size() - i;
    }
    return -1;
}
}
复制代码

队列

队列是栈的兄弟结构,与栈的后进先出相对应,队列是一种先进先出的数据结构,意思就是,队列的数据存储是如同排队一般,先存入的数据先被压出,常与栈一同配合,可发挥最大实力。

image.png

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享