zoukankan      html  css  js  c++  java
  • 算法导论10.15习题解答(deque实现源码)

    CLRS 10.1-5
    栈的插入和删除操作都是在一端进行的,而队列的插入和删除却是在两头进行的。有一种双端队列(deque),其两端都可以做插入和删除的操作。对于一个用数组构造的双端队列,请写出四个在两端进行插入和删除操作的过程,要求运行时间为O(1)。
     
    #include <iostream>
    usingnamespace std;

    template
    <class T>
    class Deque
    {
    public:
      void push_front(T t);
      void push_back(T t);
      T pop_front();
      T pop_back();
      Deque(
    int m);
      ~Deque();
     
    private:
      T
    * arr;
      int max;
      int count;
      int head;
      int tail;
    };

    int main()
    {
      Deque
    <int> d(3);
      d.push_front(
    0);
      d.push_back(
    2);
      d.push_front(
    4);

      cout
    <<d.pop_front()<<endl;
      d.push_back(
    3);
      cout
    <<d.pop_back()<<endl;
      return0;
    }

    template
    <class T>
    void Deque<T>::push_front(T t)
    {
      if(count == max)
      {
        cout
    <<"deque is full"<<endl;
        return;
      }
      //保证新插入的元素总在前面
      head = (head ==0) ? max -1 : head -1;
      arr[head]
    = t;
      count
    ++;
    }

    template
    <class T>
    void Deque<T>::push_back(T t)
    {
      if(count == max)
      {
        cout
    <<"deque is full"<<endl;
        return;
      }
      //保证新插入的元素总在后面
      tail = (tail == max -1) ?0 : tail +1;
      arr[tail]
    = t;
      count
    ++;
    }

    template
    <class T>
    T Deque
    <T>::pop_front()
    {
      if(count ==0)
      {
        cout
    <<"deque is empty"<<endl;
        return NULL;
      }
      int temp = head;
      head
    = (head == max -1) ?0 : head +1;
      count
    --;
      return arr[temp];
    }

    template
    <class T>
    T Deque
    <T>::pop_back()
    {
      if(count ==0)
      {
        cout
    <<"deque is empty"<<endl;
        return NULL;
      }
      int temp = tail;
      tail
    = (tail ==0) ? max -1 : tail -1;
      count
    --;
      return arr[temp];
    }

    template
    <class T>
    Deque
    <T>::Deque(int m)
    {
      max
    = m;
      count
    =0;
      head
    =0;
      tail
    = m -1;
      arr
    =new T[m];
    }

    template
    <class T>
    Deque
    <T>::~Deque()
    {
      delete[] arr;
    }
  • 相关阅读:
    战略威慑 51nod提高组试题
    赛艇表演 51nod提高组模拟试题
    Emiya家今天的饭 NOIP2019 (CSP?) 类DP好题 luoguP5664
    华容道题解 NOIP2013 思路题!
    (板子) 最小生成树 买礼物 luogu P1194
    (板子)并查集(递归+循环)
    校园网络 luogu P2812 (又是强联通)
    货车运输 noip2013 luogu P1967 (最大生成树+倍增LCA)
    Codeforces Round #684 (Div. 2)
    Codeforces Round #683 (Div. 2, by Meet IT)
  • 原文地址:https://www.cnblogs.com/null00/p/2065059.html
Copyright © 2011-2022 走看看