我正在尝试实现一个采用结构的循环队列
- ⟶ 如果没有入队,则检查队列是否已满 ⟶ 否则返回 0
- ⟶ 检查队列是否为空,如果没有出队 ⟶ 否则返回 0
以下是我的代码:
#ifndef_QUEUE_H_
#define QUEUE_H_
#define QUEUE_SIZE 32
typedef struct queue
{
int head;
int tail;
int buffer[QUEUE_SIZE];
} queue_t;
void init_queue(queue_t *);
int enqueue(queue_t *, int);
int isfull(queue_t *);
int dequeue(queue_t *);
int queue_empty(queue_t *);
#endif
/* queue.h ends here */
/* *************************queue.c starts here************************ */
#include<queue.h>
#include<stm32f30x.h>
#define QUEUE_SIZE 32
int head;
int tail;
void init_queue(queue_t *q)
{
q->head = 0;
q->tail = 0;
}
int enqueue(queue_t *q, int a )
{
if ((((q->head)+1)%QUEUE_SIZE)!=q->tail)
{
q->buffer[q->head]=a;
q->head=(((q->head)+1)%QUEUE_SIZE);
return 1 ;
}
else
{
return 0 ;
}
}
int dequeue(queue_t *q)
{
int temp ;
if (queue_empty(q))
{
return 0;
}
else
{
temp = q->buffer[q->tail];
q->tail=((q->tail)+1)%QUEUE_SIZE;
return temp;
}
}
int queue_empty(queue_t *q)
{
if (q->head == q->tail)
{
return 1;
}
return 0;
}
/* **************queue.c ends here********************** */
当我尝试测试队列时:示例输入“hello”并尝试打印其中的内容,它会打印“ello hlo elo..”和此类不正确的回复。
我在 getchar 和 putchar 函数中使用 enqueue 和 dequeue 函数。下面是我的 getchar 和 putchar 函数:
queue_t rxbuf;
queue_t txbuf;
int putchar(int c)
{
while(!(enqueue(&txbuf, c)));
}
int nonblockgetchar(void)
{
dequeue(&rxbuf);
}
int getchar(void)
{
int ch;
while (!(ch=dequeue(&rxbuf)));
return (ch);
}
感谢您的时间和帮助。