自己写的纯C实现的FIFO队列

queue.c

#include "queue.h"
#include "stdio.h"




int Effective_Num;	//当前有效数据个数 
int front;			//指向队列的头部
int rear;			//指向队列的尾部
u8	FIFO_Array[FIFO_depth_Max][FIFO_With_Max];


void Queue_Init() //队列的初始化
{
	front=0;
	rear=0;
	Effective_Num=0; 
}

//u8 Queue_Empty()  //判断队列是否为空
//{
//	if(Effective_Num==0)	return 0; 
//	else					return 1;
//}

u8 Queue_put(u8 *input) //入队操作
{
	u8 i=0;
	if(Effective_Num<FIFO_depth_Max)		//未满 
	{
		Effective_Num++;						//有效数据++ 
		
		for(i=0;i<FIFO_With_Max;i++)
		{
			FIFO_Array[rear][i]	=	input[i];	//送入FIFO 
		}
		
		if(rear<(FIFO_depth_Max-1))	rear++;		//数据尾--
		else						rear=0;
		
		return FIFO_Success;
	}
	return FIFO_Error;
}


u8 Queueget(u8 *ouput)  //出队操作
{
	u8 i=0;
	
	if(Effective_Num>0)
	{
		Effective_Num--;
		
		for(i=0;i<FIFO_With_Max;i++)
		{
			*ouput	=	FIFO_Array[front][i];//送入FIFO 
			ouput++;
		}
		
		if(front<FIFO_depth_Max-1)			front++;		//数据头++ 
		else								front=0;
		
		return FIFO_Success;
	}
	return FIFO_Error;
}




Queue.h

#ifndef Queue_H
#define Queue_H

#define	u8	unsigned char
#define	u16	unsigned int
#define	u32	unsigned long 

#define	FIFO_Success	1
#define	FIFO_Error		0


#define	FIFO_depth_Max	10			//FIFO深度
#define	FIFO_With_Max	10			//FIFO宽度 


void Queue_Init() ;//队列的初始化
u8 Queue_Empty() ; //判断队列是否为空
u8 Queue_put(u8 *input) ;//入队操作

u8 Queueget(u8 *ouput) ; //出队操作


#endif




main.c

#include<stdio.h>
#include "queue.h"

extern	int Effective_Num;	//当前有效数据个数 
extern	int front;			//指向队列的头部
extern	int rear;			//指向队列的尾部

int main(void)
{
	u8 in[10]={0},ou[10]={0};
	u8 i=0;
	
	Queue_Init();
	
	for(i=0;i<10;i++)
	{
		int j=0;
		switch(i)
		{
			case 0:	for(j=0;j<10;j++)	in[j]=j;break;
			case 1:	for(j=0;j<10;j++)	in[j]=j*2;break;
			case 3:	for(j=0;j<10;j++)	in[j]=j*3;break;
			case 4:	for(j=0;j<10;j++)	in[j]=j*4;break;
			case 5:	for(j=0;j<10;j++)	in[j]=j*5;break;
			case 6:	for(j=0;j<10;j++)	in[j]=j*6;break;
			case 7:	for(j=0;j<10;j++)	in[j]=j*7;break;
			case 8:	for(j=0;j<10;j++)	in[j]=j*8;break;
			case 9:	for(j=0;j<10;j++)	in[j]=j*9;break;
		}
			if(Queue_put(in)==FIFO_Success)			printf("入队成功\r\n");
			else
			{
				printf("入队失败\r\n");
				break;
			}
	}
	
	for(i=0;i<4;i++)	Queueget(ou);
	
	for(i=0;i<3;i++)	Queue_put(in);
	
	printf("当前数据头:%d\r\n",front);
	printf("当前数据尾:%d\r\n",rear);
	
	
	for(i=0;i<10;i++)
	{
		if(Queueget(ou)==FIFO_Success)	
		{
			printf("出队成功\r\n");
			printf("当前数据头:%d\r\n",front);
			printf("当前数据尾:%d\r\n",rear);
			printf("剩余数据:%d\r\n",Effective_Num);
			for(int j=0;j<10;j++)	printf("%d\t",ou[j]);
			printf("\r\n");
		}
		else				
		{
			printf("出队失败\r\n");	
			
			printf("当前数据头:%d\r\n",front);
			printf("当前数据尾:%d\r\n",rear);
			printf("剩余数据:%d\r\n",Effective_Num);
			
			break;
		}
	}
	
	return 0;
}


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值