剑指offer05--用两个栈来模拟队列

题目:用两个栈实现一个队列。队列的声明如下,请实现它的两个函数appendTail 和deleteHead,分别完成在队列尾部插入结点和在队列头部删除结点的功能。

哈哈,终于算是自己编写了一个程序了,虽然这个程序比较简单,估计一下

其思想就是两个队列stack1和stack2

stack1负责接收push的元素,stack2将从stack1中pop出的元素依次接收并pop出

这样次序就相当于一个队列的次序了

package 剑指offer;
import java.util.*;
/*题目:用两个栈实现一个队列。队列的声明如下,
 * 请实现它的两个函数appendTail 和deleteHead,
 * 分别完成在队列尾部插入结点和在队列头部删除结点的功能。*/
public class Test07 {
	public static void main(String args[]){
		// 创建队列并依次添加元素1/2/3
		List<Integer> quene = new List<Integer>();
		for(int i = 0; i < 3; i++){
			quene.appenTail(i);
		}
		
		// 应该是依次删除1/2
		quene.deleteHead();
		quene.deleteHead();
		
		// 添加元素4
		quene.appenTail(4);
		
		// 依次删除元素3/4
		quene.deleteHead();
		quene.deleteHead();
	}
	
	public static class List<T>{
		Stack<T> stack1 = new Stack<T>();
		Stack<T> stack2 = new Stack<T>();
		
		public void appenTail(T obj){
			//改函数用于在尾部向队列添加数据
			while(!stack2.isEmpty()){
				// 如果stack2中国有元素,那么先将元素移动到stack1中
				T temp = stack2.pop();
				stack1.push(temp);
			}
			stack1.push(obj);
		}
		
		public void deleteHead(){
			while(!stack1.empty()){
				T temp = stack1.pop();
				stack2.push(temp);
			}
			System.out.println("删除元素:"+stack2.pop());	
			//改函数用于在头部删除数据
		}
	} 
}

故不积跬步,无以至千里


你可能感兴趣的:(栈,队列,stack,quene)