热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

3.数组实现的双端队列

《算法导论》10.1-5栈插入和删除元素只能在同一端进行,队列的插入操作和删除操作分别在两端进行,与它们不同的,有一种双端队列(deque),其插入和删除操作都可以在两端进行。写出4个时间均为
  • 《算法导论》10.1-5 栈插入和删除元素只能在同一端进行,队列的插入操作和删除操作分别在两端进行,与它们不同的,有一种双端队列(deque),其插入和删除操作都可以在两端进行。写出4个时间均为O(1)的过程,分别实现在双端队列的两端插入和删除元素的操作,该队列是用一个数组实现的。
#include 

template
class Deque
{
public:
    Deque()
    {
        init();
    }
    Deque(const Deque& rhs)
    {
        init();
        head = rhs.head;
        size = rhs.size;
        for(int i = head, idx; i != head + size; ++i)
        {
            idx = index(i);
            p[idx] = rhs.p[idx];
        }
    }
    Deque(Deque&& rhs):p(rhs.p),head(rhs.head),size(rhs.size)
    {
        rhs.p = nullptr;
        rhs.head = rhs.size = 0;
    }
    Deque& operator =(const Deque& rhs)
    {
        Deque copy(rhs);
        std::swap(copy.p, this->p);
        std::swap(copy.head, this->head);
        std::swap(copy.size, this->size);
        return *this;
    }
    Deque& operator =(const Deque&& rhs)
    {
        std::swap(rhs.p, this->p);
        std::swap(rhs.head, this->head);
        std::swap(rhs.size, this->size);
        return *this;
    }

    void push_front(const Object& object)
    {
        if(full())
        {
            std::cout <<"overflow" <= MAX_SIZE)
            i -= MAX_SIZE;
        else if(i <0)
            i += MAX_SIZE;
        return i;
    }
};

void testDeque()
{
    using namespace std;
    struct Student
    {
        char name[10];
        int  age;
    };
    Deque dq;
    dq.push_back(Student{"Tom", 12});
    dq.push_back(Student{"Micheal", 13});
    dq.push_back(Student{"Anna", 14});
    dq.push_back(Student{"Lily", 10});
    dq.push_back(Student{"James", 19});

    decltype(dq) dq_copy(dq), dq_reverse;
    while(!dq_copy.empty())
    {
        auto stu = dq_copy.pop_front();
        dq_reverse.push_front(stu);
    }
    dq_copy.pop_front();

    while(!dq_reverse.empty())
    {
        auto stu = dq_reverse.pop_back();
        cout <<"name: " <

推荐阅读
author-avatar
xinyaolin_857
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有