//deque
/*
what is a deque?
In Chinese, it's called "双端队列".
It's different from a queue.
Its elements can be added to or removed from either the front(head) or back(tail) ,called a head-tail linked list. 输入限制deque
An input-restricted deque is one where deletion can be made from both ends, but insertion can be made at one end only. 输出限制deque
An output-restricted deque is one where insertion can be made at both ends, but deletion can be made from one end only Queue and stack can be considered spectalizations of deques.
There are at least two common ways to efficiently implement a deque: with a modified dynamic arry or with a doubly linked list
C++ dq1.push_back(x) insert element at back
dq1.push_front(x) insert element at front
dq1.pop_back(x) remove last element
dq1.pop_front(x) remove first element
dq1.back() return last element
dq1.front() return first element
*/ //自己写deque
//double linked list版
template<typename Object>
class Dequeue
{
private:
struct Node
{
Object data;
Node* next;
Node* prev; Node(const Object& d = Object(), Node *p = NULL, Node *n = NULL)
:data(d), next(n), prev(p){}
}; public:
Dequeue()
{
init();
} Dequeue(const Dequeue& q)
{
init();
*this = q;
} const Dequeue& operator=(const Dequeue& q)
{
if (this == &q)
return *this;
clear();
Node *p = q.head->next;
while (p->next != q.tail)
{
this.push_back(p->data);
p = p->next;
}
return *this;
} ~Dequeue()
{
clear();
delete head;
delete tail;
} //判空
bool isEmpty()
{
return size == 0;
} //push_back
void push_back(Object item)
{
size++;
Node* p = new Node;
p->data = item;
Node* q = tail->prev;
p->next = tail;
p->prev = q;
q->next = p;
tail->prev = p;
} //push_front
void push_front(Object item)
{
size++;
Node* p = new Node;
p->data = item;
Node* q = head->next;
p->next = q;
p->prev = head;
head->next = p;
q->prev = p;
} //pop_back
void pop_back()
{
size--;
Node*p = tail->prev;
Node*q = p->prev;
q->next = tail;
tail->prev = q;
delete p;
} //pop_front
void pop_front()
{
size--;
Node *p = head->next;
Node *q = p->next;
head->next = q;
q->prev = head;
delete p;
} //back
Object back()
{
return tail->prev->data;
} //front
Object front()
{
return head->next->data;
} //clear
void clear()
{
while (!isEmpty())
{
pop_back();
}
} //getsize
int getSize()
{
return size;
} private:
Node* head;
Node* tail;
int size; void init()
{
head = new Node;
tail = new Node;
size = 0;
head->next = tail;
tail->prev = head;
}
};

  

自己写deque的更多相关文章

  1. codeforces257 div2 D最短路条数

    题意: 给一个无向图,总共有 n个点,m+k条边,给定点所连的k条边可以选择删除 问最多删除多少条可以保持该定点到其他点的最短路不变 题解: 从定点出发做单元最短路 首先如果定点到某个点的最短路小于 ...

  2. 【刷题】BZOJ 4543 [POI2014]Hotel加强版

    Description 同OJ3522 数据范围:n<=100000 Solution dp的设计见[刷题]BZOJ 3522 [Poi2014]Hotel 然后发现dp的第二维与深度有关,于是 ...

  3. 洛谷P3572题解

    这道题实在是一道 毒瘤 题,太坑爹了.那个写 \(deque\) 的题解亲测只有80分,原因 不言而明 ,这道题居然 丧心病狂 到 卡STL . 好了,不吐槽了,进入正题 题目分析: 这是一道十分 简 ...

  4. Java 常用 Collection 继承关系与接口实现

    Java Collection List 接口 继承.接口实现关系: public interface List<E> extends Collection<E> 方法定义: ...

  5. LuoguP1016 旅行家的预算 (贪心)

    胡一个错误代码都能有75pts 忘了怎么手写deque其实是懒 #include <cstdio> #include <iostream> #include <cstri ...

  6. Python强化训练笔记(七)——使用deque队列以及将对象保存为文件

    collections模块中的deque对象是一个队列,它有着正常队列的先进先出原则.我们可以利用这个对象来实现数据的保存功能. 例如,现有一个猜数字大小的游戏,系统开始会随机roll点一个0-100 ...

  7. STL之序列容器deque

    首先看看deque的模板声明: template <class T,  class Alloc = allocator<T>>  // 原本还有个参数BufSize,现在新版本 ...

  8. HDU5127 神坑题---vector 、 list 、 deque 的用法区别

    题意:三个操作 1  a b : 队列中加入(x = a, y = b); -1  a b : 队列中减去(x = a, y = b); 0  p q :从队列的数对中查询哪一对x,y能够让 p * ...

  9. java三篇博客转载 详解-vector,stack,queue,deque

    博客一:转载自http://shmilyaw-hotmail-com.iteye.com/blog/1825171 java stack的详细实现分析 简介 我们最常用的数据结构之一大概就是stack ...

随机推荐

  1. 在vim编辑器中,删除操作

    我这里在编辑一个很大的文件,有几万行,都是文件名sheetid, 中间有很多空行,我现在要做的事情就有要把这个文件中的空行都删除掉,这个本来想在ultraedit里面完成的,结果弄了好半天都没有搞定, ...

  2. Jmeter(四)-断言/检查点

    断言就类似LoadRunner中的检查点.对上一个请求返回的信息,做字符串.数据包大小.HTML.XML.图片等做判断,确保返回的信息的准确性. 添加响应断言:欢迎您 如果登陆页登陆成功,则后台会返回 ...

  3. unittest框架概要

    unittest是Python语言自带的单元测试框架,原名PyUnit. 认识unittest 在unittest框架中有4个重要概念:test fixture.test case.test suit ...

  4. VS2012及以上版本 程序打包部署详解

    引用:  http://blog.csdn.net/zhang_xinxiu/article/details/9099757 程序编写测试完成后接下来我们要做的是打包部署程序,但VS2012让人心痛的 ...

  5. 第一百二十四节,JavaScriptCookie与存储

    JavaScriptCookie与存储 学习要点: 1.cookie 2.cookie局限性 3.其他存储 随着Web越来越复杂,开发者急切的需要能够本地化存储的脚本功能.这个时候,第一个出现的方案: ...

  6. 第一百一十七节,JavaScript,DOM元素尺寸和位置

    学习要点: 1.获取元素CSS大小 2.获取元素实际大小 3.获取元素周边大小 本章,我们主要讨论一下页面中的某一个元素它的各种大小和各种位置的计算方式,以便更好的理解. 一.获取元素CSS大小 1. ...

  7. 斗地主 (NOIP2015 Day1 T3)

    斗地主 张牌,因为它可以连在K后, 总体思路为 先出炸弹和四带二 再出三带一 再把对牌和单牌出完 记录并更新Answer,后枚举顺子,并继续向下搜索. 注意:弄明白题意,题目描述不太清楚....另外, ...

  8. java 生成条形码

    package com.sun.erwei; import java.awt.image.BufferedImage;import java.io.ByteArrayOutputStream;impo ...

  9. 导入导出Mysql数据库、表结构、表数据

    由sql文件导入 mysql -uusername -ppwd < ./abc.sql 导出整个数据库的表结构 mysqldump -uroot -pdbpasswd -d dbname > ...

  10. Python基础(五)-函数

    函数: 1.定义与使用: def 函数名(参数): "函数_文档字符串" 函数体 ... return [表达式] ## def:表示函数的关键字 函数名:函数名称,根据函数名调用 ...