【题目】
【分析】 设置两个栈。s1和s2。 (1)入队 当入队的时候,就放到s1中。 (2)出队 出队的时候,因为是拿出队首元素。也就是S1栈底元素。所以可以先把S1的数据依次出栈,然后放到S2。这样S2的栈顶元素就是S1的栈底元素。然后使用s2.pop()即可。拿完之后再放回到s1中。
(3)peek() 同出队操作。只不过s2使用peek()方法。
(4)empty() 判断s1是否为空即可。
代码:
结果:
效果一般般。
【改进】 上面的效果一般般。我们发现是因为出栈和peek()操作,把S1中的数据放入到S2中,然后再把S2中的放到S1中,来回倒腾数据。能不能改进呢? 其实放到S2中的数据是可以不放回去的。 比如: 出栈的时候,拿掉a,再出栈的时候拿掉b。不必每次都把S2中的元素先放回S1中。 改进之后,四个操作分别为: (1)入队。直接放到s1中。 (2)出队。S2弹栈。当s2空了之后,如果s1中还有数据,要先把s1中的数据倒到s2中。(只有当s2空了之后,才能把s1的数据倒过来,否则顺序就乱了。)
(3)peek() 跟出队相同。
(4)判空。 只有当s1和s2都为空才空。
代码:
结果:
|