Deque(双向队列 c++模版实现 )

算法导论第三版第十章10.1-5题

#ifndef C11LEARN_DEQUE_H
#define C11LEARN_DEQUE_H
template<typename T>
class Deque
{private:int capacity;T*array;int head;int tail;
public:Deque(int capacity = 20);Deque(const Deque<T>& deque);Deque<T>& operator=(const Deque<T>& deque);virtual ~Deque();void head_enqueue(const T &element);T head_dequeue();void tail_enqueue(T &element);T tail_enqueue();bool empty();bool full();
};
template<typename T>
Deque<T>::Deque(int capacity):capacity(capacity){if(this->capacity<20)this->capacity = 20;array = new T[capacity];head = tail = 0;
}
template<typename T>
Deque<T>::Deque(const Deque<T>& deque){capacity = deque.capacity;array = new T[capacity];head = deque.head;tail = deque.tail;for (int i = 0; i < capacity; ++i) {array[i] = deque.array[i];}
}
template<typename T>
Deque<T>::~Deque() {delete[] array;
}
template<typename T>
Deque<T>& Deque<T>::operator=(const Deque<T>& deque){if(array!= nullptr)delete[] array;capacity = deque.capacity;array = new T[capacity];head = deque.head;tail = deque.tail;for (int i = 0; i < capacity; ++i) {array[i] = deque.array[i];}
}
template<typename T>
void Deque<T>::head_enqueue(const T &element){if(full())throw "overflow";head--;if(head<0)head  = capacity - 1;array[head] = element;
}
template<typename T>
T Deque<T>::head_dequeue(){if(empty())throw "underflow";T element = array[head];head++;if(head == capacity)head = 0;return element;
}
template<typename T>
void Deque<T>::tail_enqueue(T &element){if(full())throw "overflow";array[tail] = element;if(tail == capacity - 1)tail = 0;elsetail++;
}
template<typename T>
T Deque<T>::tail_enqueue(){if(empty())throw "underflow";tail--;if(tail < 0)tail = capacity - 1;return  array[tail];
}
template<typename T>
bool Deque<T>::empty(){return head == tail;
}
template<typename T>
bool Deque<T>::full(){return head == (tail + 1 == capacity ? 0 : tail + 1);
}
#endif //C11LEARN_DEQUE_H

Deque(双向队列 c++模版实现 算法导论第三版第十章10.1-5题)相关推荐

  1. 非递归遍历二叉树(算法导论第三版第十章10.4-5)

    非递归遍历二叉树(算法导论第三版第十章10.4-5) template<typename T> void TraverseBinaryTreeNonRecursive(BinaryTree ...

  2. 给定一个n节点二叉树,写出一个O(n)时间的非递归的过程,将该树每个结点的关键字输出(算法导论第三版第十章10.4-5)

    给定一个n节点二叉树,写出一个O(n)时间的非递归的过程,将该树每个结点的关键字输出.要求除该树本树的存储空间外只能使用固定量的额外存储空间,且过程中不得修改该树,即使是暂时的修改也不允许. (算法导 ...

  3. Θ(n)反转单链表(算法导论第三版第十章10.2-7)

    Θ(n)反转单链表 (算法导论第三版第十章10.2-7) template<typename T> void reverses(Single_L<T> &l) {if( ...

  4. 给出TREE_INSERT过程的非递归版本(算法导论第三版12.3-1)

    给出TREE_INSERT过程的非递归版本(算法导论第三版12.3-1) template<typename T> void insert_recursive(BinaryTree< ...

  5. 写出TREE-PREDECESSOR的伪代码(算法导论第三版12.2-3)

    写出TREE-PREDECESSOR的伪代码(算法导论第三版12.2-3) TREE-PREDECESSOR(x)if x.left != NILreturn TREE-MAXIMUM(x.left) ...

  6. 写出TREE-MINIMUM 和TREE-MAXIMUM的递归版本(算法导论第三版12.2-2)

    写出TREE-MINIMUM 和TREE-MAXIMUM的递归版本(算法导论第三版12.2-2) template<typename T> BinaryTreeNode<T>* ...

  7. 二叉树的中序遍历非递归方法(算法导论第三版12.1-3)

    二叉树的中序遍历非递归方法(算法导论第三版12.1-3) 1⃣️用栈实现 template<typename T> void inorder_tree_walk_non_recursion ...

  8. 二叉树的遍历(算法导论第三版12.1-4)(包含先序遍历,后序遍历和中序遍历)

    二叉树的遍历(算法导论第三版12.1-4) 1⃣️先序遍历 template<typename T> void preorder_tree_wald(BinaryTreeNode<T ...

  9. 算法导论第三版第十一章11.1-4

    算法导论第三版第十一章11.1-4 我们希望在一个非常大的数组上,通过利用直接寻址的方式来实现一个字典.开始时,该数组中可能包含一些无用信息,但要堆整个数组进行初始化时不太实际的,因为该数组的规模太大 ...

最新文章

  1. 程序员硬核“年终大扫除”,清理了数据库 70GB 空间
  2. 请输入课程编号C语言,C语言 学生选课系统 程序
  3. 实例:使用puppeteer headless方式抓取JS网页
  4. 布尔运算_利用布尔运算拆分汉字
  5. 区块链监管的一年,剥离“币”的区块链技术该何去何从?
  6. 如何设计通用的回调机制
  7. 设计模式(结构型模式)——装饰模式(Decorator)
  8. 基于容器的虚拟化资源调度系统架构设计 | 原力计划
  9. 关于iframe或document监听滑动(scroll)失败的问题
  10. 小米wifi驱动 linux驱动,Centos7-驱动小米WIFI做AP
  11. 软件测试需要学数学,数学软件测试有感
  12. 清北级别,补助丰厚,这样的中科院信工所你心动了吗?
  13. 第六届ACM省赛总结--吕云飞
  14. css更改鼠标指针样式,几种鼠标点击效果
  15. 恢复出厂设置和格式化SD卡
  16. 7-4 计算存款利息(10 分)
  17. MATLAB:镜像图片
  18. 【LINUX】STM32MP1笔记1-安装入门包
  19. java 23种设计模式详解
  20. 计算机从bios到操作系统,高手进!!计算机开机后在进入操作系统前BIOS在进行什么检测工作?...

热门文章

  1. Android之PC浏览器上传表单格式大文件到手机客户端read函数阻塞问题
  2. java之DocumentBuilderFactory解析xml
  3. C语言之获取32字节随机数的字符串
  4. 小程序的 HelloWord 01《 程序员变现指南之 微信QQ 小程序 真的零基础开发宝典》
  5. 《看聊天记录都学不会Python到游戏实战?太菜了吧》(10)无底洞的循环
  6. linux下python版本升级,linux下升级python版本
  7. 计算机应用问题,计算机应用的现状与发展的问题
  8. 手把手教出欧拉!数学界最伟大的老师惨遭全网歪曲抹黑,奇葩说陈铭一句话揭露真相.........
  9. 有趣!机器学习预测《守望先锋》里的赢家
  10. java 录屏_java 录屏 小工具源码(idea)