C语言-循环队列的简单实现

时间:2022-11-06 17:37:04

用C语言实现一个循环队列并不难。关键点在于对队列 "空" 和 "满" 状态的判断。

正如《C和指针》中所描写的,有两种方法来实现对队列空和满状态的判断。

  1. 在数组中空一个元素不填,起始时, 置tail为0, front为1, 这样一来, 实现要浪费queue buffer中两个元素空间:
    1. 队列空:  (tail+1) % queue_size == front
    2. 队列满:  (tail+2) % queue_size == front
  1. 定义一个变量来记录队列中元素的个数, 判断队列的空和满直接看变量的值即可

 

本文中使用的是第2种:

#include <stdio.h>

#define QUEUE_SIZE 5
#define QUEUE_TYPE int

static int queue_cnt = 0;
static int queue_front = 0;
static int queue_tail = 0;

static QUEUE_TYPE queue_buf[QUEUE_SIZE];

int is_empty()
{
return queue_cnt == 0;
}

int is_full()
{
return queue_cnt == QUEUE_SIZE;
}

int insert(QUEUE_TYPE e)
{
if (is_full()) {
printf("queue is full!!!\n");
return 0;
}
queue_buf[queue_tail] = e;
queue_tail = (queue_tail + 1) % QUEUE_SIZE;
queue_cnt++;

return 1;
}

int delete()
{
if (is_empty()) {
printf("queue is empty!!!\n");
return 0;
}
queue_front = (queue_front + 1) % QUEUE_SIZE;
queue_cnt--;
return 1;
}

int main()
{
insert(3);
insert(3);
insert(3);
insert(3);
insert(3);
delete();
insert(3);
insert(3);
return 0;
}