一年前学的数据结构都忘得差不多了,想重温一下....
#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
#define QueueSize 5
#define OK 1
typedef char DataType;
typedef int Status;
typedef struct Queue
{
DataType data[QueueSize];
int front;
int rear;
}CirQueue;
Status InitQueue(CirQueue *Q)
{
Q->front = 0;
Q->rear = 0;
return OK;
}
Status QueueEmpty(CirQueue *Q)
{
return Q->front==Q->rear;
}
Status QueueFull(CirQueue *Q)
{
return (Q->rear+1)%QueueSize==Q->front;
}
Status EnQueue(CirQueue *Q, DataType c)
{
assert(!QueueFull(Q));
Q->data[Q->rear] = c;
Q->rear = (Q->rear+1)%QueueSize;
return OK;
}
DataType DeQueue(CirQueue *Q)
{
assert(!QueueEmpty(Q));
DataType val = Q->data[Q->front];
Q->front = (Q->front+1)%QueueSize;
return val;
}
DataType GetHead(CirQueue *Q)
{
assert(!QueueEmpty(Q));
return Q->data[Q->front];
}
Status ClearQueue(CirQueue *Q)
{
Q->front = 0;
Q->rear = 0;
return OK;
}
int QueueLength(CirQueue *Q)
{
return (Q->rear-Q->front+QueueSize)%QueueSize;
}
int main()
{
CirQueue queue;
InitQueue(&queue);
if(QueueEmpty(&queue))
{
EnQueue(&queue, 'A');
EnQueue(&queue, 'R');
EnQueue(&queue, 'E');
EnQueue(&queue, 'T');
//空出一个了元素位置以区别满队列 与空队列
//EnQueue(&queue, 'Y');
}
if(QueueFull(&queue))
{
printf("QueueLength = %d\n", QueueLength(&queue));
printf("TopHead = %c\n", GetHead(&queue));
printf("DeQueue = %c\n", DeQueue(&queue));
printf("DeQueue = %c\n", DeQueue(&queue));
printf("DeQueue = %c\n", DeQueue(&queue));
printf("TopHead = %c\n", GetHead(&queue));
printf("DeQueue = %c\n", DeQueue(&queue));
}
else
{
printf("QueueLength = %d\n", QueueLength(&queue));
}
if(ClearQueue(&queue))
printf("QueueLength = %d\n", QueueLength(&queue));
system("pause");
return 0;
}