【练习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:双端队列的更多相关文章

  1. STL容器:deque双端队列学习

    所谓deque,是"double-ended queue"的缩写; 它是一种动态数组形式,可以向两端发展,在尾部和头部插入元素非常迅速; 在中间插入元素比较费时,因为需要移动其它元 ...

  2. Luogu P2243 电路维修 双端队列BFS

    当转移的代价是0和一个分明不同的权值时,可以用双端队列BFS去跑(你跑最短路也没问题..QWQ) 而对于这道题,边旋转代价是1,不旋转代价是0:可以直接建图最短路,也可以跑BFS 这个题建图很有意思: ...

  3. 补番计划 (长沙理工大学第十一届程序设计竞赛)(双端队列+set容器+string)

    补番计划 Time Limit : 4000/2000ms (Java/Other)   Memory Limit : 65535/32768K (Java/Other) Total Submissi ...

  4. C++泛化双端队列

    循环双端队列 双端队列可以在队首和队尾进行入队操作.出队操作的特殊队列. 循环双端队列是充分利用空间,使用格外的数据存储队头和队尾,这里利用数组进行实现. 循环双端队列(CircleQueue.h) ...

  5. HDU6375双端队列

    要点分析: 1.本题可以使用C++STL中的deque双端队列来方便解决(底层是一个双向的链表) 2.值得注意的是N的上限为150000,所以直接开这么大的空间会超内存,可以配合map一起使用 关于双 ...

  6. lintcode二叉树的锯齿形层次遍历 (双端队列)

    题目链接: http://www.lintcode.com/zh-cn/problem/binary-tree-zigzag-level-order-traversal/ 二叉树的锯齿形层次遍历 给出 ...

  7. lintcode 滑动窗口的最大值(双端队列)

    题目链接:http://www.lintcode.com/zh-cn/problem/sliding-window-maximum/# 滑动窗口的最大值 给出一个可能包含重复的整数数组,和一个大小为  ...

  8. STL---deque(双端队列)

    Deque是一种优化了的.对序列两端元素进行添加和删除操作的基本序列容器.它允许较为快速地随机访问,但它不像vector 把所有的对象保存在一块连续的内存块,而是采用多个连续的存储块,并且在一个映射结 ...

  9. hdu-5929 Basic Data Structure(双端队列+模拟)

    题目链接: Basic Data Structure Time Limit: 7000/3500 MS (Java/Others)    Memory Limit: 65536/65536 K (Ja ...

随机推荐

  1. 用nexus搭建maven2内部服务器

    由于项目组需要,要搭建内部的Maven仓库,借鉴项目组内部及外部同事的经验选用nexus来搭建内部仓库.下面描述一下具体的步骤.  一.安装配置过程  1.下载nexus,地址http://www.s ...

  2. 图的DFS。。类似树的DFS

    Depth-First Search (DFS) Depth-first search (DFS) is an algorithm for traversing or searching tree o ...

  3. Java 判断字符串是否包含某个字符

    // 判断不为静态栏目的文章 if (e.getCategory().getName().indexOf("静态") == -1) { articleList2.add(e); } ...

  4. 吴裕雄--天生自然 R语言开发学习:中级绘图(续一)

    #------------------------------------------------------------------------------------# # R in Action ...

  5. 使用itchat发送天气信息

    微信发送当日天气情况 念头萌生 之前在浏览网站的时候发现了篇文章「玩转树莓派」为女朋友打造一款智能语音闹钟,文章中介绍了使用树莓派打造一款语音播报天气的闹钟. 当时就想照着来,也自己做个闹钟.因为一直 ...

  6. 年薪5w和50w的人,区别到底在哪?

    年薪5w和50w的人,区别到底在哪? 2017-02-22 阿青 360投资圈 文/ 阿青 许多人在职场摸爬滚打很多年并不顺利,薪酬一直上不去.职场鸡汤喝了不少,也掌握了不少职场技能,工作经验也颇为丰 ...

  7. Java 并发编程 -- Fork/Join 框架

    概述 Fork/Join 框架是 Java7 提供的一个用于并行执行任务的框架,是一个把大任务分割成若干个小任务,最终汇总每个小任务结果后得到大任务结果的框架.下图是网上流传的 Fork Join 的 ...

  8. mongodb写入安全级别

    MongoDB的写安全机制 写入安全(Write Concern)是一种由客户端设置的,用于控制写入安全级别的机制,通过使用写入安全机制可以提高数据的可靠性. MongoDB提供四种写入级别,分别是: ...

  9. 万达乐园VS阿里帝国 谁将是未来娱乐产业的龙头?

    国内实体行业大佬王健林和互联网行业巨头马云,这次又不约而同地想到一块去了.从王健林叫板迪士尼大搞借势营销,到最近马云成立大文娱工作领导小组,明显的趋势表明娱乐越来越成为各界大佬们未来掘金的新战场.只不 ...

  10. JavaScript的封装和继承

    提到JavaScript"面向对象编程",主要就是封装和继承,这里主要依据阮一峰及其他博客的系列文章做个总结. 继承机制的设计思想 所有实例对象需要共享的属性和方法,都放在这个对象 ...