栈的简单理解
Posted ljsh
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了栈的简单理解相关的知识,希望对你有一定的参考价值。
栈
栈(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所以性能上不是很好,如果使用链表来实现栈的话,增加容量会更方便,具体使用数组还是链表的实现还是要按照实际业务。
以上是关于栈的简单理解的主要内容,如果未能解决你的问题,请参考以下文章
剑指 Offer 31. 栈的压入弹出序列无取巧,易于理解!