自己写deque

news/2024/7/9 19:35:47
//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


http://www.niftyadmin.cn/n/4428411.html

相关文章

ddd的战术篇: CQRS

之前的文章介绍了ddd在战术层面的要素&#xff0c;包括entity&#xff0c;value object&#xff0c;aggregate和一些设计模式如repository。在ddd中&#xff0c;repository几乎成为了等同于entity一样的基本要素。 关于aggregate与repository的回顾 aggregate是entity和value…

领域驱动设计(domain driven design)战略篇之一 战略 Bounded Context

之前的文章主要从战术层面的角度介绍了ddd。在岛国也被称为轻量级ddd。它提供了一些概念如aggregate, entity, domain event和一些设计模式如repository, specification来帮助我们建模和设计。各种战术还有能够扩展的地方&#xff0c;有机会还会再写下去。不过从这篇文章开始会…

Linux系统设置Tab键缩进为4个字符

Linux系统设置Tab键缩进为4个字符经常使用vi/vim的朋友可能会遇到&#xff0c;写脚本的时候发现按一次Tab键就缩进8个字符&#xff08;默认是8个字符&#xff09;&#xff0c;这样感觉缩进有点长了&#xff0c;这里我们可以设置下按一次Tab键&#xff0c;让它缩进4个字符&#…

领域驱动设计(domain driven design)战略篇之二 Bounded Context

之前的一篇文章谈了战略ddd的重要性与Bounded Context这个概念&#xff0c;最近在油管上看到一个2017年关于domain driven design的演讲。如下 感觉与自己现在讲的主题十分相关&#xff0c;正好在这里展开说一下。 他认为Bounded Context可能是ddd中最重要的概念。而悲剧地…

死锁及其解决方案(避免、预防、检测)

所谓死锁&#xff1a;是指两个或两个以上的进程在执行过程中&#xff0c;因争夺资源而造成的一种互相等待的现象&#xff0c;若无外力作用&#xff0c;它们都将无法推进下去。此时称系统处于死锁 死锁产生的原因&#xff1f; 1.因竞争资源发生死锁 现象&#xff1a;系统中供多…

microservice的anti-pattern

本人主要关注的是领域驱动设计(ddd)&#xff0c;一直觉得微服务算是另一个分野&#xff0c;没有特别地去关注。直到在油管上看到《领域驱动设计》的作者Eric Evans的这视频。&#xff08;视频中Evans讲解了通过微服务&#xff0c;终于实现了可靠的Bounded Context的边界。&…

Java 线程池 四种创建方式

Java通过Executors提供四种线程池&#xff0c;分别为&#xff1a; newCachedThreadPool创建一个可缓存线程池&#xff0c;如果线程池长度超过处理需要&#xff0c;可灵活回收空闲线程&#xff0c;若无可回收&#xff0c;则新建线程。 newFixedThreadPool 创建一个定长线程池&am…

谷歌云服务架构师的考点整理: VPC network

GCP的VPC networknetworkregion, zone通信子网创建模式防火墙规则(firewall rules)最近参加谷歌的云服务架构师的考试&#xff0c;趁现在把知识整理一下。VPC network的话对于用过云服务的人来说应该是个很基础的概念。它就是物理网络的虚拟版&#xff08;virtual private clou…