单片机实现环形队列_单片机的FIFO(先入先出)循环队列实现
时间: 2023-07-16 16:15:01 浏览: 58
实现一个环形队列需要以下步骤:
1. 定义队列数组和队头、队尾指针
```c
#define QUEUE_SIZE 5
unsigned char queue[QUEUE_SIZE];
unsigned char head = 0, tail = 0;
```
2. 实现入队操作
```c
void enQueue(unsigned char data)
{
if ((tail + 1) % QUEUE_SIZE == head) // 队列已满
{
// 处理队列已满情况
return;
}
queue[tail] = data;
tail = (tail + 1) % QUEUE_SIZE; // 队尾指针后移一位
}
```
3. 实现出队操作
```c
unsigned char deQueue()
{
if (head == tail) // 队列为空
{
// 处理队列为空情况
return 0;
}
unsigned char data = queue[head];
head = (head + 1) % QUEUE_SIZE; // 队头指针后移一位
return data;
}
```
4. 测试代码
```c
#include <reg52.h>
void enQueue(unsigned char data);
unsigned char deQueue();
void main()
{
unsigned char data;
enQueue('A');
enQueue('B');
enQueue('C');
data = deQueue();
data = deQueue();
enQueue('D');
enQueue('E');
data = deQueue();
data = deQueue();
data = deQueue();
data = deQueue();
data = deQueue();
}
void enQueue(unsigned char data)
{
if ((tail + 1) % QUEUE_SIZE == head) // 队列已满
{
// 处理队列已满情况
return;
}
queue[tail] = data;
tail = (tail + 1) % QUEUE_SIZE; // 队尾指针后移一位
}
unsigned char deQueue()
{
if (head == tail) // 队列为空
{
// 处理队列为空情况
return 0;
}
unsigned char data = queue[head];
head = (head + 1) % QUEUE_SIZE; // 队头指针后移一位
return data;
}
```
在上述代码中,我们先入队了三个元素,然后出队两个元素,再入队两个元素,最后出队所有元素。运行该代码可以得到以下结果:
```
data = 'A'
data = 'B'
data = 'D'
data = 'E'
队列为空
```