【Weiss】【第03章】练习3.26:双端队列
【练习3.26】
双端队列(deque)是由一些项的表组成的数据结构,对该数据结构可以进行下列操作:
Push(X,D):将项X插入到双端队列D的前端。
Pop(D):从双端队列D中删除前端项并返回。
Inject(X,D):将项X插入到双端队列D的尾端。
Eject(D):从双端队列D中删除尾端项并返回。
编写支持双端队列的例程,每种操作均花费O(1)时间。
Answer:
相当简单的题目,把改一改双向链表就可以了。
测试代码:
#include <iostream>
#include "double_linklist.h"
using namespace std;
using namespace doublelinklist;
template class DList<int>;
int main(void)
{
DList<int> number;
number.additem();
number.additem();
number.additem();
number.additem(); //测试前后插入
number.push();
number.inject();
number.inject();
number.push();
number.traverse();
cout << "\n/*end*/\n\n" << flush; //测试前后删除
number.pop();
number.pop();
number.pop();
number.eject();
number.eject();
number.traverse(); system("pause");
}
实现代码:
//练习3.26新增,实现双端队列的四个操作
template<typename T> bool DList<T>::push(const T &item)
{
Node<T>* pnew = new Node<T>(item);
//原链表无元素
//头尾指针均指向新节点,且新节点前后指针默认为nullptr
if (length == )
front = rear = pnew;
else
{
pnew->next = front;
front->prev = pnew;
front = pnew;
}
++length;
return true;
}
template<typename T> bool DList<T>::pop()
{
if (length == )
{
cout << "Empty deque!" << endl;
return false;
}
Node<T>* temp = front;
if (length == )
front = rear = nullptr;
else
{
front = front->next;
front->prev = nullptr;
}
delete temp;
--length;
return true;
}
template<typename T> bool DList<T>::inject(const T &item)
{
return additem(item);
}
template<typename T> bool DList<T>::eject()
{
if (length == )
{
cout << "Empty deque!" << endl;
return false;
}
Node<T>* temp = rear;
if (length == )
front = rear = nullptr;
else
{
rear = rear->prev;
rear->next = nullptr;
}
delete temp;
--length;
return true;
};
【Weiss】【第03章】练习3.26:双端队列的更多相关文章
- STL容器:deque双端队列学习
所谓deque,是"double-ended queue"的缩写; 它是一种动态数组形式,可以向两端发展,在尾部和头部插入元素非常迅速; 在中间插入元素比较费时,因为需要移动其它元 ...
- Luogu P2243 电路维修 双端队列BFS
当转移的代价是0和一个分明不同的权值时,可以用双端队列BFS去跑(你跑最短路也没问题..QWQ) 而对于这道题,边旋转代价是1,不旋转代价是0:可以直接建图最短路,也可以跑BFS 这个题建图很有意思: ...
- 补番计划 (长沙理工大学第十一届程序设计竞赛)(双端队列+set容器+string)
补番计划 Time Limit : 4000/2000ms (Java/Other) Memory Limit : 65535/32768K (Java/Other) Total Submissi ...
- C++泛化双端队列
循环双端队列 双端队列可以在队首和队尾进行入队操作.出队操作的特殊队列. 循环双端队列是充分利用空间,使用格外的数据存储队头和队尾,这里利用数组进行实现. 循环双端队列(CircleQueue.h) ...
- HDU6375双端队列
要点分析: 1.本题可以使用C++STL中的deque双端队列来方便解决(底层是一个双向的链表) 2.值得注意的是N的上限为150000,所以直接开这么大的空间会超内存,可以配合map一起使用 关于双 ...
- lintcode二叉树的锯齿形层次遍历 (双端队列)
题目链接: http://www.lintcode.com/zh-cn/problem/binary-tree-zigzag-level-order-traversal/ 二叉树的锯齿形层次遍历 给出 ...
- lintcode 滑动窗口的最大值(双端队列)
题目链接:http://www.lintcode.com/zh-cn/problem/sliding-window-maximum/# 滑动窗口的最大值 给出一个可能包含重复的整数数组,和一个大小为 ...
- STL---deque(双端队列)
Deque是一种优化了的.对序列两端元素进行添加和删除操作的基本序列容器.它允许较为快速地随机访问,但它不像vector 把所有的对象保存在一块连续的内存块,而是采用多个连续的存储块,并且在一个映射结 ...
- hdu-5929 Basic Data Structure(双端队列+模拟)
题目链接: Basic Data Structure Time Limit: 7000/3500 MS (Java/Others) Memory Limit: 65536/65536 K (Ja ...
随机推荐
- unittest(22)- p2p项目实战(4)-read_config
# 4. read_config.py import configparser class ReadConfig: @staticmethod def get_config(file_path, se ...
- 将本地的一个项目托管到自己的GitHub仓库
GitHub作为全球最大的代码托管平台,功能十分强大.我们可以在上面建立一个仓库来托管我们的代码图片等资源.因为使用markdown语法来写博客所以在插入图片时需要一个图片外链地址,起初去网上找了一个 ...
- mybatis参数映射
转载地址:http://iyiguo.net/blog/2012/09/27/mybatis-param-mapping-rules/ 规则 非注解参数 当参数未使用@Param注解时,可以通过以下方 ...
- springboot oauth 鉴权之——授权码authorization_code鉴权
近期一直在研究鉴权方面的各种案例,这几天有空,写一波总结及经验. 第一步:什么是 OAuth鉴权 OAuth2是工业标准的授权协议.OAuth2取代了在2006创建的原始OAuthTM协议所做的工作. ...
- 从Note 5看三星大招 究竟能不能秒杀iPhone
5看三星大招 究竟能不能秒杀iPhone" title="从Note 5看三星大招 究竟能不能秒杀iPhone"> 从当年HTC发布第一代Android手机G1开始 ...
- 前进中的人工智能——聚焦Faculty Summit 2015人工智能主题研讨会
Summit 2015人工智能主题研讨会" title="前进中的人工智能--聚焦Faculty Summit 2015人工智能主题研讨会"> 在近几年上映的科幻大 ...
- Face Recognition 人脸识别该如何测试
猪圈子,一个有个性的订阅号 01 测量人脸识别的主要性能指标有 1.误识率(False;Accept;Rate;FAR):这是将其他人误作指定人员的概率; 2.拒识率(False;RejectRate ...
- [PyTorch入门]之迁移学习
迁移学习教程 来自这里. 在本教程中,你将学习如何使用迁移学习来训练你的网络.在cs231n notes你可以了解更多关于迁移学习的知识. 在实践中,很少有人从头开始训练整个卷积网络(使用随机初始化) ...
- 在CodaLab上提交MURA竞赛的结果
What is MURA? MURA (musculoskeletal radiographs) is a large dataset of bone X-rays. Algorithms are t ...
- 注册免费试用12个月的亚马逊AWS云计算服务
注册: 注册地址 点击页面中间的创建免费用户,进入下一步页面: 然后就是填写各种个人信息的页面了: 填写付款信息: 付款信息会进行一个电话验证,这里需要先填写对应的电话号码和验证码,然后点立刻呼叫我, ...