zoukankan      html  css  js  c++  java
  • 数据结构算法练习1循环双端队列

    //double_queue.h
    template <typename T>
    class DoubleQueue
    {
    public:
        DoubleQueue(int size=10);
        ~DoubleQueue();
        void EnQueue(T item, int end);
        void DeQueue(int end);
        bool IsEmpty();
        bool IsFull();
        void List(int end);
    
    private:
        T* data_;
        int end1_;
        int end2_;
        int size_;
    };
    
    template <typename T>
    DoubleQueue<T>::DoubleQueue(int size/* =10 */)
        : size_(size)
        , end1_(0)
        , end2_(0)
    {
        data_ = new T[size];
    }
    
    template <typename T>
    DoubleQueue<T>::~DoubleQueue()
    {
        delete [] data_;
    }
    
    template <typename T>
    void DoubleQueue<T>::EnQueue(T item, int end)
    {
        if (end == 1)
        {
            end1_ = (end1_ + 1) % size_;
            data_[end1_] = item;
        }
        else
        {
            data_[end2_] = item;
            end2_ = (end2_-1+size_)%size_;
        }
    }
    
    template <typename T>
    void DoubleQueue<T>::DeQueue(int end)
    {
        assert(!IsEmpty());
        if (end == 1)
        {
            end1_ = (end1_ - 1) % size_;
        }
        else
        {
            end2_ = (end2_ + 1 +size_) % size_;
        }
    }
    
    template <typename T>
    bool DoubleQueue<T>::IsEmpty()
    {
        return end1_ == end2_;
    }
    
    template <typename T>
    bool DoubleQueue<T>::IsFull()
    {
        return (end1_+1)%size_ == end2_;
    }
    
    template <typename T>
    void DoubleQueue<T>::List(int end)
    {
        if (end == 1)
        {
            for (int i=(end2_+1)%size_; i!=(end1_+1)%size_; i=(i+1)%size_)
            {
                cout<<data_[i]<<setw(3);
            }
        }
        else
        {
            for (int i=end1_; i!=(end2_+1)%size_; i=(i-1+size_)%size_)
            {
                cout<<data_[i]<<setw(3);
            }
        }
    }

    测试

    int main()
    {
        DoubleQueue<int> queue(5);
        queue.EnQueue(1, 1);
        queue.EnQueue(2, 1);
        queue.EnQueue(3, 1);
        queue.EnQueue(4, 1);
        queue.List(1);
        system("pause");
        return 0;
    }
  • 相关阅读:
    命令行中邮件的收发
    关于location对象
    正则表达式
    一家初创公司的 CTO 应当做什么?
    移动数据网络质量的国家奖牌榜
    MFQ&PPDCS测试分析和测试设计框架l学习记录
    Python学习笔记之基本语法学习1
    《用Python做HTTP接口测试》学习感悟
    我的中台的理解
    中台与平台的区别
  • 原文地址:https://www.cnblogs.com/tszhao/p/2801644.html
Copyright © 2011-2022 走看看