循环队列C语言
SqCirQueue.h文件
#ifndef SQCIRQUEUE_H
#define MAXSIZE 10
typedef unsigned short int CirQElemType;
typedef struct
{
int front;
int rear;
CirQElemType data[MAXSIZE];
}SqCirQueue;
void SqCirQueue_Init(SqCirQueue* Q);
unsigned int SqCirQueue_Length(SqCirQueue Q);
void SqCirQueue_Enter(SqCirQueue* Q, CirQElemType e);
CirQElemType SqCirQueue_GetFront(SqCirQueue Q);
CirQElemType SqCirQueue_Delete(SqCirQueue* Q);
void SqCirQueue_Test(void);
#endif
SqCirQueue.c文件
#include "SqCirQueue.h"
#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
void SqCirQueue_Init(SqCirQueue* Q)
{
Q->front = 0;
Q->rear = 0;
}
unsigned int SqCirQueue_Length(SqCirQueue Q)
{
unsigned int L;
L = (Q.rear - Q.front + MAXSIZE) % MAXSIZE;
return L;
}
void SqCirQueue_Enter(SqCirQueue* Q, CirQElemType e)
{
assert( (Q->rear + 1) % MAXSIZE != Q->front );
Q->data[Q->rear] = e;
Q->rear = (Q->rear + 1) % MAXSIZE;
}
CirQElemType SqCirQueue_GetFront(SqCirQueue Q)
{
assert(Q.rear != Q.front);
return Q.data[Q.front];
}
CirQElemType SqCirQueue_Delete(SqCirQueue* Q)
{
assert(Q->rear != Q->front);
CirQElemType e;
e = Q->data[Q->front];
Q->data[Q->front] = 0;
Q->front = (Q->front + 1) % MAXSIZE;
return e;
}
void SqCirQueue_Test(void)
{
SqCirQueue q;
SqCirQueue_Init(&q);
for (int i = 1; i <= 9; i++)
{
SqCirQueue_Enter(&q, i);
}
for (int i = q.front; i < q.rear; i++)
{
printf("%d ", q.data[i]);
}
printf("\n");
SqCirQueue_Delete(&q);
SqCirQueue_Delete(&q);
SqCirQueue_Delete(&q);
for (int i = q.front; i < q.rear; i++)
{
printf("%d ", q.data[i]);
}
printf("\n");
SqCirQueue_Enter(&q, 10);
SqCirQueue_Enter(&q, 11);
SqCirQueue_Enter(&q, 12);
for (int i = 0; i < MAXSIZE; i++)
{
printf("%d ", q.data[i]);
}
printf("\n");
}
测试:main.c文件
# include <stdio.h>
#include "SqCirQueue.h"
int main()
{
SqCirQueue_Test();
return 0;
}
测试结果