左神指南第一章_栈和队列

来源:互联网 发布:身份证复制软件3.7 编辑:程序博客网 时间:2024/06/06 20:32

题目一:设计一个有getMin功能的栈

【题目】

实现一个特殊的栈,在实现栈的基本功能的基础上,再实现返回栈中最小元素的操作。

【要求】

1、pop、push、getMin操作的时间复杂度都是O(1)。

2、设计的栈类型可以使用现成的栈结构。

【思路】

使用两个栈stackData和stackMin,一个用来保存当前栈中的元素,另一个用来保存每一步的最小值。

【设计方式一】

如果压入元素比stackMin小,则将元素压入stackMin中,否则不压入。

优点:节省空间。

缺点:弹栈需要额外进行检查,浪费时间。

【代码实现】


【设计方式二】

如果压入元素比stackMin小,则将元素压入stackMin中,否则压入stackMin当前栈顶元素。

优点:节省时间。

缺点:浪费空间。

【代码实现】



题目二:由两个栈组成的队列

【题目】

编写一个类,用两个栈实现队列,支持队列的基本操作(add、poll、peek)。

【思路】

相互倾倒。

【代码实现】



题目三:如何仅用递归函数和栈操作逆序一个栈

【题目】

一个栈依次压入1、2、3、4、5,那么从栈顶到栈底分别为5、4、3、2、1。将这个栈转置后,从栈顶到栈底为1、2、3、4、5,也就是实现栈中元素的逆序,但是只能用递归函数来实现,不能用其他的数据结构。

【思路】

设计两个函数,一个是得到栈底元素并移除。另一个是逆序栈的函数。

【代码实现】


题目四:猫狗队列

【题目】

已知宠物、狗和猫的类。实现一个猫狗队列的结构。

【要求】

1、用户可以调用add方法将cat类或者dog类的实例放入队列中。

2、用户可以调用pollAll方法,将队列中所有的实例按照队列的先后顺序依次弹出。

3、用户可以调用pollDog方法,将队列中dog类的实例按照队列的先后顺序依次弹出。

4、用户可以调用pollCat方法,将队列中的cat类的实例按照队列的先后顺序依次弹出。

5、用户可以调用isEmpty方法,检查队列中是否有dog或cat类的实例。

6、用户可以调用isDogEmpty方法,检查队列中是否还有dog类的实例。

7、用户可以调用isCatEmpty方法,检查队列中是否还有cat类的实例。

【思路】




题目五:用一个栈实现另一个栈的排序

【题目】





原创粉丝点击