裁判测试程序样例:
#include <stdio.h>
#include <stdlib.h>
#define ERROR -1
typedef int ElementType;
typedef enum { addq, delq, end } Operation;
typedef enum { false, true } bool;
typedef int Position;
typedef struct QNode *PtrToQNode;
struct QNode {
ElementType *Data;
Position Front;
int Count;
int MaxSize;
};
typedef PtrToQNode Queue;
Queue CreateQueue( int MaxSize )
{
Queue Q = (Queue)malloc(sizeof(struct QNode));
Q->Data = (ElementType *)malloc(MaxSize * sizeof(ElementType));
Q->Front = 0;
Q->Count = 0;
Q->MaxSize = MaxSize;
return Q;
}
bool AddQ( Queue Q, ElementType X );
ElementType DeleteQ( Queue Q );
Operation GetOp();
int main()
{
ElementType X;
Queue Q;
int N, done = 0;
scanf("%d", &N);
Q = CreateQueue(N);
while ( !done ) {
switch( GetOp() ) {
case addq:
scanf("%d", &X);
AddQ(Q, X);
break;
case delq:
X = DeleteQ(Q);
if ( X!=ERROR ) printf("%d is out\n", X);
break;
case end:
while (Q->Count) printf("%d ", DeleteQ(Q));
done = 1;
break;
}
}
return 0;
}
裁判代码:
Operation GetOp()
{
char a[10];
scanf("%s", a);
if (strcmp(a, "Add") == 0)
return addq;
else if (strcmp(a, "Del") == 0)
return delq;
else
return end;
}
答案:
bool AddQ(Queue Q, ElementType X)
{
if (Q->Count == Q->MaxSize)
{
printf("Queue Full");
return false;
}
Q->Count++;
Q->Data[(Q->Count + Q->Front) % Q->MaxSize] = X;
return true;
}
ElementType DeleteQ(Queue Q)
{
if (Q->Count == 0)
{
printf("Queue Empty");
return ERROR;
}
Q->Front = (Q->Front + 1) % Q->MaxSize;
Q->Count--;
return Q->Data[Q->Front];
}