队列是一种受限制的线性表,在对头头删除,在队尾插入
def.h
#include "stdio.h"
#include "stdlib.h"
#define TRUE 1
#define ERROR -1
#define FALSE 0
#define OVERFLOW -1
#define OK 1
typedef int Status;
typedef char ElemType;
1.h
#define MAXQSIZE 10//队列的最大的长度,对于循环的队列,其长度要减1
typedef struct{
ElemType *elem;
int front;
int tail;
}Queue;
1.c
Status InitQueue (Queue *queue) {
queue->elem = (ElemType*)malloc(sizeof (ElemType));
if (!queue->elem) {
exit (OVERFLOW);
}
queue->front = queue->tail = 0;
return OK;
}
Status DestroyQueue (Queue *queue) {
if (queue->elem){
free (queue->elem);
}
queue->elem = NULL;
queue->front = queue->tail = 0;
return OK;
}
Status ClearQueue (Queue *queue) {
queue->front = queue->tail = 0;
return OK;
}
Status QueueEmpty (Queue *queue) {
if (queue->front == queue->tail) {
return TRUE;
}else {
return FALSE;
}
}
int QueueLength (Queue *queue) {
return (queue->tail - queue->front + MAXQSIZE) % MAXQSIZE;
}
Status GetHead (Queue *queue,ElemType *e) {
if (queue->tail == queue->front) {
return ERROR;
}
*e = *(queue->elem + queue->front);
return OK;
}
Status EnQueue (Queue *queue,ElemType e) {
if (queue->front == (queue->tail + 1) % MAXQSIZE) {
return ERROR;
}
*(queue->elem + queue->tail) = e;
queue->tail = (queue->tail + 1 )%MAXQSIZE;
return OK;
}
Status DeQueue (Queue *queue,ElemType *e) {
if (queue->tail == queue->front) {
return ERROR;
}
*e = *(queue->front + queue->elem);
queue->front = (queue->front + 1) %MAXQSIZE;
return OK;
}
Status QueueTraverse (Queue *queue,void (*vi) (ElemType)) {
int head = queue->front;
while (head != queue->tail) {
vi (*(queue->elem + head));
head = (head + 1 )%MAXQSIZE;
}
printf ("\n");
return OK;
}