zoukankan      html  css  js  c++  java
  • 栈的简单理解

    栈(Stack)是一个后进先出(LIFO)的数据结构,直接上图

    简单来说栈只有两种操作,出栈和入栈,直接来看一下java.util.Stack里面的实现。

    class Stack<E> extends Vector<E> 
    

    Stack继承自Vector一个线程安全的容器(动态数组)

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

    入栈操作,调用了Vector的addElement函数,向动态数组末尾添加一个元素

    public synchronized E pop() {
        E       obj;
        int     len = size();
    
        obj = peek();
        removeElementAt(len - 1);
    
        return obj;
    }
    

    出栈操作,移除动态数组末尾的一个元素,removeElementAt同样是Vector的函数,数组的一些操作在之前的数组篇有讲过,重点大都在扩容方面,线程安全的数组就是在相关方法上添加了sychornized。

    总结

    栈的操作比较简单,理解起来也不是很难,也是一个很有用的数据结构,java里官方在实际使用的时候建议使用Deque,因为Vector使用了sychornized所以性能上不是很好,如果使用链表来实现栈的话,增加容量会更方便,具体使用数组还是链表的实现还是要按照实际业务。

  • 相关阅读:
    UVA 12545 Bits Equalizer
    UVA 1610 Party Games
    UVA 1149 Bin Packing
    UVA 1607 Gates
    UVA 12627 Erratic Expansion
    UVA10562-Undraw the Trees(递归)
    UVA10129-Play on Words(欧拉路径)
    UVA816-Abbott's Revenge(搜索进阶)
    UVA1103-Ancient Messages(脑洞+dfs)
    UVA839-Not so Mobile
  • 原文地址:https://www.cnblogs.com/ljsh/p/12819326.html
Copyright © 2011-2022 走看看