美文网首页
栈的简单介绍和使用(Java)

栈的简单介绍和使用(Java)

作者: dlihasa | 来源:发表于2019-07-28 17:15 被阅读0次

Stack是Vector的一个子类,它实现了一个标准的后进先出的栈。

Stack的继承图:


image.png

Stack的源码:

public class Stack<E> extends Vector<E> {
    
    public Stack() {
    }

    public E push(E item) {
        addElement(item);

        return item;
    }

    public synchronized E pop() {
        E       obj;
        int     len = size();

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

        return obj;
    }

    public synchronized E peek() {
        int     len = size();

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

    public boolean empty() {
        return size() == 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;
}

方法说明:
1、boolean empty(): 测试堆栈是否为空。
2、Object peek( ):查看堆栈顶部的对象,但不从堆栈中移除它。
3、Object pop( ):移除堆栈顶部的对象,并作为此函数的值返回该对象。
4、Object push(Object element):把项压入堆栈顶部。
5、int search(Object element):返回对象在堆栈中的位置,以 1 为基数。

简单实用,代码如下:

package com.algorithm.demo;

import java.util.EmptyStackException;
import java.util.Stack;

public class StackDemo {
     
    static void showpush(Stack<Integer> st, int a) {
        st.push(new Integer(a));
        System.out.println("push(" + a + ")");
        System.out.println("stack: " + st);
    }
 
    static void showpop(Stack<Integer> st) {
        System.out.print("pop -> ");
        Integer a = (Integer) st.pop();
        System.out.println(a);
        System.out.println("stack: " + st);
    }
 
    public static void main(String args[]) {
        Stack<Integer> st = new Stack<Integer>();
        System.out.println("stack: " + st);
        showpush(st, 42);
        showpush(st, 66);
        showpush(st, 99);
        showpop(st);
        showpop(st);
        showpop(st);
        try {
            showpop(st);
        } catch (EmptyStackException e) {
            System.out.println("empty stack");
        }
    }

运行结果:

stack: []
push(42)
stack: [42]
push(66)
stack: [42, 66]
push(99)
stack: [42, 66, 99]
pop -> 99
stack: [42, 66]
pop -> 66
stack: [42]
pop -> 42
stack: []
pop -> empty stack

栈的一个小算法应用:
栈还是有他自己的特点的,他也有很多应用,比如在我们的编译原理的课本上给就说过,给定一个字符串表达式通过两个栈来计算这个表达式的值,比如“1+3*(3+6-1)+6”类似于这种的式子,通过符号和数字的压入和弹出,可以计算这个式子,总之合理利用栈,对我们的帮助是非常大的。

相关博文:
Java中栈的解析---内含源码分析
栈和队列的面试题Java

相关文章

网友评论

      本文标题:栈的简单介绍和使用(Java)

      本文链接:https://www.haomeiwen.com/subject/yxrprctx.html