头文件queue.h定义队列需要的接口,这里包括了动态数组和链式需要的create_queue和destory_queue
queue.h
#include <stdlib.h>
#define QUEUE_TYPE int
void create_queue(size_t size);
void destory_queue(void);
void insert(QUEUE_TYPE value);
void delete(void);
QUEUE_TYPE first(void);
int is_empty(void);
int is_full(void);
静态数组实现的队列
#include"queue.h"
#include<stdio.h>
#include<assert.h>
#define QUEUE_SIZE 100
#define ARRAY_SIZE (QUEUE_SIZE+1)
static QUEUE_TYPE queue[ARRAY_SIZE];
static size_t front = 1;
static size_t rear = 0;
void insert(QUEUE_TYPE value)
{
assert(!is_full());
rear = (rear+1)% ARRAY_SIZE;
queue[rear]=value;
}
void delete(void)
{
assert(!is_empty());
front=(front+1)%ARRAY_SIZE;
}
QUEUE_TYPE first(void)
{
assert(!is_empty());
return queue[front];
}
int is_empty(void)
{
return ( rear+1 )%ARRAY_SIZE==front;
}
int is_full(void)
{
return ( rear+2 )%ARRAY_SIZE==front;
}
此处是循环链表,判断是满还是空是在让队列中始终有一个元素的情况下实现的。
用动态数组和链式结构实现队列的方法类似栈,参考 https://mp.csdn.net/postedit/88999372