首页 > 编程语言 >C++ 双端队列实现

C++ 双端队列实现

时间:2024-10-24 18:48:49浏览次数:8  
标签:Node head 队列 双端 tail C++ next length data

#include <iostream>
using namespace std;
#define ulli size_t
template<class T>class DualStack {
private:
	struct Node {
		T data;
		Node* next;
	};
	Node* head, *tail;
	Node* p;
	ulli length;

public:
	DualStack() {
		head = NULL;
		length = 0;
		tail = NULL;
		p = NULL;
	}
	~DualStack() {
		Node* ptr = NULL;
		while (head != NULL) {
			ptr = head->next;
			delete head;
			head = ptr;
		}
	}
	void push_back(T n) {
		Node* q = new Node;
		q->data = n;
		if (head == NULL) {
			q->next = head;
			head = q;
			p = q;
		}
		else {
			q->next = p;
			p = q;
		}
		length++;
	}
	void push_front(T n) {
		Node* q = new Node;
		q->data = n;
		q->next = tail;
		tail = q;
		length++;
	}
	void pop_front() {
		if (length <= 0) {
			abort();
		}
		Node* q;
		T data;
		q = tail;
		data = tail->data;
		tail = tail->next;
		delete(q);
		length--;
	}
	void pop_back() {
		if (length <= 0) {
			abort();
		}
		Node* q;
		T data;
		q = head;
		data = head->data;
		head = head->next;
		delete(q);
		length--;
	}
	ulli size() {
		return length;
	}
	T front() {
		return tail->data;
	}
	T back() {
		return head->data;
	}
	bool empty() {
		if (length == 0) {
			return true;
		}
		else {
			return false;
		}
	}
	void clear() {
		while (length > 0) {
			pop_back();
			pop_front();
		}
	}
};

标签:Node,head,队列,双端,tail,C++,next,length,data
From: https://blog.csdn.net/j5486545648564/article/details/143216863

相关文章

  • C++ STL queue 的实现
    求点赞,求关注,求评论求点赞,求关注,求评论求点赞,求关注,求评论求点赞,求关注,求评论求点赞,求关注,求评论求点赞,求关注,求评论求点赞,求关注,求评论这篇文章很短,直接给代码:#include<iostream>usingnamespacestd;template<classT>classQueue{protected: structnode......
  • 8 位 RISC 模型机 状态机控制 ALU双端口
    8位RISC模型机状态机控制双端口项目地址:8位RISC模型机状态机控制双端口从8位寄存器(D触发器)开始DDD:8位输入......
  • C++学习路线(二十二)
    构造函数构造函数作用在创建一个新的对象时,自动调用的函数,用来进行“初始化”工作:对这个对象内部的数据成员进行初始化。构造函数特点1.自动调用(在创建新对象时,自动调用)2.构造函数的函数名,和类名相同3.构造函数没有返回类型4.可以有多个构造函数(即函数重载形式)构......
  • 计算机毕业设计项目推荐:大学生实习成绩评价系统的设计与实现38147(开题答辩+程序定制+
    摘 要21世纪的今天,随着社会的不断发展与进步,人们对于信息科学化的认识,已由低层次向高层次发展,由原来的感性认识向理性认识提高,管理工作的重要性已逐渐被人们所认识,科学化的管理,使信息存储达到准确、快速、完善,并能提高工作管理效率,促进其发展。论文主要是对大学生实习成绩......
  • 【C++】红黑树万字详解(一文彻底搞懂红黑树的底层逻辑)
    目录00.引入01.红黑树的性质02.红黑树的定义03.红黑树的插入1.按照二叉搜索树的规则插入新节点2.检测新节点插入后,是否满足红黑树的性质1.uncle节点存在且为红色2.uncle节点不存在3.uncle节点存在且为黑色 04.验证红黑树00.引入和AVL树一样,红黑树也是一种自平......
  • 计算机毕业设计项目推荐,个人知识管理系统 79004(开题答辩+程序定制+全套文案 )上万套实
    摘 要尽管我们每天面临的信息越来越多,信息过载与信息噪音越来越严重,但只要我们能充分利用个人知识管理技能,借助有效的个人知识管理软件相信战胜海量信息不再是困难。本课题在分析了个人知识管理现状以及对现有的个人知识管理网站进行研究比较的基础上,针对网络交流互助的特......
  • 延时队列(RabbitMQ)
    1.概述延时任务,也叫延迟任务延迟队列:没有固定的开始时间,它常常是由一个事件触发的,而在这个事件触发之后的一段时间内触发另一个事件,任务可以立即执行,也可以延迟。2.技术选型RabbitMQ(死信交换机)实现方式TTL+私信交换机1.概述死信队列:存放死信的队列死信交换机:绑定死信队列......
  • 【数据结构与算法】之队列详解
    队列(Queue)是一种重要的线性数据结构,遵循先进先出、后进后出的原则。本文将更详细地介绍队列的概念、特点、Java实现以及应用场景。模运算小复习:a%b的值总是小于b5%4=1  5 %2=11%5=1  4%5=41.队列概念概述想象一下排队买票,先排队的人总是先买......
  • C++Socket通讯样例(服务端)
    1.创建Socket实例并开启。privateintOpenTcp(intport,stringip=""){//1.开启服务端try{_tcpServer=newSocket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);IPAddressipAddr=IPAddress.Any;......
  • C++11新特性:lambda表达式
    lambda表达式目录lambda表达式常见lambda表达式的省略式值的捕获lambda表达式的类型使用场景简述附:lambda的常量性......