队列模拟实现

2023-05-16

队列的特点:


先进先出/后进后出


队列的常见操作:


Push——往队尾插入一个元素

Pop——从队头删除一个元素

Front——返回队列的第一个元素

Back——返回队列的最后一个元素

Size——求队列的元素个数

Empty——判断队列是否为空


队列的模拟实现:


#include<assert.h>

template<class T>
struct QueueNode
{
	T _data;
	QueueNode<T>* _next;

	QueueNode(const T& data)
		: _data(data)
		, _next(NULL)
	{}
};

template<class T>
class Queue
{
	typedef QueueNode<T> Node;
public:
	Queue()		//构造函数
		: _head(NULL)
		, _tail(NULL)
	{}

	~Queue()		//析构函数
	{
		Node* cur = _head;
		while (cur)
		{
			Node* del = cur;
			cur = cur->_next;
			delete del;
		}
	}

	void Push(const T& data)	//在末尾插入一个数
	{
		if (_head == NULL)		//为空
		{
			_head = _tail = new Node(data);
		}
		else      //不为空
		{
			_tail->_next = new Node(data);
			_tail = _tail->_next;
		}
	}

	void Pop()					//删除第一个元素
	{
		if (_head == _tail)	//只有一个元素时
		{
			delete _head;
			_head = _tail = NULL;
		}
		else               //有多个元素时
		{
			Node* del = _head;
			_head = _head->_next;

			delete del;
		}
	}

	size_t Size()	//返回队列中元素的个数
	{
		size_t count = 0;
		Node* cur = _head;
		while (cur)
		{
			++count;
			cur = cur->_next;
		}
		return count;
	}

	T& Front()	//返回队列中的第一个元素
	{
		assert(_head);
		return _head->_data;
	}

	T& Back()	//返回队列的最后一个元素
	{
		assert(_tail);
		return _tail->_data;
	}

	bool Empty()	//判断一个队列是否为空
	{
		return _head == NULL;
	}

protected:
	Node* _head;
	Node* _tail;
};


void TestQueue()
{
	Queue<int> q;
	q.Push(1);
	q.Push(2);
	q.Push(3);
	q.Push(4);
	q.Push(5);

	cout << q.Size() << endl;
	while (!q.Empty())
	{
		cout << q.Front() << " ";
		q.Pop();
	}
	cout << endl;
}

#include<iostream>
using namespace std;
#include "queue.h"

int main()
{
	TestQueue();
	system("pause");
	return 0;
}


代码运行结果:




本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

队列模拟实现 的相关文章

  • k8s核心概念Controller进阶之DaemonSet、Job、CronJob

    文章目录 DaemonSetDaemonSet介绍案例演示 JobJob介绍案例演示简单job场景演示创建固定次数job CronJobCronJob介绍CronJob应用案例 DaemonSet DaemonSet介绍 DaemonSet
  • k8s免费在线集群工具

    kubernetes xff08 简称 K8s xff09 是一个开源的 xff0c 用于管理云平台中多个主机上的容器化的应用 它的目标是让部署容器化的应用简单并且高效 xff08 powerful xff09 xff0c Kubernet
  • strlen函数的实现

    strlen函数作为一个在面试经常被问到的问题 xff0c 相信在不少求职的面经经历中都有强调 首先看一下strlen函数的作用和基本的作用 xff1a 计算字符串的长度而不包括 结束志 39 0 39 由此我们又可以联想到与他相类似的相对
  • C++考试小程序编程思路和简单设计

    求某一年是闰年 xff08 1 xff09 书上源程序 include lt iostream gt using namespace std int main int year bool leap cout lt lt 34 请输入年份 x
  • 取款机的语言&拆分数字&数字的秘密

    生活中我们都离不开和银行打交道 xff0c 诸如存钱取钱之类 xff0c 那么关于ATM机是如何将钱取出来和存进去的 xff0c 为什么一个小小的机子可以处理这么多不同的事务 xff0c 下面就让我们走进ATM机看看ATM机是如何工作的 模
  • 水仙花数和递归调用举例

    lt div style 61 34 font size 13 3333px widows auto font family 39 lucida Grande 39 Verdana 39 Microsoft YaHei 39 line he
  • %s使用

    lt xliff g id 61 34 mailbox 34 gt s lt xliff g gt 在android xff1a String xml文件中如下 xff1a lt string name 61 34 XXX 34 gt 34
  • 猜数字,二分法和杨辉三角

    include lt stdio h gt include lt stdlib h gt include lt time h gt void menu printf 34 1 play 0 exit n 34 int main int in
  • 逻辑思维小测试

    5位运动员参加了10米台跳水比赛 xff0c 有人让他们预测比赛结果 A选手说 xff1a B第一 xff0c 我第三 B选手说 xff1a 我第二 xff0c E第四 C选手说 xff1a 我第一 xff0c D第二 D选手说 xff1a
  • 简单逆序输出和空格转换

    1 有一个字符数组的内容为 34 student a am i 34 请你将数组的内容改为 34 i am a student 34 要求 xff1a 不能使用库函数 只能开辟有限个空间 xff08 空间个数和字符串的长度无关 xff09
  • 详解交换两个数的值

    交换两个数值 xff1a 简单来说就是将内存a中的值变成内存b中的值 xff0c 将内存b中的值变成内存a中的值 xff0c 而要想达到这种效果需要的就是交换他们彼此的地址 xff08 传地址 xff09 xff0c 如下图所示 xff08
  • 预编译小常识

    熟悉预处理标识符 xff1a LINE FILE DATE TIME include lt stdio h gt int main int i 61 0 for i 61 0 i lt 10 i 43 43 printf 34 file s
  • 数组知识总结

    一维数组 xff1a 先看两个最简单的语句 int a xff1b int b 10 显然a是一个整形变量 xff08 标量 xff09 xff0c b 10 称为数组 xff0c 表示一些整形值得集合 b表示一个指向整形的指针常量 xff
  • string函数的各种实现方式

    lt span style 61 34 font size 24px 34 gt strcpy lt span gt lt span style 61 34 font size 18px 34 gt lt span gt lt span s
  • 整数的各位数之和与指数的递归求法

    写一个递归函数DigitSum n xff0c 输入一个非负整数 xff0c 返回组成它的数字之和 include lt stdio h gt int DigitSum unsigned int n unsigned int sum 61
  • 两种计算器的实现方式

    简单的switch case实现计算器功能 xff1a include lt stdio h gt include lt stdlib h gt menu 显示计算机菜单 printf 34 1 Add n 34 printf 34 2 S
  • 简单电话本实现

    头文件模块 xff1a define CRT SECURE NO WARNINGS 1 实现一个通讯录 xff1b 通讯录可以用来存储1000个人的信息 xff0c 每个人的信息包括 xff1a 姓名 性别 年龄 电话 住址 ifndef
  • linux 画图不执行 Can't connect to X11 window server

    java在图形处理时调用了本地的图形处理库 在利用Java作图形处理 xff08 比如 xff1a 图片缩放 xff0c 图片签名 xff0c 生成报表 xff09 时 xff0c 如果运行在windows上不会出问题 如果将程序移植到Li
  • 电话本再实现

    头文件模块 xff1a define CRT SECURE NO WARNINGS 1 实现一个通讯录 xff1b 通讯录可以用来存储1000个人的信息 xff0c 每个人的信息包括 xff1a 姓名 性别 年龄 电话 住址 ifndef

随机推荐

  • 又一波str函数的模拟实现

    实现strchr 查找一个字符c在另一个字符串str中第一次出现的位置找到返回该位置的指针 xff0c 找不到返回NULL include lt stdio h gt char my strchr const char str int c
  • 其实你也懂指针计算

    在C语言中 xff0c 指针运算是一个让很多人感到无助的东西 xff0c 尤其在结合上数组的下标运算和指针的多级访问 xff0c 更加让指针这个东西更加神秘 xff0c 今天我们就来仔细的看一下指针之间的指向关系 下面来看一下这道题 xff
  • 注释转换

    编写一个小项目将一个一个文件中的注释都转换成C 43 43 的注释风格 设计部分 xff1a xff08 1 xff09 头文件模块 xff1a 包括模块中需要引用的头文件定义 xff0c 需要实现的主要函数的声明 xff08 2 xff0
  • atoi函数实现的各种考虑因素

    define CRT SECURE NO WARNINGS 1 include lt stdio h gt atoi实现 xff1a 将一个字符串转换为对应的整数 enum Status 定义两个枚举常量判断所给变量是否合法 kValid
  • 继承小结

    1 概念 面向对象程序设计使代码可以实现复用的最重要手段 xff0c 允许程序员在原有类特性的基础上进行扩展 xff0c 增加新的功能 2 定义格式 xff1a 首先是一个冒号 xff0c 后面紧跟以逗号分隔的基类列表 xff0c 其中每个
  • 到底多态有多难

    1 概念 多态 简单来说就是一种事物具有多种形式或者形态的特征 xff0c 好比我们生活中最简单的事物 xff0c 就像每天都会用到的水 xff0c 水有三态 xff0c 即固态 液态和气态 生活中这种多多态的例子很多 xff0c 同样在我
  • 解析模板(上)--模板函数

    模板引出 xff1a 在学习关于类的特性中 xff0c 有一个重要的特性叫做多态 xff0c 同样关于模板的学习也可以简单的把它理解成一种多态 xff0c 只不过模板中所涉及的多态是关于类型的替换 xff0c 正如在生活中使用模具一样 xf
  • 模板&仿函数的应用--冒泡排序

    普通版冒泡排序 对于冒泡排序的算法大家并不陌生 xff0c 将相临两个数一次比较 xff0c 然后将最大值或者最小值先排出来 xff0c 一般来说这样的话我们需要在碗面写两个函数来分别实现这两个算法 xff0c 程序代码如下 xff1a s
  • String类模拟

    span style font size 24px class String friend ostream amp operator lt lt ostream amp os String amp s 输出运算符重载 friend istr
  • win10主机ping不通win10虚拟机

    原因是ICMP回显请求规则未开启 xff0c 解决方法在文章末尾 环境说明 win10虚拟机 192 168 136 136 win10虚拟机采用的网络连接是 NAT 模式 ipconfig结果如下 xff1a 以太网适配器 Etherne
  • <操作系统> 理发店问题(选做)C语言实现

    问题描述 xff1a 代码 xff1a span class token macro property span class token directive keyword include span span class token str
  • 特殊矩阵的压缩存储及转置

    一 对称矩阵及其压缩存储 1 对称矩阵 在矩阵中最特殊的一类应该属于对称矩阵 xff0c 对称矩阵的行和列是对应相等的 对称矩阵就是关于主对角线对称 xff0c 两边的元素的值对应相等 xff0c 在数学中我们把用主对角线隔开 xff0c
  • STL浅析set&map

    map和set的底层实现原理和接口使用 1 set和map的底层实现 set和map属于STL中的一种关联式容器 xff0c 底层实现是红黑树 2 set容器的特点 1 set和map 容器中的元素自动进行有序排列 默认为升序排列 xff1
  • Linux下的文件操作权限

    Linux下进入一个目录需要什么权限 xff1f 普通用户下 xff1a 首先我们在普通用户下 xff0c 取消文件code的所有权限chmod 000 code 当我们执行cd code 想进入当前目录时 xff0c 发现权限不允许 接下
  • linux下的常见命令

    cd change directory 进入个人的主目录 cd home 进入 39 home 39 目录 39 cd 返回上一级目录 cd 返回上两级目录 cd 返回上次所在的目录 ls list 查看目录中的文件 ls l 显示文件和目
  • task_struct结构体成员小结

    背景知识 task stuct结构体 被称为进程描述符 xff0c 用 来管理进程Linux内核的进程 xff0c 这个结构体包含了一个进程所需的所有信息 它定义在 include linux sched h文件中 可以说它是linux内核
  • Linux下的简单进度条实现

    进度条 计算机在处理任务时 xff0c 实时的 xff0c 以图片形式显示处理任务的速度 xff0c 完成度 xff0c 剩余未完成任务量的大小 xff0c 和可能需要处理时间 xff0c 一般以长方形条状显示 主要功能 xff1a 1 显
  • 九大排序之——希尔排序

    希尔排序 xff1a 思想 xff1a 希尔排序是为了防止直接插入排序出现最坏情况所做的一种改进 xff0c 将原本的排序过程分为预排序和直接插入排序两个阶段 预排序阶段 xff1a 将整个预排序的序列分为若干个待排序的子序列 xff0c
  • 僵尸进程与孤儿进程模拟实现

    背景知识 僵尸进程 xff08 Zombies xff09 xff1a 1 僵尸进程是一个比较特殊的状态 xff0c 当进程退出父进程 xff08 使用wait 系统调用 xff09 没有没有读取到子进程退出的返回代码时就会产生僵尸进程 僵
  • 队列模拟实现

    队列的特点 xff1a 先进先出 后进后出 队列的常见操作 xff1a Push 往队尾插入一个元素 Pop 从队头删除一个元素 Front 返回队列的第一个元素 Back 返回队列的最后一个元素 Size 求队列的元素个数 Empty 判