您的位置:首页 > 理论基础 > 数据结构算法

使用不完全填满数组的实现的循环FIFO(队列)

2016-05-24 11:38 1011 查看
通过不完全数组实现的队列完成循环FIFO的基本操作:

1。判空,判满

2.增加元素,删除元素



//-------------FIFO仿真------
#define FIFO_Data_Type int
//使用不完全填满数组的技巧区分队列空和满
typedef struct
{
FIFO_Data_Type*buf;
uint8_t max_len;
uint8_t front;        //头指针,若队列不空,指向队列的头元素
uint8_t rear;         //尾指针,若队列不空,指向队列尾元素的下一个位置
}FIFO_TypeDef;
void Init_Fifo(FIFO_TypeDef*Fifo,FIFO_Data_Type*buf, uint8_t max_len)
{
Fifo->buf = buf;
Fifo->max_len = max_len;
Fifo->front = 1;
Fifo->rear = 0;
}
unsigned char Is_Fifo_Full(FIFO_TypeDef*Fifo)
{
return(Fifo->rear + 2) % Fifo->max_len == Fifo->front;
}
unsigned char Is_Fifo_Empty(FIFO_TypeDef*Fifo)
{
return(Fifo->rear + 1) % Fifo->max_len == Fifo->front;
}
//删除FIFO里的数据同时,返回该元素的值
void delete_Fifo_Elem(FIFO_TypeDef*Fifo)
{
if (Is_Fifo_Empty(Fifo))
{
return;
}

else
{

Fifo->front = (Fifo->front+1)%Fifo->max_len;
}
}
void insert_Fifo_elem(FIFO_TypeDef*Fifo,FIFO_Data_Type*value)
{
if (Is_Fifo_Full(Fifo))
delete_Fifo_Elem(Fifo);
Fifo->rear = (Fifo->rear + 1) % Fifo->max_len;
Fifo->buf[Fifo->rear] = *value;
//printf("%d ", Fifo->buf[Fifo->rear]);
}
unsigned char Fifo_Cur_Lenght(FIFO_TypeDef*Fifo)
{
if (Is_Fifo_Empty(Fifo))    return 0;
if (Is_Fifo_Full(Fifo))     return Fifo->max_len-1;
return (Fifo->rear - Fifo->front + Fifo->max_len+1) % Fifo->max_len;
}
void Display_Fifo(FIFO_TypeDef*Fifo)
{
unsigned char i, fifo_len,rear;
fifo_len=Fifo_Cur_Lenght(Fifo);
printf("fifo_len %d\r\n", fifo_len);
rear = Fifo->front;
for (i = 0; i < fifo_len; i++)
{
printf("rear %d %d \r\n", rear,Fifo->buf[rear]);
rear = (++rear) % Fifo->max_len;
}
}
int main(void)
{
unsigned char i = 0;
FIFO_Data_Type buf[100];
FIFO_Data_Type tmp = 100;
FIFO_TypeDef FIFO;
Init_Fifo(&FIFO,buf,100);
for (i = 0; i < 20; i++)
{
tmp++;
insert_Fifo_elem(&FIFO, &(tmp));
//printf("%d \r\n", Fifo_Cur_Lenght(&FIFO));
}
Display_Fifo(&FIFO);
printf("delete_Fifo_Elem\r\n");
for (i = 0; i < 20; i++)
{
delete_Fifo_Elem(&FIFO);
//printf("%d \r\n", Fifo_Cur_Lenght(&FIFO));
}
Display_Fifo(&FIFO);

while (1);
return 0;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  数据结构 C语言