头文件
#ifndef _QUEUE_H_
#define _QUEUE_H_
#include <stdlib.h>
#define MAXLEN 10
typedef int data_t;
typedef struct queue{
data_t *data;
int front,rear;
}queue_t;
//创建
queue_t *create_queue();
//判空
int empty_queue(queue_t *q);
//判满
int full_queue(queue_t *q);
//求长度
int length_queue(queue_t *q);
//入队
int en_queue(queue_t *q,data_t x);
//出队
data_t de_queue(queue_t *q);
//清空
int clear_queue(queue_t *q);
//销毁
int destory_queue(queue_t **q);
//打印
int show_queue(queue_t *q);
#endif
功能函数
#include <stdio.h>
#include "queue.h"
//创建
queue_t *create_queue()
{
queue_t *q = (queue_t *)malloc(sizeof(queue_t));
if(NULL == q)
return NULL;
q->data = (data_t *)malloc(sizeof (data_t) * MAXLEN);
if(NULL == q->data)
return NULL;
q->front = q->rear = 0;
return q;
}
//判空
int empty_queue(queue_t *q)
{
return q->front == q->rear;
}
//判满
int full_queue(queue_t *q)
{
return q->front == (q->rear + 1) % MAXLEN;
}
//求长度
int length_queue(queue_t *q)
{
int len = 0;
int p = q->front;
while((p % MAXLEN) != q->rear)
{
p++;
len++;
}
return len;
}
//入队
int en_queue(queue_t *q,data_t x)
{
if(1 == full_queue(q))
{
printf("q is full\n");
return -1;
}
q->data[q->rear] = x;
q->rear = (q->rear + 1) % MAXLEN;
return 0;
}
//出队
data_t de_queue(queue_t *q)
{
if(1 == empty_queue(q))
{
printf("q is empty\n");
return -1;
}
data_t temp = q->data[q->front];
q->front = (q->front + 1) % MAXLEN;
return temp;
}
//清空
int clear_queue(queue_t *q)
{
while((q->front)%MAXLEN != q->rear)
{
de_queue(q);
}
return 0;
}
//销毁
int destory_queue(queue_t **q)
{
clear_queue(*q);
free(*q);
*q = NULL;
return 0;
}
//打印
int show_queue(queue_t *q)
{
if(1 == empty_queue(q))
{
printf("q is empty\n");
return -1;
}
int p = q->front;
while(p != q->rear)
{
printf("%d--",q->data[p]);
p = (p+1) % MAXLEN;
}
printf("\n");
return 0;
}