数据结构-循环队列

//克服假溢出现象
#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\n", QueueLength(Q));
    while(QueueLength(Q))
    {
        ElemType E;
        DeQueue(&Q, &E);
        printf("DeQueue , The Elem is %d\n", 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;
}
 

猜你喜欢

转载自blog.csdn.net/DeathIsLikeTheWind/article/details/53982979