【数据结构】用两个栈实现队列
2016-09-26 18:04
232 查看
惯例。看题:
题目:用两个栈实现一个队列。队列的声明如下。请实现它的两个函数appendTail和deleteHead,分别完成对也尾部插入节点和队列头部删除节点的功能。
队列结构: template<typename T> class CQueue
{
public:
CQueue(void);
~CQueue(void);
void appendTail(const T & node);
T deleteHead();
private:
stack<T> stack1;
stack<T> stack2;
}; 首先我们从题目所给出的内容上来进行思考,题目中提到了队列和栈的相关概念
那么队列的特点是先进先出(FIFO[first in first out]),栈的特点是先进后出(FILO(first in last out)).
这个题要求的无非就是改变栈尾插和头删的进出方式。
我们完全可以想象为2个累叠的积木块来模拟2个栈。然后我们如何实现队列的先进后出呢?
其实2个栈就想到于2个容器。当栈1存储数据进行插入的时候。栈1出栈到栈2时候,就想分层的鸡尾酒进行倾倒。就可以将原本置于栈顶的数据放到栈2的栈尾。然后在进行出栈就完成了队列的先进先出的概念。
我们可以画图来看一下所需要了解的意思:
一个存储放入,一个存储删除。
大概思路就是这样,我们来看一下实现代码:templete<typename T>
void CQueue<T>::appendTail(const T & element)
{
stack1.push(element);
}
templete<typename T>
void CQueue<T>::deleteHead()
{
if(stack2.size() <= 0)
{
while(stack1.size() > 0)
{
T &data = stack1.top();
stack1.pop();
stack2.push(data);
}
}
if(stack2.size() == 0)
{
cout<<"queue is empty"<<endl;
}
T head = stack2.top();
stack2.pop();
return head;
} 这个就是2个栈实现一个队列的题目。是不是十分简单呢
本文出自 “剩蛋君” 博客,转载请与作者联系!
题目:用两个栈实现一个队列。队列的声明如下。请实现它的两个函数appendTail和deleteHead,分别完成对也尾部插入节点和队列头部删除节点的功能。
队列结构: template<typename T> class CQueue
{
public:
CQueue(void);
~CQueue(void);
void appendTail(const T & node);
T deleteHead();
private:
stack<T> stack1;
stack<T> stack2;
}; 首先我们从题目所给出的内容上来进行思考,题目中提到了队列和栈的相关概念
那么队列的特点是先进先出(FIFO[first in first out]),栈的特点是先进后出(FILO(first in last out)).
这个题要求的无非就是改变栈尾插和头删的进出方式。
我们完全可以想象为2个累叠的积木块来模拟2个栈。然后我们如何实现队列的先进后出呢?
其实2个栈就想到于2个容器。当栈1存储数据进行插入的时候。栈1出栈到栈2时候,就想分层的鸡尾酒进行倾倒。就可以将原本置于栈顶的数据放到栈2的栈尾。然后在进行出栈就完成了队列的先进先出的概念。
我们可以画图来看一下所需要了解的意思:
一个存储放入,一个存储删除。
大概思路就是这样,我们来看一下实现代码:templete<typename T>
void CQueue<T>::appendTail(const T & element)
{
stack1.push(element);
}
templete<typename T>
void CQueue<T>::deleteHead()
{
if(stack2.size() <= 0)
{
while(stack1.size() > 0)
{
T &data = stack1.top();
stack1.pop();
stack2.push(data);
}
}
if(stack2.size() == 0)
{
cout<<"queue is empty"<<endl;
}
T head = stack2.top();
stack2.pop();
return head;
} 这个就是2个栈实现一个队列的题目。是不是十分简单呢
本文出自 “剩蛋君” 博客,转载请与作者联系!
相关文章推荐
- 数据结构面试题:两个队列实现一个堆栈
- 九度OJ 1512 用两个栈实现队列 【数据结构】
- [置顶] 【数据结构】 两个栈实现一个队列【面试】
- 数据结构之两个栈实现队列
- 【数据结构】栈面试题--两个栈实现一个队列
- 一步一步学数据结构之1--1(队列--两个栈实现)
- 【数据结构】用两个栈实现队列
- 【数据结构】栈面试题--两个队列实现一个栈
- 数据结构-使用两个栈实现一个队列
- 数据结构--两个队列实现一个栈
- 程序员面试题精选100题(18)-用两个栈实现队列[数据结构]
- 旭说数据结构之用两个栈实现队列
- 【数据结构】两个栈实现一个队列
- 【数据结构】用两个队列实现一个栈
- 用两个栈实现队列[数据结构]
- 九度OJ 1512 用两个栈实现队列 【数据结构】
- 【数据结构】栈以及两个栈实现一个队列
- 【数据结构】队列以及两个队列实现一个栈
- 数据结构--两个栈实现一个队列
- 数据结构 编写一个类,用两个栈实现队列,支持队列的基本操作(add 、poll、peek)