java的栈和队列
栈
基本概念
- 栈是一种只能在同一端进行插入和删除(栈顶top)的线性表,运算受限。
- 进栈/人栈用push, 退栈或出栈用pop。
- boolean empty()
- void push(E e) (和add()方法效果相同)
- E pop():出栈并返回栈顶元素
- E peek():返回栈顶元素(不出栈)
栈的实现方式
顺序栈和链栈
1、顺序栈:基于数组实现
- 定义一个顺序栈:Stack stack = new Stack<>(), java中Stack是继承Vector类。但需要注意java中栈常用deque而很少采用Stack,因为效率不高。可以上进上出,上进下出,甚至下进上出
2、链栈:用LinkedList
ArrayDeque与LinkList区别:
ArrayDeque:
- 数组结构
- 插入元素不能为null
- 无法确定数据量时,后期扩容会影响效率
LinkList:
- 链表结构
- 插入元素能为null
- 无法确定数据量时,有更好表现
232题:用栈实现队列
使用栈实现队列的下列操作:
push(x) – 将一个元素放入队列的尾部。
pop() – 从队列首部移除元素。
peek() – 返回队列首部的元素。
empty() – 返回队列是否为空。
思考
1、用两个stack来实现。主要在于取元素的操作,对于队列来说,取元素是取出最上面一个,用栈来实现,需要先将一个栈中的元素放入另一个再取出。
class MyQueue {
Stack<Integer> stackIn;
Stack<Integer> stackOut;
public MyQueue() {
stackIn &