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();
}
// 自动调用析构函数
}