您的位置:首页 > 理论基础 > 数据结构算法

数据结构之栈和队列

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;

 }
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: