C++实现一个简单的数组队列

C++实现一个简单的数组队列

/**---------------------------------------
* 文件名称: CSeqQueue.h
* 功能描述: 数组实现队列
* 创建标识: xad 2022/2/9
*
* 修改标识:
* 修改描述:
------------------------------------------**/

#ifndef SEQQUEUE_SEQQUEUE_H
#define  SEQQUEUE_SEQQUEUE_H

const int MATH_MAX = 1024;

namespace Algo04
{
	class CSeqQueue
	{
	private:
		void*		_pData[MATH_MAX]; //数组指针存放数据
		int			_nSize;			  //元素个数

	public:
		CSeqQueue();
		~CSeqQueue();

		/**
		*  @brief    入队
		*
		*  @param    void * data
		*  @return   void
		*/
		void push_seqQueue(void* data);

		/**
		*  @brief    返回队头元素
		*
		*  @return   void*
		*/
		void* front_seqQueue();

		/**
		*  @brief    出队
		*
		*  @return   void
		*/
		void pop_seqQueue();

		/**
		*  @brief    返回队尾元素
		*
		*  @return   void*
		*/
		void* back_seqQueue();

		/**
		*  @brief    返回大小
		*
		*  @return   int
		*/
		int get_size() const;

		/**
		*  @brief    清空队列
		*
		*  @return   void
		*/
		void clear_seqQueue();

	};
}

#endif
#include "CSeqQueue.h"
#include <iostream>

Algo04::CSeqQueue::CSeqQueue()
{
	for (auto &tmp : _pData)
	{
		tmp = nullptr;
	}
	_nSize = 0;
}

Algo04::CSeqQueue::~CSeqQueue()
{
	// 数组所用数组未使用new创建,无需显式释放
	std::cout << "free SeqQueue!" << std::endl;

}

void Algo04::CSeqQueue::push_seqQueue(void * data)
{
	if (data == nullptr)
	{
		return;
	}

	if ( _nSize >=MATH_MAX)
	{
		return;
	}

	_pData[_nSize++] = data;
}

void* Algo04::CSeqQueue::front_seqQueue()
{
	if (_nSize == 0)
	{
		return nullptr;
	}

	return _pData[0];
}

void Algo04::CSeqQueue::pop_seqQueue()
{
	if (_nSize == 0)
	{
		return;
	}

	for (int i = 0; i < _nSize - 1;i++)
	{
		_pData[i] = _pData[i + 1];
	}

	--_nSize;
}

void * Algo04::CSeqQueue::back_seqQueue()
{
	if (_nSize == 0)
	{
		return nullptr;
	}

	return _pData[_nSize - 1];
}

int Algo04::CSeqQueue::get_size() const
{
	return _nSize;
}

void Algo04::CSeqQueue::clear_seqQueue()
{
	if (_nSize == 0)
	{
		return;
	}

	_nSize = 0;
}

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


using namespace std;
using namespace Algo04;

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


void test_05(void);

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

void test_05(void)
{
	// 创建队列
	CSeqQueue queue;

	// 创建数据
	Person p1 = { "aaa", 10 };
	Person p2 = { "bbb", 20 };
	Person p3 = { "ccc", 30 };
	Person p4 = { "ddd", 40 };
	Person p5 = { "eee", 50 };

	// 数据入队列
	queue.push_seqQueue(&p1);
	queue.push_seqQueue(&p2);
	queue.push_seqQueue(&p3);
	queue.push_seqQueue(&p4);
	queue.push_seqQueue(&p5);

	// 输出队尾元素
	auto backPerson = (Person*)queue.back_seqQueue();
	std::cout << "Name:" << backPerson->name << " Age:" << backPerson->age << std::endl;

	// 输出
	while (queue.get_size() > 0) {
		// 取队头元素
		auto p = (Person*)queue.front_seqQueue();
		std::cout << "Name:" << p->name << " Age:" << p->age << std::endl;
		// 从队头弹出元素
		queue.pop_seqQueue();
	}
	// 自动调用析构函数


}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值