栈与队列(2)
来源:互联网 发布:瓦尔登湖 知乎 编辑:程序博客网 时间:2024/06/05 07:13
案例1
实现一个特殊栈,在实现基础栈功能基础上,能返回栈中最小元素的操作getmin
要求:
1.pop、push、getMin操作时间复杂度都是O(1)。
2.设计的栈类型可以使用现成的栈结构。
方法1:两个栈,一个栈正常stackData,一个栈stackmin用于记录最小值
压入效果如图,stackmin只压入比栈顶小的值。
弹出的步骤:
这样stackmin在弹出过程维持着最小值。
方法二:
压入方式:
弹出数据时,两个栈弹出即可。
比较:方案1稍费时间,略省时间;方案2稍省空间,略费时间;
案例2
编写一个类,只能用两个栈结构实现队列,支持队列的基本操作(add、poll、peek)
解:两个栈,一个压入栈(只负责压入),一个弹出栈(只负责弹出)。
切换操作时,需两栈数据倒入
注意:每次倒数据,一定要一次性倒完。
案例3
实现一个栈的逆序,但只能用递归函数和这个栈本身的操作来实现,而不能自己申请另外的数据结构
代码一:
public int get(Stack<Integer> stack){ int result=stack.pop(); if(stack.isEmpty()){ return result; } else{ int last=get(stack); stack.push(result); return last; }}
该函数功能为,移除栈顶元素并返回。
利用代码1,完成这题
代码2:
public void reverse(Stack<Integer> stack){ if(stack.isEmpty()){ return; } int i=get(stack); reverse(stack); stack.push(i);}
案例4
想将一个整型栈从顶到底按从大到小排序,只许申请一个栈,除此之外可以申请新的变量,但不能申请额外数据结构,如何实现?
申请个help栈,原栈stack
1.stack弹出栈顶,压入help中
2.stack弹出栈顶,与help栈顶比较,若小,压入help。若大,将help元素逐渐弹出,重新压回stack,然后把该元素压入help。
3.重复2,直到stack空,然后把help完全压入stack,结束。
阅读全文
0 0
- 栈与队列(2)
- 栈与队列->队列
- 栈、队列与优先队列
- 数据结构学习-栈与队列(2)
- JavaScript数据结构(2):栈与队列
- 数据结构笔记2---栈与队列
- 栈与队列
- 堆与栈 队列
- 队列与栈
- 16 栈与队列
- 栈与队列
- 【数据结构】栈与队列
- 栈与队列
- 栈与队列....
- 栈与队列
- 栈与队列专题
- 栈与队列
- CC_3_栈与队列
- HDU5818 Joint Stacks
- 【树状数组--求逆序数】poj2481 Cows
- gradle的使用
- Java创建线程的两个方法
- shell脚本编程-脚本语法-条件测试
- 栈与队列(2)
- 新手个人的玩家移动,视角等控制(不定期完善)
- Xcode8 打包上传AppStore无法构建版本
- 去掉wordpress功能中的登录,文章,评论,.org链接
- JAVA 8 新时间 API java.time 使用简介
- Android初学者Eclispe环境启动遇This Android SDK requires Android Developer Toolkit version 23.0.0 or above
- 黑马商城项目(四)
- php $_SERVER
- 剑指offer---复杂链表复制