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

stack1专门用于插入数据,stack2专门用于删除数据,如果stack2没有数据了,则将stack1的数据转移到stack2中,直到两个栈都没有数据。 
测试用例:
1)往空的队列里添加、删除元素
2)往非空的队列里添加、删除元素
3)连续删除元素直到队列为空
 
Queue类:
package com.yyq;

import java.util.Stack;

/**
* Created by Administrator on 2015/9/8.
*/
public class Queue<T> {
private T value;
public static final Stack stack1 = new Stack();
public static final Stack stack2 = new Stack();
public T getValue() {
return value;
} public void setValue(T value) {
this.value = value;
} public Queue(){
} public void appendTail(T value){
stack1.push(value);
} public T deleteHead(){
T temp;
if (stack2.size() <= 0){
while(stack1.size() > 0){
temp = (T)stack1.pop();
stack2.push(temp);
}
}
if (stack2.size() == 0){
System.out.println("The Queue is empty!!");
}
return (T)stack2.pop();
}
}

实现类:

package com.yyq;

/**
* Created by Administrator on 2015/9/8.
*/
public class QueueWithTwoStacks {
void Test(char actual, char expected)
{
if(actual == expected)
System.out.println("Test passed.\n");
else
System.out.println("Test failed.\n");
} public static void main(String args[]){
QueueWithTwoStacks queueWithTwoStacks = new QueueWithTwoStacks();
Queue<Character> queue = new Queue<Character>();
queue.appendTail('a');
queue.appendTail('b');
queue.appendTail('c');
queue.appendTail('d');
queue.appendTail('e');
queue.appendTail('f'); char head = queue.deleteHead();
queueWithTwoStacks.Test(head, 'a'); head = queue.deleteHead();
queueWithTwoStacks.Test(head, 'b'); queue.appendTail('g');
head = queue.deleteHead();
queueWithTwoStacks.Test(head, 'c'); queue.appendTail('h');
head = queue.deleteHead();
queueWithTwoStacks.Test(head, 'd'); head = queue.deleteHead();
queueWithTwoStacks.Test(head, 'e');
}
}
 
输出结果:
Test passed.
 
Test passed.
 
Test passed.
 
Test passed.
 
Test passed.
 
Process finished with exit code 0

P59、面试题7:用两个栈实现队列的更多相关文章

  1. 【剑指offer】面试题 9. 用两个栈实现队列

    面试题 9. 用两个栈实现队列 题目描述 题目:用两个栈来实现一个队列,完成队列的Push和Pop操作. 队列中的元素为int类型. 解答过程 import java.util.Stack; publ ...

  2. 剑指offer编程题Java实现——面试题7用两个栈实现队列

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

  3. 剑指Offer-【面试题07:两个栈实现队列】

    package com.cxz.question7; import java.util.Stack; /** * 用两个栈实现一个队列.队列的声明如下,请实现它的两个函数appendTail 和del ...

  4. 剑指Offer:面试题7——用两个栈实现队列(java实现)

    题目描述:用两个栈来实现一个队列,完成队列的Push和Pop操作. 队列中的元素为int类型. 首先定义两个栈 Stack<Integer> stack1 = new Stack<I ...

  5. 剑指offter-面试题7.用两个栈实现队列

    题目.用两个栈实现一个队列.队列的声明如下,请实现它的两个函数appendTail和deleteHead 分别完成在对尾插入节点和在队头删除节点. 该队列类模板如下: template <typ ...

  6. 面试题07_用两个栈实现队列——剑指offer系列

    题目描写叙述: 用两个栈实现一个队列. 队列的声明例如以下,请实现它的两个函数appendTail 和 deleteHead.分别完毕在队列尾部插入结点和在队列头部删除结点的功能. 解题思路: 栈的特 ...

  7. 《剑指offer》面试题7 用两个栈实现队列 Java版

    书中方法:队列是先进先出的,栈是先进后出的,试想把一串数压入A栈,接着一个个出栈并压入B栈,便会完成"头在下"到"头在上"的转变.B栈内还有元素时,直接出栈表示 ...

  8. 【剑指Offer】面试题09. 用两个栈实现队列

    题目 用两个栈实现一个队列.队列的声明如下,请实现它的两个函数 appendTail 和 deleteHead ,分别完成在队列尾部插入整数和在队列头部删除整数的功能.(若队列中没有元素,delete ...

  9. 《剑指offer》面试题09. 用两个栈实现队列

    问题描述 用两个栈实现一个队列.队列的声明如下,请实现它的两个函数 appendTail 和 deleteHead ,分别完成在队列尾部插入整数和在队列头部删除整数的功能.(若队列中没有元素,dele ...

  10. 《剑指offer》面试题7—用两个栈实现队列

    题目:给出队列声明,要求实现AppendTail和DeleteHead函数. template <typename T>class CQueue{public: void AppendTa ...

随机推荐

  1. [转]WINDOW进程间数据通讯以及共享内存

    1.引言 在Windows程序中,各个进程之间常常需要交换数据,进行数据通讯.WIN32 API提供了许多函数使我们能够方便高效地进行进程间的通讯,通过这些函数我们可以控制不同进程间的数据交换,就如同 ...

  2. Ubuntu、Sql Server卸载心得

    这几天真是搞得亏大了! 首先是卸载Ubuntu,直接在Windows下格式化那个盘了,这就出岔子了……然后越来越糟糕,最后弄得一个系统都没有了……然后重装系统…… 然后装VS和Sql Server,因 ...

  3. MySQ binlog三种模式

    MySQ binlog三种模式及设置方法 1.1 Row Level  行模式 日志中会记录每一行数据被修改的形式,然后在slave端再对相同的数据进行修改 优点:在row level模式下,bin- ...

  4. stl::find,find_if,find_if_not

    //满足特定条件下的实现,回调函数template<class InputIt, class UnaryPredicate> InputIt find_if(InputIt first, ...

  5. DTCMS更改图片相册上传图片类型,手机上传图片相册

    /admin/js/uploader.js 中 filetypes: "jpg,jpge,png,gif", //文件类型 改为 filetypes: "jpg,jpeg ...

  6. linux下挂载移动硬盘ntfs格式

    http://jingyan.baidu.com/article/f96699bba93dce894e3c1bec.html fdisk -l安装后 使用命令mount -t ntfs-3g /dev ...

  7. web一次请求的流程

    1.客户端(浏览器输入网址)请求 2.发送http协议到web服务器(nginx),检测请求类别,如果时纯静态页面,则返响应返回给客户端. 3.如果有动态脚本(php语法)启动fastcgi进程,用解 ...

  8. SQL Server— 存在检测、建库、 建表、约束、外键、级联删除

    /******************************************************************************** *主题: SQL Server- 存 ...

  9. RabbitMQ基础总结

    MQ全称为Message Queue, 消息队列(MQ)是一种应用程序对应用程序的通信方法.应用程序通过读写出入队列的消息(针对应用程序的数据)来通信,而无需专用连接来链接它们.消 息传递指的是程序之 ...

  10. sybase下convert函数第三个参数(时间格式)

    convert(varchar(10),字段名,转换格式) 比如:1.select user_id,convert(varchar(10),dayts,11) as dates from tb_use ...