当前位置: 首页 > news >正文

自己写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; } };

  

转载于:https://www.cnblogs.com/KennyRom/p/5967550.html

相关文章:

  • 突然有一个时刻想过静静,我知道你是谁。
  • Qinq技术介绍与实战
  • 搭建简易xss平台
  • Tomcat就是个容器,一种软件
  • php结合redis实现高并发下的抢购、秒杀功能
  • JAVA多线程(十三)模式-Thread Specific Storage
  • 开源大数据周刊-第26期
  • Error: Cannot retrieve metalink for repository: epel. Please verify its path and try again
  • Android 签名和哈希密钥
  • sql分组(orderBy、GroupBy)获取每组前一(几)条数据
  • mysql实现vsftp虚拟用户访问
  • [地铁译]使用SSD缓存应用数据——Moneta项目: 低成本优化的下一代EVCache ...
  • makefile 一看就懂了
  • 统计服务连接状况
  • 什么是wall-clock time
  • AWS实战 - 利用IAM对S3做访问控制
  • DOM的那些事
  • hadoop集群管理系统搭建规划说明
  • Mysql优化
  • orm2 中文文档 3.1 模型属性
  • SegmentFault 2015 Top Rank
  • spring学习第二天
  • TypeScript迭代器
  • 基于web的全景—— Pannellum小试
  • 目录与文件属性:编写ls
  • 如何利用MongoDB打造TOP榜小程序
  • 突破自己的技术思维
  • 用quicker-worker.js轻松跑一个大数据遍历
  • Android开发者必备:推荐一款助力开发的开源APP
  • mysql面试题分组并合并列
  • 策略 : 一文教你成为人工智能(AI)领域专家
  • ​520就是要宠粉,你的心头书我买单
  • #HarmonyOS:基础语法
  • #微信小程序(布局、渲染层基础知识)
  • #微信小程序:微信小程序常见的配置传旨
  • #我与Java虚拟机的故事#连载16:打开Java世界大门的钥匙
  • (ctrl.obj) : error LNK2038: 检测到“RuntimeLibrary”的不匹配项: 值“MDd_DynamicDebug”不匹配值“
  • (day 12)JavaScript学习笔记(数组3)
  • (Java实习生)每日10道面试题打卡——JavaWeb篇
  • (Matalb回归预测)PSO-BP粒子群算法优化BP神经网络的多维回归预测
  • (分享)一个图片添加水印的小demo的页面,可自定义样式
  • (详细版)Vary: Scaling up the Vision Vocabulary for Large Vision-Language Models
  • (转)nsfocus-绿盟科技笔试题目
  • (转)自己动手搭建Nginx+memcache+xdebug+php运行环境绿色版 For windows版
  • .NET Core中Emit的使用
  • .NET 自定义中间件 判断是否存在 AllowAnonymousAttribute 特性 来判断是否需要身份验证
  • .Net程序猿乐Android发展---(10)框架布局FrameLayout
  • .NET学习全景图
  • @entity 不限字节长度的类型_一文读懂Redis常见对象类型的底层数据结构
  • @ModelAttribute注解使用
  • @RequestMapping-占位符映射
  • [ C++ ] STL_vector -- 迭代器失效问题
  • [ CTF ] WriteUp- 2022年第三届“网鼎杯”网络安全大赛(白虎组)
  • [ vulhub漏洞复现篇 ] Apache Flink目录遍历(CVE-2020-17519)
  • [2024最新教程]地表最强AGI:Claude 3注册账号/登录账号/访问方法,小白教程包教包会