循环队列。
loopQueue.h
#include "loopqueue.h"
typedef struct queue
{
int front;
int rear;
char *space;
int len;
}Queue;
void initQueue(Queue *q,int len);
int isQueueFull(Queue *q);
int isQueueEmpty(Queue *q);
void enQueue(Queue *q, char ch);
char deQueue(Queue *q);
void clearQueue(Queue *q);
void destoryQueue(Queue *q);
loopQueue.c
#include "loopqueue.h"
#include <stdlib.h>
#include <stdio.h>
#if 0
(1) q->space = malloc 空间
(2) q->front & rear 一开始要初始化到0。。编译器默认不知道数值跑哪去了
(3) rear & front ++ 的情况要注意 取模(循环结构常有)
(4) 静态空间 free时直接free(space)就好了、
#endif
void initQueue(Queue *q, int len)
{
q->len = len;
q->space = (char*)malloc( len * sizeof(char));// 究竟是谁开辟空间!!看好
if(!q->space)
{
printf("over ");
getchar();
}
q->front = q->rear = 0;
}
int isQueueFull(Queue *q)
{
return (q->rear+1)%q->len == q->front;
}
int isQueueEmpty(Queue *q)
{
return q->front == q->rear;
}
void enQueue(Queue *q, char ch)
{
//入队
// if(q->rear > q->len)
// q->rear = q->rear%q->len;
// q->space[q->rear] = ch;
// q->rear = (q->rear+1)%q->len;
// q.space[q.rear] = ch;
// q.rear = (q.rear+1)%q.len;
q->space[q->rear] = ch;
// q->rear = (q->rear +1)%q->len;
q->rear = ++q->rear %q->len;
}
char deQueue(Queue *q)
{
// return q->space[q->front++];没有考虑到模!!!!
char ch = q->space[q->front];
q->front = (q->front+1)%q->len;
return ch;
}
void clearQueue(Queue *q)
{
q->front = q->rear;
}
void destoryQueue(Queue *q)
{
free(q->space);
}