一、栈
- 1、栈也是一种线性结构
- 2、相比数组,栈对应的操作是数组的子集
- 3、只能从一端(栈顶)添加元素,也只能从这一端(栈顶)取出元素
- 4、栈是一种后进先出的数据结构(Last In First Out【LIFO】)
二、队列
- 1、队列也是一种线性结构
- 2、相比数组,队列对应的操作是数组的子集
- 3、只能从一端(队尾)添加元素,只能从另一端(队首)取出元素
出队要让队列"数组" 不断往前移动一位, O(n) 复杂度
1、数组队列的基本实现代码
- 11、循环队列引入front、tail头尾的概念管理队列,不用整体往前移动一位操作
- a、初始状态front和tail是重合在队列开始0位置;front==tail,队列为空
- b、入队 tail++,出队front++
- c、留空一个空间(浪费一个空间),下图表示满队( (tail + 1) % capacity == front )
- d、resize队列扩容时,队首元素重新放到新队列0的位置上
private void resize(int newCapacity){ E[] newData = (E[])new Object[newCapacity + 1]; for(int i = 0 ; i < size ; i ++) { // 原队首元素重新放到新队列0的位置上 newData[i] = data[(i + front) % data.length]; } data = newData; front = 0; tail = size; // 队尾标识指向size大小的位置 }