数据结构之栈和队列
2016-02-25 08:51
405 查看
栈是一个非常常见的数据结构,它在计算机领域中被广泛的使用,比如操作系统会给每个线程分配一个栈。
用来存储函数调用时各个函数的参数,返回值以及临时变量等。栈的特点是先进后出。
通常栈是一个不考虑排序的数据结构,我们需要O(n)时间才能找到栈中的最大值或者最小值,
如果想要在O(1)时间内找到栈中的最大值或者是最小值,需要对栈做特殊的设计。
队列是另外一种非常重要的数据结构,它和栈不同的是它的特点是先进先出。
栈和队列虽然是两个针锋相对的数据结构,但是它们却相互联系,比如下面的代码。
//用两个栈实现队列
//定义栈的结构
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> void CQueue<T>::appendTail(Const T& element)
{
stack1.push(element);
}
实现栈中的删除元素的方法
template<typename T> void CQueue<T>::deleteHead()
{
//如果栈2中没有元素的话就把栈1中的元素放到栈2中
if(stack2.size() < 0)
{
while(stack1.size()>0)
{
T& data = stack1.top();
stack1.pop();
stack2.push(data);
}
}
if(stack2.size()==0)
throw new Exception("queue is empty.");
T head = stack2.top();
stack2.pop();
return head;
}
栈是一个非常常见的数据结构,它在计算机领域中被广泛的使用,比如操作系统会给每个线程分配一个栈。
用来存储函数调用时各个函数的参数,返回值以及临时变量等。栈的特点是先进后出。
通常栈是一个不考虑排序的数据结构,我们需要O(n)时间才能找到栈中的最大值或者最小值,
如果想要在O(1)时间内找到栈中的最大值或者是最小值,需要对栈做特殊的设计。
队列是另外一种非常重要的数据结构,它和栈不同的是它的特点是先进先出。
栈和队列虽然是两个针锋相对的数据结构,但是它们却相互联系,比如下面的代码。
//用两个栈实现队列
//定义栈的结构
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> void CQueue<T>::appendTail(Const T& element)
{
stack1.push(element);
}
实现栈中的删除元素的方法
template<typename T> void CQueue<T>::deleteHead()
{
//如果栈2中没有元素的话就把栈1中的元素放到栈2中
if(stack2.size() < 0)
{
while(stack1.size()>0)
{
T& data = stack1.top();
stack1.pop();
stack2.push(data);
}
}
if(stack2.size()==0)
throw new Exception("queue is empty.");
T head = stack2.top();
stack2.pop();
return head;
}
相关文章推荐
- 数据结构之二叉树
- 二维表的数据可以被封装成的数据结构(集合)
- 基本数据结构
- 《面试知识:操作系统、计算机网络、设计模式、Linux编程,数据结构总结》
- 数据结构绪论
- 《数据结构与算法分析(c描述)》—— 归并排序
- 《数据结构与算法分析(c描述)》—— 插入排序&希尔排序
- Linux帧缓冲数据结构和驱动结构总结
- 数据结构之队列(五)
- 数据结构排序算法
- 数据结构基础整理(C语言)
- [数据结构]Magic-Square
- Java数据结构----图--最短路径解法Dijkstra算法和Floyd算法
- runtime 类和对象的使用和基本的数据结构
- sdut 1488 数据结构实验:连通分量个数(并查集)
- 《数据结构》线性表的链式表示和实现(三)
- input子系统学习笔记二:数据结构
- nginx源码初读(8)--让烦恼从数据结构开始(ngx_event)
- 深入解析Java对象的hashCode和hashCode在HashMap的底层数据结构的应用
- 《大话数据结构》之堆排序