【剑指Offer】【栈&队列】9_用两个栈实现一个队列
题目:用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。
A:栈是先进后出的数据结构,队列是先进先出的数据结构。
入队push:直接压入栈1
出队pop:若栈2有元素,则取栈顶
若栈2无元素,将栈1的元素逐一压入栈2中,使得栈顶元素到了栈低,栈低元素到了栈顶,实现了队列的先进先出特性
class Solution { public: void push(int node) { stack1.push(node); } int pop() { //栈2为空 if(stack2.empty()) { //压栈 while(!stack1.empty()) { int tmp = stack1.top(); stack2.push(tmp); stack1.pop(); } } //没有元素则删除失败 if(stack2.empty()) { return -1; } int data = stack2.top(); stack2.pop(); return data; } private: stack<int> stack1; stack<int> stack2; };
相关题目:
最小栈(实现一个最小栈,有三种操作,min:得到栈中的最小值,push:在栈顶插入一个元素,pop:弹出栈顶元素,使这三种操作的时间复杂度都是O(1))
构造队列
队列最小修改(已知一个奇怪的队列,这个队列中有n个数,初始状态时,顺序是1,2,3,4,…n,是1-n按顺序排列。这个队列只支持一种操作,就是把队列中的第i号元素提前到队首(1<i<=n),如有4个元素,初始为1,2,3,4,可以将3提前到队首,得到3,1,2,4 。 现在给出一个经过若干次操作之后的序列,请你找出这个序列至少是由原序列操作了多少次得到的。)