当前位置:网站首页>剑指offer09--用两个栈实现队列

剑指offer09--用两个栈实现队列

2022-06-09 09:12:00 星域_03zhan

用两个栈实现一个队列。队列的声明如下,请实现它的两个函数 appendTail 和 deleteHead ,分别完成在队列尾部插入整数和在队列头部删除整数的功能。(若队列中没有元素,deleteHead 操作返回 -1 )
在这里插入图片描述
分析:
这里需要两个栈来实现队列的功能。
栈遵循先进后出的原则,队列遵循先进先出的原则。
用第一个栈来存入元素,这时最先进入的元素在栈底,然后将第一个栈中的元素移动到新栈中,这时最先进入的元素就在栈顶了,然后用第二个栈出栈时,整个执行的顺序就变成了先进先出。

class CQueue{
    
	Stack<Integer> inputStack; //第一个栈
	Stack<Integer> outputStack;//第二个栈
	public CQueue{
    
		inputStack=new Stack();
		outputStack=new Stack();
	}
	public int appendTail(int value){
    
		inputStack.push(value);//push():向栈顶添加元素
	}
	public void deleteHead(){
    
		if(!outputStack.isEmpty()){
    
			return outputStack.pop(); //弹出元素
		}else if(!inputStack.isEmpty()){
    
			while(!inputStack.isEmpty()){
    
				outputStack.push(inputStack.pop);
			}
		}
		return outputStack.isEmpty() ? -1 : outputStack.pop();
	}
}
原网站

版权声明
本文为[星域_03zhan]所创,转载请带上原文链接,感谢
https://blog.csdn.net/qq_45968950/article/details/125017391