剑指offer—编程题7(用两个栈实现一个队列)

来源:互联网 发布:网络评论引导员 编辑:程序博客网 时间:2024/05/17 13:09

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



代码如下:

[java] view plain copy
 print?
  1. public class Test07 {  
  2.     /** 
  3.      * 用两个栈模拟的队列 
  4.      * 用两个核实现一个队列。队列的声明如下,诸实现它的两个函数appendTail和deleteHead, 
  5.      * 分别完成在队列尾部插入结点和在队列头部删除结点的功能。 
  6.      */  
  7.     public static class MList<T> {  
  8.         // 插入栈,只用于插入的数据  
  9.         private Stack<T> stack1 = new Stack<>();  
  10.         // 弹出栈,只用于弹出数据  
  11.         private Stack<T> stack2 = new Stack<>();  
  12.   
  13.         public MList() {  
  14.         }  
  15.           
  16.         // 添加操作,成在队列尾部插入结点  
  17.         public void appendTail(T t) {  
  18.             stack1.add(t);  
  19.         }  
  20.   
  21.         // 删除操作,在队列头部删除结点  
  22.         public T deleteHead() {  
  23.   
  24.             // 先判断弹出栈是否为空,如果为空就将插入栈的所有数据弹出栈,  
  25.             // 并且将弹出的数据压入弹出栈中  
  26.             if (stack2.isEmpty()) {  
  27.                 while (!stack1.isEmpty()) {  
  28.                     stack2.add(stack1.pop());  
  29.                 }  
  30.             }  
  31.   
  32.             // 如果弹出栈中还没有数据就抛出异常  
  33.             if (stack2.isEmpty()) {  
  34.                 throw new RuntimeException("No more element.");  
  35.             }  
  36.   
  37.             // 返回弹出栈的栈顶元素,对应的就是队首元素。  
  38.             return stack2.pop();  
  39.         }  
  40.     }  
  41. }  

0 0
原创粉丝点击