如何实现栈和队列?[数据结构与算法][Java]
如何实现栈和队列?[数据结构与算法][Java]
Jayfar栈也是一种线性结构
- 相比数组,栈相应的操作是数组的子集
- 只能从一端添加元素,也只能从一端取出元素
这一端称为栈顶 - 栈是一种后进先出的数据结构
栈 Stack
栈也是一种线性结构
相比数组,栈相应的操作是数组的子集
只能从一端添加元素,也只能从一端取出元素
这一端称为栈顶
栈是一种后进先出的数据结构
无处不在的Undo操作(撤销)
栈的应用
- 程序调用的系统栈
系统调用A,B,C三个函数,调用时依次让A,B,C入栈。开始让A入栈然后中断,开始执行B;指向函数C时,B函数中断,C开始执行
栈的实现
Interface Stack<E> ArrayStack<E>
- Void push(E)(添加元素) (implement)
- E pop()(取出元素)
- E peek()(查看栈顶元素)
- int getSize() (查看多少元素)
- boolean isEmpty() (查看是否为空)
- 从用户的角度看,支持这些操作就好
- 具体底层实现,用户不关心
- 实际底层有多种实现方式
我们在动态数组的基础上实现一个栈:
1 | //在动态数组条件下,我们实现一个栈非常方便了 |
1 | package cn.shuzu; |
1 | //我们的输出: |
栈的另一个应用:括号匹配
- 括号匹配 - 编译器
1 | package cn.shuzu; |
队列 Queue
- 队列也是一种线性结构
- 相比数组,队列对应的操作是数组的子集
- 只能从一端(队尾)添加元素,只能从另一端(队首)取出元素
- 队列是一种先进先出的数据结构(先到先得)
Queue<E>
- void enqueue(E) (入队)
- E dequeue() (出队)
- E getFront()(查看队首元素)
- int getSize() (查看多少元素)
- boolean isEmpty() (是否为空)
1 | package cn.shuzu; |
1 | package cn.shuzu; |
循环队列的实现
- front == tail 队列为空
- (tail + 1) % capacity == front 队列满
1 | package cn.shuzu; |
1 | //打印输出 |
循环队列和数组队列的比较
我们用十万次入队和出队操作的时间进行比较
1 | package cn.shuzu; |
评论
匿名评论隐私政策
✅ 你无需删除空行,直接评论以获取最佳展示效果