C语言抽象数据类型(ADT:abstract data type)之队列的实现

头文件queue.h定义队列需要的接口,这里包括了动态数组和链式需要的create_queue和destory_queue

queue.h

#include 

#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
#include

#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

你可能感兴趣的:(c,cpp)