牛客初级算法3

用数组结构实现大小固定的队列和栈

1.实现栈结构:栈结构是先进后出的,只需要一个数组和一个记录位置的变量size,当进来一个元素,size就++,出去一个元素size就--。

2.实现队列结构:相对栈结构要难搞一些,队列的先进先出的,需要一个数组和三个变量,size记录已经进来了多少个元素,in记录刚进来的元素应该放在哪个位置,out表示用户要求弹出的元素所在的位置。size的作用不止于此,它还是in与out 的操作的关键信息,使得in与out解耦,避免的很多的麻烦,好像书本讲的是没有size这个变量的。当in或者out达到底部的时候就跳回0处。

实现一个特殊的栈, 在实现栈的基本功能的基础上, 再实现返
回栈中最小元素的操作。
【要求】
1. pop、 push、 getMin操作的时间复杂度都是O(1)。
2. 设计的栈类型可以使用现成的栈结构。

  • 思路:设计两个栈,一个dataStack,一个minStack。起初,第一个入dataStack的时候,minStack中null,也入,以后的newNum,dataStack正常入栈,minStack用栈顶元素num和newNum比较,如果num小于newNum,minStack重复入num,如果num 大于newNum,入新元素,即newNum。就要保证两个栈中元素个数一致。getMin的时候,minStack调用peek函数,只返回,不弹出。真正的弹出要调用dataStack的pop函数,这个时候minStack也要pop一个,只不过不return而已


如何仅用队列结构实现栈结构?
如何仅用栈结构实现队列结构?

仅用队列实现栈

    • 思路 
      一个队列只存放数据data,一个队列只用来辅助保持数据; 
      比如1,2,3,4,5入了data队列,当要取出元素的时候,把1,2,3,4存到help里,这样队列data就只有一个5了~然后data.poll返回。然后在互换data和help的引用,使得原来有四个数据的help队列为data,新换完的help队列没内容。每次add数据只操作data队列,取出也是,只不过需要help辅助存储

仅用栈实现队列

              思路:用两个栈,一个是push栈,一个是pop栈,将数据压入push栈,要取数据时,将push栈中的数据全部倒入pop栈中,最后将栈顶数据弹出,且只有在pop栈为空时,才能倒

         

猜你喜欢

转载自www.cnblogs.com/liaohong123/p/9342475.html