一、栈 Stack
1、 栈也是一种线性数据结构
规定只能从栈顶添加元素,也只能从栈顶取出元素
最大特点:先进后出
2.栈的具体实现
Stack< E >
void push(E)
E pop()
E peek()
int getSize()
boolean isEmpty()
3、时间复杂度分析
二、队列(Queue)
1、队列也是一种线性数据结构
只能从一端(队尾)添加元素,从另一端(队首)取出元素
队列是一种先进先出的数据结构
2、队列的实现
Queue
void enqueue(E)
E dequeue()
E getFront()
int getSize()
boolean isEmpty()
3、数组队列的问题
其中dequeue()操作的时间复杂度为O(n),原因时在出队时,数组后面的元素都要进行前移。
为了解决前移的问题,可以使用front记录队首位置,使用tail记录队尾位置,这就是循环队列。
情况3:
4、循环队列的复杂度分析
5、补充:
使用Stream的方式遍历
(1)、将数组转换为stream,有两种方式: Stream.of(arr),Arrays.stream(arr)
(2)、使用Arrays.stream()转换时,如果是包装类,转换后的类型为Stream,基础类型,转换后为IntStream
(3)、使用Stream.of()转换时,如果是包装类,转换后的类型为Stream,基础类型,转换后为Stream<int[]>
6、特殊的数据结构:单调栈
单调栈实际上还是栈,只是利用了一些巧妙的逻辑,使得每次新元素入栈后,栈内元素都保持单调