数据结构 队列 C语言实现

数据结构 队列 C语言实现

先将代码分享出来,后续更新使用说明

/**
 * 文件名:	uqueue.c
 * 说明:	队列实现源文件
 * 作者: 	HAUE.Y2C
 */
#include "uqueue.h"

QueueBuffer_Type QueueBuffer;

//队列初始化
QueueBuffer_Type * Queue_Register(u16 mSize)
{
	QueueBuffer_Type *pQueueBuffer;
	pQueueBuffer = (QueueBuffer_Type *)malloc(sizeof(QueueBuffer_Type));   				 	//分配记录队列信息的结构变量
	memset((u8 *)pQueueBuffer, 0, sizeof(QueueBuffer_Type));               			 		//记录队列信息的结构变量清0
	pQueueBuffer->BufferStart = pQueueBuffer->pIn = pQueueBuffer->pOut = malloc( mSize ); 	//分配队列所需内存
	pQueueBuffer->BufferEnd = pQueueBuffer->BufferStart + mSize;    						//队列结束指针
    
	return pQueueBuffer;
}

//将数据压入队列
void Queue_Push(QueueBuffer_Type * pQueueBuffer, u8 mData)
{
	u8 *p = NULL;
	p = pQueueBuffer->pIn;
	*p++ = mData;						//mData 给了pQueueBuffer->pIn并且加1,mcount++
	if (p == (pQueueBuffer->BufferEnd + 1))
	{
	   p = pQueueBuffer->BufferStart;
	}
	pQueueBuffer->pIn = p;
	pQueueBuffer->mCount++;
}

//将数据弹出队列
unsigned char Queue_Pop(QueueBuffer_Type *pQueueBuffer)
{
	unsigned char mData;
	unsigned char *p;
	p = pQueueBuffer->pOut;				//把pout的送出去,pout加1,并且mcount--
	mData = *p;
	
	if(++p == (pQueueBuffer->BufferEnd + 1))
	{
	   p = pQueueBuffer->BufferStart;
	}
	
	pQueueBuffer->pOut = p;
	pQueueBuffer->mCount--;
	return mData;
}

//读出队列指定序号数据
unsigned char Queue_Read(QueueBuffer_Type *pQueueBuffer, unsigned char mId )
{
	unsigned char *pTemp;
	pTemp = pQueueBuffer->pOut + mId;
	if( pTemp < pQueueBuffer->BufferEnd )
	{
       return(*pTemp);
	}
	else
	{
       return(*(pTemp - pQueueBuffer->BufferEnd + pQueueBuffer->BufferStart));
	} 
}

//返回队列数据个数
u16 Queue_Num(QueueBuffer_Type *pQueueBuffer )
{
	return pQueueBuffer->mCount;
}

//队列清空
void Queue_Clear(QueueBuffer_Type *pQueueBuffer )
{
	pQueueBuffer->pIn = pQueueBuffer->pOut = pQueueBuffer->BufferStart;
	pQueueBuffer->mCount = 0;
}

//填充队列
u8 Queue_Full(QueueBuffer_Type *pQueueBuffer, u16 MAX_Entry)
{
    return (pQueueBuffer->mCount == MAX_Entry);
}

/**
 * 文件名:	uqueue.h
 * 说明:	队列的实现
 * 作者: 	HAUE.Y2C
 */
#ifndef __UQUEUE_H
#define __UQUEUE_H	 

#include "sys.h"
#include "main.h"

typedef struct 
{
	u8 *BufferStart;  					//缓冲区起始点
	u8 *BufferEnd;   	 				//缓冲区结束点
	u8 *pIn;							//写指针
	u8 *pOut;         					//读指针
	u16 mCount;       					//缓冲区数据个数	
}QueueBuffer_Type;

typedef struct 
{
  QueueBuffer_Type *pReceiveDataBuffer;
  QueueBuffer_Type *pSendDataBuffer;
}USARTBuffer_Type;

extern QueueBuffer_Type QueueBuffer;

//队列初始化
QueueBuffer_Type * Queue_Register( u16 mSize );
//将数据压入队列
void Queue_Push(QueueBuffer_Type  *pQueueBuffer, u8 mData );
//将数据弹出队列
u8	 Queue_Pop(QueueBuffer_Type  *pQueueBuffer );
//读出队列指定序号数据
u8 	 Queue_Read(QueueBuffer_Type *pQueueBuffer, u8 mId );
//返回队列数据个数
u16  Queue_Num(QueueBuffer_Type *pQueueBuffer );
//队列清空
void Queue_Clear(QueueBuffer_Type *pQueueBuffer );
//填充队列
u8 	 Queue_Full(QueueBuffer_Type *pQueueBuffer, u16 MAX_Entry);

#endif 

其他

如果有用请点赞,谢谢!!!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值