C语言封装的环形队列
2021-01-18 13:14
标签:c语言 eof clu 环形队列 queue error fun malloc 代码 C语言封装的环形队列 标签:c语言 eof clu 环形队列 queue error fun malloc 代码 原文地址:https://www.cnblogs.com/veis/p/12913073.html1、源代码
#include "queue.h"
/**
* [CreateQueue 创建一个队列]
* @param nCount [队列的长度]
* @return [队列指针]
*/
p_queue CreateQueue(uint32_t nCount)
{
p_queue p = malloc(sizeof(struct SQueue));
p->m_pData = malloc(sizeof(DATA) * nCount); // 核心数据长度
p->m_nCount = nCount; // 队列长度
p->m_nSize = 0; // 队列中元素个数
p->m_nHead = p->m_nTail = 0; // 队头和队尾
return p;
}
/**
* [RemoveAll 释放队列中申请的内存]
* @param p [队列指针]
*/
void RemoveAll(p_queue p)
{
if(!p)
return;
p->m_nCount = p->m_nSize = 0;
p->m_nHead = p->m_nTail = 0;
free(p->m_pData);
free(p);
}
/**
* [GetSize 获取队列中的元素个数]
* @param p [队列指针]
* @return [队列中元素的个数]
*/
int GetSize(p_queue p)
{
ASSERT_ERROR(p);
return p->m_nSize;
}
/**
* [IsFull 判断队列是否满了]
* @param p [队列指针]
* @return [满则返回1.否则返回0]
*/
int IsFull(p_queue p)
{
ASSERT_ERROR(p);
return (p->m_nTail + 1) % p->m_nCount == p->m_nHead;
}
/**
* [IsEmpty 判断队列是否为空]
* @param p [队列指针]
* @return [空则返回1,否则返回0]
*/
int IsEmpty(p_queue p)
{
ASSERT_ERROR(p);
return p->m_nHead == p->m_nTail;
}
/**
* [Push 入队一个数据]
* @param p [队列指针]
* @param pdata [需要入队的数据的地址]
* @return [成功入队返回TRUE,否则返回FALSE]
*/
int Push(p_queue p, const DATA *pdata)
{
ASSERT_ERROR(p);
if(IsFull(p))
return FALSE;
++(p->m_nSize);
p->m_nTail = p->m_nTail % p->m_nCount;
p->m_pData[(p->m_nTail)++] = *pdata;
return TRUE;
}
/**
* [PushData 入队一个数据]
* @param p [队列指针]
* @param d [需要入队的数据]
* @return [成功入队返回TRUE,否则返回FALSE]
*/
int PushData(p_queue p, const DATA d)
{
ASSERT_ERROR(p);
if(IsFull(p))
return FALSE;
++(p->m_nSize);
p->m_nTail = p->m_nTail % p->m_nCount;
p->m_pData[(p->m_nTail)++] = d;
return TRUE;
}
/**
* [Pop 弹出一个元素]
* @param p [队列指针]
* @param pdata [接收弹出的数据,不需要此传出参数可以输入NULL]
* @return [成功弹出返回TRUE,否则返回FALSE]
*/
int Pop(p_queue p, DATA *pdata)
{
ASSERT_ERROR(p);
if (IsEmpty(p))
return FALSE;
--(p->m_nSize);
p->m_nHead = p->m_nHead % p->m_nCount;
if(pdata)
*pdata = p->m_pData[p->m_nHead];
++(p->m_nHead);
return TRUE;
}
2、头文件
#ifndef __QUEUE_H__
#define __QUEUE_H__
#include
上一篇:java 访问控制权限
下一篇:python里面的xlrd模块