【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 ...
随机推荐
- 博客已搬迁到 blog.vivym.xyz
博客已搬迁到 blog.vivym.xyz
- Spring Boot 集成 Spring Security
1.添加依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId> ...
- vue-cli 项目结构介绍
感谢:https://www.jianshu.com/p/7006a663fb9f 总体框架 一个vue-cli的项目结构如下,其中src文件夹是需要掌握的,所以本文也重点讲解其中的文件,至于其他相关 ...
- Kafka与RabbitMQ、ActiveMQ协议区别
对于Kafka与RabbitMQ.ActiveMQ协议,它们具体的区别如下: activemq: activemq支持主从复制.集群.但是集群功能看起来很弱,只有failover功能,即 ...
- 概念--Maven仓库
转:Maven:mirror和repository 区别 Tip: 默认中央仓库的地址:https://repo.maven.apache.org/maven2 1.Maven仓库主要有2种 remo ...
- (二)Java数组的使用
Java数组 无序数组插入删除查询操作: public class ArrayList { private static int[] intArray; private int nElems; pub ...
- 用Express 4和 MongoDB打造Todo List
本篇文章主要參考自DreamersLab - 用Express和MongoDB寫一個todo list.原文的教學內容是使用Express 3.x版,在這邊做簡單Express 4.12.1的todo ...
- 恭祝2018元旦快乐!转发享福利(⊙o⊙)…
来源:中国工信出版集团-电子工业出版社赠送给作者的原书. 为感谢2017年你的不离不弃,在2018新年之际来一发,转发朋友圈集齐20个赞,即参与活动, 活动规则: 1 转发朋友圈+集齐20个赞?, ...
- Spring Boot2.x 动态数据源配置
原文链接: Spring Boot2.x 动态数据源配置 基于 Spring Boot 2.x.Spring Data JPA.druid.mysql 的动态数据源配置Demo,适合用于数据库的读写分 ...
- win10 64位 安装JDK1.8
win10 64位 jdk1.8 配置Java环境,是否安装JRE. 一.安装得有JRE JDK和JRE分别安装再不同的文件夹下 新建:JAVA_HOME 值:JDK的安装路径 新建:CLASSPAT ...