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;
}