c++笔记-循环队列

标题内容
编者炎芯随笔
发布时间2020年8月26日13:53:31
版本V-1.0

1.前言

2.循环队列实现

2.1.头文件

	#pragma once
	
	using namespace std;
	
	typedef struct stPackHead
	{
		int dataLen; //add by LYK 2019年12月10日
	//	int flags;	 //add by LYK 2019年12月10日
	}stPackHead;
	
	typedef struct 
	{
		stPackHead head;	//add by LYK 2019年12月10日
		char data[64 * 1024 * 1024];//2020年6月12日16:38:15 修改为64M每包
		//char data[16 * 1024 * 1024];//2020年6月12日16:38:15 修改为16M每包
		//char data[4 * 1024 * 1024];//2019年11月26日13:47:38,修改为4M每包
		//char data[512 * 1024];//2020年6月10日17:57:26,修改为512KB每包
	}_DATA, *pDATA;
	
	typedef struct queue
	{
		_DATA *pBase;
		int front;    //指向队列第一个元素
		int rear;    //指向队列最后一个元素的下一个元素
		int maxsize; //循环队列的最大存储空间
	}QUEUE, *PQUEUE;
	
	bool CreateQueue(PQUEUE Q, int maxsize);
	
	bool FullQueue(PQUEUE Q);
	bool EmptyQueue(PQUEUE Q);
	int  GetQueueSize();//add BY LYK 2019年11月27日14:06:24
	
	bool Enqueue(PQUEUE Q, _DATA* data);
	bool Dequeue(PQUEUE Q, _DATA *data);
	
	bool Clequeue(PQUEUE Q);
	void DestroyQueue(PQUEUE Q);

2.1.实现文件

	#include "stdafx.h"
	#include "C_SingleCircuList.h"
	
	_DATA *g_pBase;
	int g_queue_size;//add BY LYK 2019年11月27日14:06:24
项目内容
函数名CreateQueue
函数参数PQUEUE Q, int maxsize
功能说明创建队列
使用情况布尔值
示例参见如下代码
	//创建队列,分配内存空间
	bool CreateQueue(PQUEUE Q, int maxsize)
	{
		Q->pBase = (_DATA*)malloc(sizeof(_DATA)*maxsize);
		if (!Q->pBase)
		{
			TRACE("malloc error\n");
			AfxMessageBox(_T("创建队列失败"));
			exit(-1);
	
			return false;
		}
	
	#if 0
		if (NULL == Q->pBase)
		{
			TRACE("Memory allocation failure\n");
			exit(-1);        //退出程序
		}
	#endif
		
		g_pBase = Q->pBase;
		memset(Q->pBase, 0, sizeof(_DATA)*maxsize);
	
		Q->front = 0;         //初始化参数
		Q->rear = 0;
		Q->maxsize = maxsize;
		g_queue_size = 0;//add BY LYK 2019年11月27日14:06:24
		return true;
	}

项目内容
函数名Enqueue
函数参数PQUEUE Q, _DATA* data
功能说明入队操作
使用情况布尔值
示例参见如下代码
		//入队
	bool Enqueue(PQUEUE Q, _DATA* data)
	{
		if (!data)
		{
			TRACE("data error!!!\n");
			return false;
		}
		else if (FullQueue(Q))
		{
			TRACE("FullQueue!!!\n");
			return false;
		}	
		else
		{
			memset((char*)&Q->pBase[Q->rear], 0, sizeof(_DATA));
			memcpy((char*)&Q->pBase[Q->rear], (char*)data, sizeof(_DATA));
			Q->rear = (Q->rear + 1) % Q->maxsize;
			g_queue_size++;//add BY LYK 2019年11月27日14:06:24
			return true;
		}
	}

项目内容
函数名Dequeue
函数参数PQUEUE Q, _DATA* data
功能说明出队操作
使用情况布尔值
示例参见如下代码
	//出队列
	bool Dequeue(PQUEUE Q, _DATA *data)
	{
		if (EmptyQueue(Q))
		{
			return false;
		}
		else
		{
			memcpy(data, (char*)&Q->pBase[Q->front], sizeof(_DATA));
			Q->front = (Q->front + 1) % Q->maxsize;
			g_queue_size--;//add BY LYK 2019年11月27日14:06:24
			return true;
		}
	}

项目内容
函数名Clequeue
函数参数PQUEUE Q
功能说明清空队列
使用情况布尔值
示例参见如下代码
		//清空队列
	bool Clequeue(PQUEUE Q)
	{
		if (EmptyQueue(Q))
		{
			return false;//原本就是空的
		}
		else
		{
			Q->front = 0;        
			Q->rear = 0;
			g_queue_size = 0;//add BY LYK 2019年11月27日14:06:24
			return true;
		}
	}

项目内容
函数名DestroyQueue
函数参数PQUEUE Q
功能说明销毁队列操作
使用情况void
示例参见如下代码
	//销毁队列操作
	void DestroyQueue(PQUEUE Q)
	{
		if (g_pBase)
		{
			free(g_pBase);
		}
		 
	}

项目内容
函数名FullQueue
函数参数PQUEUE Q
功能说明判断队列是否已填满
使用情况void
示例参见如下代码
	bool FullQueue(PQUEUE Q)
	{
		if (Q->front == (Q->rear + 1) % Q->maxsize)    //判断循环链表是否满,留一个预留空间不用
			return true;
		else
			return false;
	}

项目内容
函数名EmptyQueue
函数参数PQUEUE Q
功能说明判断队列是否已填空
使用情况void
示例参见如下代码
	bool EmptyQueue(PQUEUE Q)
	{
		if (Q->front == Q->rear)    //判断是否为空
			return true;
		else
			return false;
	}

项目内容
函数名GetQueueSize
函数参数void
功能说明获取队列的大小
使用情况void
示例参见如下代码
	//add BY LYK 2019年11月27日14:06:24
	int GetQueueSize()
	{
		return g_queue_size;
	}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值