《剑指Offer——面试题9:用两个栈实现队列》代码
Posted 穿迷彩服的鲨鱼
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了《剑指Offer——面试题9:用两个栈实现队列》代码相关的知识,希望对你有一定的参考价值。
前言
//========================================================
// 面试题9:用两个栈实现队列
// 题目:用两个栈实现一个队列。队列的声明如下,请实现它的两个函数
// appendTail和deleteHead,分别完成在队列尾部插入结点和在队列头部删
// 除结点的功能。
//========================================================
一、示例
示例 1:
输入:
[“CQueue”,“appendTail”,“deleteHead”,“deleteHead”]
[[],[3],[],[]]
输出:[null,null,3,-1]
示例 2:
输入:
[“CQueue”,“deleteHead”,“appendTail”,“appendTail”,“deleteHead”,“deleteHead”]
[[],[],[5],[2],[],[]]
输出:[null,-1,null,null,5,2]
二、代码解析
1.新建Queue.h文件
代码如下(示例):
// 面试题9:用两个栈实现队列
// 题目:用两个栈实现一个队列。队列的声明如下,请实现它的两个函数appendTail
// 和deleteHead,分别完成在队列尾部插入结点和在队列头部删除结点的功能。
#pragma once
#include<exception>
#include<stack>
using namespace std;
template <typename T> class CQueue
{
public:
CQueue(void);
~CQueue(void);
void appendTail(const T& node); //在队列尾部添加一个节点
T deleteHead(); //删除队列的头节点
private:
stack<T> stack1;
stack<T> stack2;
};
template<typename T>
CQueue<T>::CQueue(void)
{
while (!stack1.empty())
{
stack1.pop();
}
while (!stack2.empty())
{
stack2.pop();
}
}
template<typename T>
CQueue<T>::~CQueue(void)
{
}
template<typename T>
void CQueue<T>::appendTail(const T& node)
{
stack1.push(node);
}
template<typename T>
T CQueue<T>::deleteHead() //删除栈顶元素
{
if (stack2.size() <= 0)
{
while (stack1.size() > 0)
{
T& data = stack1.top(); //拿到栈顶1元素
stack1.pop(); //移除栈顶1元素
stack2.push(data); //压入栈2
}
}
if (stack2.size() == 0) //倒序换栈错误
{
throw new exception("queue is empty");
}
T head = stack2.top(); //拿到栈顶2元素
stack2.pop(); //移除栈顶2元素
return head;
}
2.新建.cpp文件
代码如下(示例):
// 面试题9:用两个栈实现队列
// 题目:用两个栈实现一个队列。队列的声明如下,请实现它的两个函数appendTail
// 和deleteHead,分别完成在队列尾部插入结点和在队列头部删除结点的功能。
#include"Queue.h"
// ====================测试代码====================
void Test(char actual, char expected)
{
if (actual == expected)
{
printf("Test passed.\\n");
}
else
{
printf("Test faild.\\n");
}
}
int main(int argc, char* 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;
}
3.结果
以上是关于《剑指Offer——面试题9:用两个栈实现队列》代码的主要内容,如果未能解决你的问题,请参考以下文章
校招面试 之 剑指offer第9-1题 用两个栈实现一个队列
校招面试 之 剑指offer第9-2题 用两个队列实现一个栈