C++中队列的顺序存储

2023-11-19

引言

队列先进先出,队头出队,队尾入队,其存储可以分为顺序存储和链式储存。本文记录队列的顺序存储。也就是队列中的元素存储的内存空间是连续的,这里使用数组来模拟线性队列。

示例

直接上代码:
SeqQueue.h

#pragma once

/**/
#define MAX_SIZE 1024
typedef struct SEQQUEUE {
	void* data[MAX_SIZE];
	int size;
}SeqQueue;

class MySeqQueue
{
public:
	MySeqQueue();
	~MySeqQueue();

	void pushSeqQueue(void * data);
	void popSeqQueue();
	void* getFrontSeqQueue();
	void* getBackSeqQueue();
	int getSizeSeqQueue();
	void clearSeqQueue();
private:
	SeqQueue *m_queue;
};

SeqQueue.cpp

#include "SeqQueue.h"

MySeqQueue::MySeqQueue()
{
	m_queue = new SeqQueue();
	m_queue->size = 0;
	for (int i = 0; i < MAX_SIZE;++i)
	{
		m_queue->data[i] = nullptr;
	}
}

MySeqQueue::~MySeqQueue()
{
	if (m_queue != nullptr)
	{
		delete m_queue;
		m_queue = nullptr;
	}
}

void MySeqQueue::pushSeqQueue(void * data)
{
	if (m_queue == nullptr)
	{
		return;
	}
	if (data == nullptr) 
	{
		return;
	}
	m_queue->data[m_queue->size] = data;
	m_queue->size++;
}

void MySeqQueue::popSeqQueue()
{
	if (m_queue == nullptr)
	{
		return ;
	}
	if (m_queue->size == 0) 
	{
		return;
	}
	void * fontData = m_queue->data[0];
	for (int i = 1; i < m_queue->size; ++i)
	{
		m_queue->data[i - 1] = m_queue->data[i];
	}
	m_queue->size--;
}

void * MySeqQueue::getFrontSeqQueue()
{
	if (m_queue == nullptr)
	{
		return nullptr;
	}
	if (m_queue->size == 0)
	{
		return nullptr;
	}

	return m_queue->data[0];
}

void * MySeqQueue::getBackSeqQueue()
{
	if (m_queue == nullptr)
	{
		return nullptr;
	}
	if (m_queue->size == 0)
	{
		return nullptr;
	}

	return m_queue->data[m_queue->size-1];
}

int MySeqQueue::getSizeSeqQueue()
{
	if (m_queue == nullptr)
	{
		return -1;
	}
	return m_queue->size;
}

void MySeqQueue::clearSeqQueue()
{
	if (m_queue == nullptr)
	{
		return ;
	}
	for (int i = 0; i < MAX_SIZE; ++i)
	{
		m_queue->data[i] = nullptr;
	}
	m_queue->size = 0;
}

main.cpp

#include <iostream>
#include "SeqQueue.h"

using namespace std;

typedef struct PERSON {
	char name[64];
	int age;
}Person;

void print(Person *data) 
{
	cout << "name;" << data->name << " age:" << data->age << endl;
}
void test() 
{
	MySeqQueue * queque = new MySeqQueue;
	Person p1 = {"sahus",34};
	Person p2 = {"护士",67};
	Person p3 = {"的防护",56};
	Person p4 = {"rjhuhxd",4};
	queque->pushSeqQueue(&p1);
	queque->pushSeqQueue(&p2);
	queque->pushSeqQueue(&p3);
	queque->pushSeqQueue(&p4);

	cout <<"size: "<<queque->getSizeSeqQueue()<<endl;
	cout << "front: " <<endl;
	Person *data = (Person*)queque->getFrontSeqQueue();
	print(data);
	cout << "back: " <<endl;
	Person *backData = (Person *)queque->getBackSeqQueue();
	print(backData);

	cout << "============元素出队================== " << endl;
	while (queque->getSizeSeqQueue() != 0)
	{
		Person *data = (Person*)queque->getFrontSeqQueue();
		print(data);
		queque->popSeqQueue();
	}
	
	delete queque;
	queque = nullptr;
}

int main()
{
	test();

	return 0; 
}

// 运行程序: Ctrl + F5 或调试 >“开始执行(不调试)”菜单
// 调试程序: F5 或调试 >“开始调试”菜单

// 入门使用技巧: 
//   1. 使用解决方案资源管理器窗口添加/管理文件
//   2. 使用团队资源管理器窗口连接到源代码管理
//   3. 使用输出窗口查看生成输出和其他消息
//   4. 使用错误列表窗口查看错误
//   5. 转到“项目”>“添加新项”以创建新的代码文件,或转到“项目”>“添加现有项”以将现有代码文件添加到项目
//   6. 将来,若要再次打开此项目,请转到“文件”>“打开”>“项目”并选择 .sln 文件

开发环境

vs2017控制台输出程序。

运行结果

在这里插入图片描述

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

C++中队列的顺序存储 的相关文章

随机推荐

  • 在Linux下编译micropython源码的方法(包括win10的ubuntu子系统)

    本文介绍了在Linux下编译micropython源码的方法 包括了虚拟机 win10子系统等 在Win10的应用商店中 提供了Linux的子系统 这是实际上是一个虚拟机软件 与virtualbox和vmplayer功能类似 下面就介绍在L
  • C语言 宏定义

    一 预备知识 一个项目可以通过 编译 链接最终形成一个可执行文件 每个源文件 cpp 都会单独编译 编译成一个目标文件 o 也可能是 obj 扩展名跟操作系统有关 然后系统把这些 o文件进行链接 最终形成一个可执行文件 编译做的事 词法 语
  • charles及弱网测试

    安装 安装完成后 charles gt help gt register 输入注册信息 Registered Name https zhile io License Key 48891cf209c6d32bf4 相关配置 1 安装根证书 h
  • 【华为OD机试】阿里巴巴找黄金宝箱(V)(C++ Python Java)2023 B卷

    时间限制 C C 1秒 其他语言 2秒 空间限制 C C 262144K 其他语言524288K 64bit IO Format lld 语言限定 C clang11 C clang 11 Pascal fpc 3 0 2 Java jav
  • 跨时钟域电路设计——结绳法

    信号从快时钟域到慢时钟域过渡时 慢时钟可能无法对快时钟变化太快的信号进行采样 之前的同步器法对两个时钟间的关系有要求 结绳法适用于任何时钟域之间的过渡 结绳法的原理是将快时钟信号的脉冲周期延长 等到慢时钟周期采样后再 解绳 还原为原来的脉冲
  • Java 基础系列(十六) --- Java中模板引擎的使用

    模板引擎 1 关于动态页面的渲染 2 非模板引擎的弊端 3 模板引擎 3 1 什么是模板引擎 3 2 Thymeleaf 语法 3 3 模板引擎的使用 4 总结 1 关于动态页面的渲染 渲染就是把数据和页面进行结合起来 主要分为服务器渲染和
  • Vue3 集成 UEditor puls 富文本编辑器

    一 前端配置 1 下载代码https gitee com modstart lib ueditor plus tree master 2 解压压缩包 如下图 3 拿到dist文件夹的内容 重命名为UEditor 并将其复制到vue项目的pu
  • 未找到esUtil_win32.c 您需要查找 esUtil_win32.c 以通过查看源来确定当前调用堆栈帧

    前言 在调试OPENGL ES 3 0编程指南 原书第2版 中文版 pdf 中第8章的例子报错 在调试时 发现 esUtil win32 c文件中的代码 如下 if esMain esContext GL TRUE return 1 这里r
  • 如何零基础自学c/c++语言?

    现在零基础学习C C 无非就两种方法 一种是自学还有 一种就是报班学习 关于报班学习在这里就不多说了 那么今天就说怎么从零基础开始自学C C 编程吧 先学习C语言入门 那么问题来了 怎么去学习C语言呢 一开始肯定是要看书 这里推荐的入门书籍
  • scipy.stats的用法——常见的分布和函数

    介绍python统计函数库scipy stats中常见的分布和函数 commom distributions uniform norm poisson bernoulli expon lognorm norm t chi2 f commom
  • mysql中geometry字段的查询和保存

    有段时间为了追求效率 把用es相关的地理位置功能都去掉了 使用mysql已有的geometry的功能做地理位置 mybatis这块 TableName value t event info autoResultMap true 如果使用复杂
  • python根据excel时间表统计24小时各小时区间点的个数

    1 首先使用excel中的HOUR 函数 将日期数据 年 月 日 时 分 秒 转换为小时 表格命名为hour xlsx 2 使用python读取excel数据hour xlsx 将小时列转换为列表hour 将列表hour转换为集合myset
  • Java词频统计算法(使用单词树)

    许多英语培训机构 如新东方 都会出几本 高频词汇 的书 主要内容是统计近几年来各类外语考试中屡次出现的高频词汇 帮助考生减少需要背的生词的数量 但这些高频是如何被统计出来的呢 显然不会用手工去计算 假如我们已经将一篇文章存在一字符串 Str
  • EditText的三种监听内容的方式

    editText addTextChangedListener object TextWatcher override fun onTextChanged s CharSequence start Int before Int count
  • 招聘数据采集+Hive数据分析+数据可视化

    1 需求 背景描述 近年来随着IT产业的快速发展 全国各地对IT 类的人才需求数量也在不断 增多 XHS集团 为了明确今后IT产业人才培养方向 在多个省份进行 IT公 司岗位情况调研分析 你所在的小组将承担模拟调研分析的任务 通过在招聘 网
  • 【Apifox Helper】自动生成接口文档,IDEA+Apifox懒人必备

    文章目录 前言 缘由 接口文档对接爽 整理起来真费脑 本文阅读时长 约10分钟 前置条件 1 IDEA开发工具 2 Apifox 不必要 主要目标 一秒生成接口文档 水图 IDEA中项目接结构图 生成到Apifox接口文档图 试用人群 1
  • PowerDesigner15.1如何安装?汉化破解版安装教程(含安装文件、汉化包、破解文件)

    powerdesigner是能进行数据库设计的强大的软件 是一款开发人员常用的数据库建模工具 使用它可以分别从概念数据模型 Conceptual Data Model 和物理数据模型 Physical Data Model 两个层次对数据库
  • glog详解

    glog详解 1 glog的安装与使用 1 下载glog http code google com p google glog downloads detail name glog 0 3 3 tar gz 2 安装glog configu
  • 请用详细列出宝塔搭建Nacos的流程

    好的 为了在宝塔中搭建 Nacos 服务 您需要执行以下步骤 下载 Nacos 的最新版本并解压缩 使用文本编辑器打开 conf application properties 文件 并修改其中的数据库配置 使 Nacos 可以连接到您的数据
  • C++中队列的顺序存储

    队列 引言 示例 开发环境 运行结果 引言 队列先进先出 队头出队 队尾入队 其存储可以分为顺序存储和链式储存 本文记录队列的顺序存储 也就是队列中的元素存储的内存空间是连续的 这里使用数组来模拟线性队列 示例 直接上代码 SeqQueue