首页 > 试题广场 >

手写代码:两个栈实现一个队列

[问答题]
import java.util.Stack;

public class Solution {
    Stack<Integer> stack1 = new Stack<Integer>();
    Stack<Integer> stack2 = new Stack<Integer>();
    
    public void push(int node) {
        stack1.push(node);
    }
    
    public int pop() {
        if(stack2.isEmpty()){
            while(!stack1.isEmpty()){
                int node=stack1.pop();
                stack2.push(node);
            }
        }
        return stack2.pop();
    }
}

发表于 2020-04-15 22:02:55 回复(0)
template<class T>
class Queue
{
public:
	void Push(const T& node)   // 模拟进队
	{
		stack1.push(node);
	}
	void Pop()   // 模拟出队
	{
		if (stack1.empty() && stack2.empty())  // 说明此时队列为空
		{
			cout << "此时队列为空" << endl;
		}
		if(!stack2.empty())   // stack2 不为空,stack2出队列
		{
			stack2.pop();
		}
		else  // stack2 为空,stack1中元素入栈到stack2
		{
			while (stack1.size() > 0)
			{
				stack2.push(stack1.top());
				stack1.pop();
			}
			stack2.pop();  //stack2进栈完成,模拟出队
		}	
	}
	int GetFront()   // 对头就是栈顶,用前判断队列是否为空
	{
		if (stack2.empty())
		{
			while (stack1.size() > 0)
			{
				stack2.push(stack1.top());
				stack1.pop();
			}
		}
		return stack2.top();    
	}
private:
	stack<T> stack1;
	stack<T> stack2;
};

发表于 2021-03-17 15:21:28 回复(0)
返回有个错了
发表于 2019-09-05 12:00:44 回复(0)