全部代码
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define ERROR -1
typedef int ElementType;
typedef enum { addq, delq, end } Operation;
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 );
bool AddQ( Queue Q, ElementType X ){
if(Q->Count==Q->MaxSize){
printf("Queue Full\n");
return false;
}
Q->Data[(Q->Front+Q->Count)%(Q->MaxSize)] = X;
Q->Count++;
}
ElementType DeleteQ( Queue Q );
ElementType DeleteQ( Queue Q ){
if(Q->Count==0){
printf("Queue Empty\n");
return ERROR;
}
int temp = Q->Front;
Q->Front = (Q->Front+1)%(Q->MaxSize);
Q->Count--;
return Q->Data[temp];
}
Operation GetOp();
Operation GetOp(){
char a[10];
scanf("%s",a);
if(!strcmp(a,"Add")) return addq;
if(!strcmp(a,"Del")) return delq;
if(!strcmp(a,"End")) return end;
}
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;
}
提交代码
bool AddQ( Queue Q, ElementType X ){
if(Q->Count==Q->MaxSize){
printf("Queue Full\n");
return false;
}
Q->Data[(Q->Front+Q->Count)%(Q->MaxSize)] = X;
Q->Count++;
}
ElementType DeleteQ( Queue Q ){
if(Q->Count==0){
printf("Queue Empty\n");
return ERROR;
}
int temp = Q->Front;
Q->Front = (Q->Front+1)%(Q->MaxSize);
Q->Count--;
return Q->Data[temp];
}