循环队列
Queue.h
#ifndef _Queue_H
#define ElementType int
struct Queue;
typedef struct Queue *QUEUE;
void initQueue( QUEUE queue);
int IsEmpty( QUEUE queue );
int IsFull( QUEUE queue );
void enQueue( ElementType X, QUEUE queue );
void deQueue( QUEUE queue );
void traverseQueue( QUEUE queue );
#endif
Queue.c
#include "Queue.h"
#include <stdio.h>
#include <malloc.h>
#define SIZE 10
struct Queue
{
int *qbase;
int front;
int rear;
};
void
initQueue( QUEUE queue )
{
queue->qbase = (int *)malloc( sizeof(int) * SIZE);
if( queue->qbase == NULL )
{
printf("memory alloc failed");
return ;
}
queue->front = queue->rear = 0;
}
int
IsEmpty( QUEUE queue )
{
return queue->front == queue->rear;
}
int
IsFull( QUEUE queue )
{
return queue->front == ( queue->rear + 1 ) % SIZE;
}
void
enQueue( ElementType X, QUEUE queue)
{
if( IsFull( queue ) )
return;
queue->qbase[queue->rear] = X;
queue->rear = ( queue->rear + 1 ) % SIZE;
printf("enQueue : %d \n", X);
}
void
deQueue( QUEUE queue )
{
if( IsEmpty( queue ) )
return;
ElementType value;
value = queue->qbase[queue->front];
queue->front = ( queue->front + 1 ) % SIZE;
printf("deQueue : %d \n", value);
}
void
traverseQueue( QUEUE queue )
{
int TmpCell;
TmpCell = queue->front;
while( TmpCell != queue->rear )
{
printf( " %d ", queue->qbase[TmpCell] );
TmpCell = (TmpCell + 1) % SIZE;
}
}
int main()
{
struct Queue q;
initQueue( &q );
int i;
for( i = 0; i < 4; i++)
{
enQueue( i, &q );
}
traverseQueue( &q );
return 0;
}