用两个栈实现队列(C++ 和 Python 实现)
2017-10-15 19:43
651 查看
(说明:本博客中的题目、题目详细说明及参考代码均摘自 “何海涛《剑指Offer:名企面试官精讲典型编程题》2012年”)
进一步详细说明:
在上述队列的声明中可以看出,一个队列包含两个栈 stack1 和 stack2,因此这道题的意图是要求我们操作这两个 “先进后出” 的栈实现一个 “先进先出” 的队列 CQueue。
具体来说,使用两个栈实现一个队列,可以考虑用第一个栈(stack1)存放输入的元素(队尾元素),从第二个栈(stack2)获取队头元素。当第一栈(stack1)为空时,将第二个栈(stack2)中的全部元素依次弹出,再依次压入第一个栈中。其过程如图 2.8 所示,
View Code
7. 参考代码下载
项目 07_QueueWithTwoStacks 下载: 百度网盘
何海涛《剑指Offer:名企面试官精讲典型编程题》 所有参考代码下载:百度网盘
题目
用两个栈实现一个队列。队列的声明如下,请实现它的两个函数 appendTail 和 deleteHead,分别完成在队列尾部插入结点和在队列头部删除结点功能。template <typename T> class CQueue { public: CQueue(void); ~CQueue(void); void appendTail(const T& node); T deleteHead(); };
进一步详细说明:
在上述队列的声明中可以看出,一个队列包含两个栈 stack1 和 stack2,因此这道题的意图是要求我们操作这两个 “先进后出” 的栈实现一个 “先进先出” 的队列 CQueue。
算法设计思想
因为栈是后进先出的数据结构,当将数据依次压入第一个栈后,再依次从这个栈弹出,压入第二个栈,如果此时从第二个栈中获取数据,表现正好像一个 “先进先出” 的队列数据结构。具体来说,使用两个栈实现一个队列,可以考虑用第一个栈(stack1)存放输入的元素(队尾元素),从第二个栈(stack2)获取队头元素。当第一栈(stack1)为空时,将第二个栈(stack2)中的全部元素依次弹出,再依次压入第一个栈中。其过程如图 2.8 所示,
// QueueWithTwoStacks.cpp : Defines the entry point for the console application. // // 《剑指Offer——名企面试官精讲典型编程题》代码 // 著作权所有者:何海涛 #include "stdafx.h" #include "Queue.h" void Test(char actual, char expected) { if(actual == expected) printf("Test passed.\n"); else printf("Test failed.\n"); } int _tmain(int argc, _TCHAR* argv[]) { CQueue<char> queue; queue.appendTail('a'); queue.appendTail('b'); queue.appendTail('c'); char head = queue.deleteHead(); Test(head, 'a'); head = queue.deleteHead(); Test(head, 'b'); queue.appendTail('d'); head = queue.deleteHead(); Test(head, 'c'); queue.appendTail('e'); head = queue.deleteHead(); Test(head, 'd'); head = queue.deleteHead(); Test(head, 'e'); return 0; }
View Code
7. 参考代码下载
项目 07_QueueWithTwoStacks 下载: 百度网盘
何海涛《剑指Offer:名企面试官精讲典型编程题》 所有参考代码下载:百度网盘
参考资料
[1] 何海涛. 剑指 Offer:名企面试官精讲典型编程题 [M]. 北京:电子工业出版社,2012. 58-62.相关文章推荐
- C++两个队列实现一个栈
- 程序员面试宝典之数据结构基础----C++两个栈实现一个队列功能
- 程序员面试题精选(48):两个堆栈模拟队列c++代码实现
- 两个栈实现队列+两个队列实现栈----C++
- C++两个栈实现队列
- C++:利用两个队列实现栈的操作
- 用两个栈实现队列 C++实现
- 【C++】两个栈实现一个队列
- C++两个栈实现一个队列和两个队列实现一个栈
- 两个栈来实现一个队列的C++代码
- 《剑指offer》:[7]两个队列实现栈的C++代码实现
- 利用两个栈实现一个队列(C++版)
- 《剑指offer》:[6]两个栈实现一个队列的C++代码实现
- 剑指offer第五题【用两个栈实现队列】c++实现
- 用两个栈实现一个队列,用两个队列实现一个栈,C++ STL版
- 利用两个队列实现一个栈(C++版)
- C/C++之用两个栈实现一个队列的功能
- 用两个栈实现队列 c++ 9度题目号1512
- 两个栈实现一个队列——C++ 利用STL 栈stack实现
- C++两个队列实现一个栈