自己写deque
//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的更多相关文章
- codeforces257 div2 D最短路条数
题意: 给一个无向图,总共有 n个点,m+k条边,给定点所连的k条边可以选择删除 问最多删除多少条可以保持该定点到其他点的最短路不变 题解: 从定点出发做单元最短路 首先如果定点到某个点的最短路小于 ...
- 【刷题】BZOJ 4543 [POI2014]Hotel加强版
Description 同OJ3522 数据范围:n<=100000 Solution dp的设计见[刷题]BZOJ 3522 [Poi2014]Hotel 然后发现dp的第二维与深度有关,于是 ...
- 洛谷P3572题解
这道题实在是一道 毒瘤 题,太坑爹了.那个写 \(deque\) 的题解亲测只有80分,原因 不言而明 ,这道题居然 丧心病狂 到 卡STL . 好了,不吐槽了,进入正题 题目分析: 这是一道十分 简 ...
- Java 常用 Collection 继承关系与接口实现
Java Collection List 接口 继承.接口实现关系: public interface List<E> extends Collection<E> 方法定义: ...
- LuoguP1016 旅行家的预算 (贪心)
胡一个错误代码都能有75pts 忘了怎么手写deque其实是懒 #include <cstdio> #include <iostream> #include <cstri ...
- Python强化训练笔记(七)——使用deque队列以及将对象保存为文件
collections模块中的deque对象是一个队列,它有着正常队列的先进先出原则.我们可以利用这个对象来实现数据的保存功能. 例如,现有一个猜数字大小的游戏,系统开始会随机roll点一个0-100 ...
- STL之序列容器deque
首先看看deque的模板声明: template <class T, class Alloc = allocator<T>> // 原本还有个参数BufSize,现在新版本 ...
- HDU5127 神坑题---vector 、 list 、 deque 的用法区别
题意:三个操作 1 a b : 队列中加入(x = a, y = b); -1 a b : 队列中减去(x = a, y = b); 0 p q :从队列的数对中查询哪一对x,y能够让 p * ...
- java三篇博客转载 详解-vector,stack,queue,deque
博客一:转载自http://shmilyaw-hotmail-com.iteye.com/blog/1825171 java stack的详细实现分析 简介 我们最常用的数据结构之一大概就是stack ...
随机推荐
- TypeScript -- 面向对象特性
.class关键字和类名就可以定义一个类 . 类的访问控制符--有三个,.] = ] = ] = ;.声明参数 .用接口声明方法 .理解模块--一个文件就是一个模块,就是这么个意思 ,不用想的多么高大 ...
- MySQL中的事务
MySQL中的事务性: MySQL的InnoDB引擎是支持事务性的,事务是由多条SQL语句组成,是一个连续的一组数据库操作.只有该组内的每一个操作都成功时,整个事务才执行成功.(例如银行转账操作,只有 ...
- js格式化时间为JSON格式 ajax提交 后台处理
var effectRow = new Object();if ($('#grd_infos').datagrid('getChanges').length) { var update = $( ...
- 目标检测中proposal的意义
在目标检测中,从很早就有候选区域的说法,也是在2008年可能就有人使用这个方法,在2014年的卷积神经网络解决目标检测问题的文章中,这个候选框方法大放异彩,先前的目标检测方法主要集中在使用滑动窗口的方 ...
- jquery 自动触发事件 trigger
trigger() 栗子: 需求:我们在做二级联动的时候往往会遇到这样的需求,后台管理端页面加载完成后显示用户的省份,城市,并且可以对用户的省份,城市信息可以修改 如果只是简单的显示 你完全可以直接放 ...
- ios之极光推送消息收到以后对消息的处理总结
当我们的APP收到推送消息后,通常需要根据推送内容点击消息进入到指定的页面 这里讲一下收到推送消息后的处理,分为三种情况 :1.APP处于前台运行情况下 2.APP处于后台挂起情况下 3. ...
- Oracle odi 数据表导出到文件
最近新客户要求,以EXCEL数据方式,将数据表的内容,通过AS2协议传输到客户那边,本来打算使用存储过程直接输出EXCEL,但一想,ODI这么强大的工具应该可以直接进行转换,所以参考了一下官方标准文档 ...
- vertical-align属性详解
vertical-align属性详解:http://www.cnblogs.com/wcp-spring/archive/2013/03/04/2942456.html 关于vertical-alig ...
- 2014年蓝桥杯预选赛 C/C++ 本科A组试题--切面条
//主要是要找到f(n)=2*f(n-1)-1的规律. #include <stdio.h> #include <math.h> int f(int n) { if(n==0) ...
- 导入导出Excel的Java工具类ExcelUtil
在编写ExcelUtil之前,在网上查了一些资料.java中用来处理Excel的第三方开源项目主要就是POI和JXL.poi功能强大,但是比较耗资源,对于大数据量的导入导出性能不是太好:jxl功能简单 ...