快排
队列和栈的相互转换
队列和栈的相互转换常见的就是 用两个栈实现队列或者用两个队列实现一个栈,其实这种题目个人感觉没有什么实际意义,最近在思考这个问题的时候感觉有一些数学或者位运算的影子在里面,但是因为个人数学能力有限只是觉得应该是可以用证明的。
两个栈实现一个队列,
这个比较好理解 栈可以理解改变进出顺序 为取反~操作 两个栈 那么 进行两次取反就可以返回原来的顺序 ,实际中也是这么搞的
数据流向:insert->stackA->stackB->pop 因为stack的原理 经过两次取反 最后的数序还是 FIFO 成为队列。
两个队列实现一个栈
这个其实我卡住了很久,最后也还是去搜了下攻略,但是觉得这种效率很低 ,这里也要批评下自己先实现再优化,不要再开始给自己设限制条件。
(队列是正流程 ,如何用两个正的搞一个逆的这个卡在这里了,先说解决方案吧,这个我觉得我还没有消化 至少没有自己的理解)
就是每次新进元素的时候 进一个空队列,然后把另外的队列里面的出队列追加到这个的后面这样每一个元素在队列里面就实现了ab->ba的转换
举个例子: