//克服假溢出现象
#include <stdio.h>
#include <stdlib.h>
#define LIST_INIT_SIZE 10
#define LISTINCREMENT 100
#define STACK_INIT_SIZE 100
#define STACKINCREMENT 10
#define TRUE 1
#define FALSE 0
#define true 1
#define false 0
#define OK 1
#define ERROR 0
#define INFEASIBLE -1
#define OVERFLOW -2
#define OPSETSIZE 7
#define MAXQSIZE 100
typedef int Status;
typedef int ElemType;
typedef int QElemType;
typedef struct
{
QElemType *base;
int front, rear;
} SqQueue;
Status InitQueue(SqQueue *Q);
Status EnQueue(SqQueue *Q, ElemType e);
Status DeQueue (SqQueue *Q, ElemType *e);
int QueueLength(SqQueue Q);
int main()
{
SqQueue Q;
InitQueue(&Q);
EnQueue(&Q, 1);
EnQueue(&Q, 2);
EnQueue(&Q, 3);
EnQueue(&Q, 4);
EnQueue(&Q, 5);
printf("Then the length of Queue is %d
", QueueLength(Q));
while(QueueLength(Q))
{
ElemType E;
DeQueue(&Q, &E);
printf("DeQueue , The Elem is %d
", E);
}
return 0;
}
Status InitQueue(SqQueue *Q)
{
Q->base = (ElemType *) malloc(MAXQSIZE *sizeof (ElemType));
if (!Q->base)
exit (OVERFLOW);
Q->front = Q->rear = 0;
return OK;
}
Status EnQueue(SqQueue *Q, ElemType e)
{
if ((Q->rear+1) % MAXQSIZE == Q->front)
return ERROR;
Q->base[Q->rear] = e;
Q->rear = (Q->rear+1) % MAXQSIZE;
return OK;
}
Status DeQueue (SqQueue *Q, ElemType *e)
{
if (Q->front == Q->rear)
return ERROR;
*e = Q->base[Q->front];
Q->front = (Q->front + 1) % MAXQSIZE;
return OK;
}
int QueueLength(SqQueue Q)
{
return (Q.rear - Q.front+MAXQSIZE) % MAXQSIZE;
}