栈的概念:
队列的概念:
使用栈实现队列,最主要的问题是,出队时要弹出栈底的数据1,使用双栈来解决这个问题,st_push里面压入了12345,要弹出1 ,先把st_push的数据压入 st_pop, 由于栈 后进先出的性质,全部压入之后,就变成了54321,此时1就是st_pop的栈顶数据。通过st_pop就可以移除或返回“队列”的开头元素,从而实现pop() peak()两个功能。一个栈st_push用于从“队尾”压入数据,另一个栈st_pop用于从“队头”弹出数据。
empty()功能 return st_push.empty()&&st_pop.empty() 即可
push()功能, st_push.push(x)即可
使用队列实现栈,难点在于“出栈”时要弹出队列最后面的元素,也可以使用双队列实现
pop()实现
这两个队列中,一个用于存数据非空,另一个用来导数据,不用的时候就是空队列。要实现“出栈”也就是要弹出队尾的1,可以把队列q1的元素压入q2,之留下最后一个元素1,可以用while( q1.size()>1)控制,循环结束之后就只剩下最后一个元素1了,这样q1就能弹出/返回队列中的最后一个元素了。 总的来说就是把非空的链表里的元素导入空链表,只剩下最后一个元素时停止导入,返回值并弹出即可
top()实现
哪个队列非空,就return 这个队列的 back()
push()实现
往非空的队列push即可
empty()
return q1.empty()&&q2.empty()