队列的顺序存储表示---数组实现

#define MaxSize 10
typedef struct Node{
    ElementType *Array;
    int front;
    int rear;
} *Queue;

Queue
CreateQueue( int MaxSize )
{
    Queue PtrQ;
    PtrQ = malloc(sizeof(struct Node ));
    if(PtrQ == NULL)
        printf("out of space ");
    PtrQ->Array = malloc(sizeof( ElementType ) * MaxSize );
    if(PtrQ == NULL )
        printf("out of space ");
    PtrQ->front = 0;
    PtrQ->rear = 0;
    return PtrQ;
}
int 
IsFull( Queue PtrQ )
{
    return (rear+1) % MaxSize == front;
}

void
AddQ(ElementType X, Queue PtrQ)
{
    if( IsFull( PtrQ ) )
    {
        printf("队列满");
        return;
    }
    PtrQ->rear = (Q->rear + 1) % MaxSize;
    PtrQ->Array[PtrQ->rear] = X;
}
int
IsEmpty(Queue PtrQ )
{
    return PtrQ->rear == PtrQ->front;
}
ElementType
DeleteQ( Queue PtrQ )
{
    if( IsEmpty( PtrQ ) )
    {
        printf("队列空");
        return;
    }
    PtrQ->front = (PtrQ->front + 1) % MaxSize;
    return PtrQ->Array[PtrQ->front];
}
View Code

以上为循环数组存储,且没有把size域放在结构里,这种方式,一个结构就是一个队列

判断队列满空,还可以用结构中加size域和tag(记录最后一次是插入还是删除)

 MaxSize的数组只用MaxSize-1的空间

rear指向队列的最后一个元素

front指向队列的第一个元素的前面

front = rear 为空

front = (rear+1) % MaxSize 为满

原文地址:https://www.cnblogs.com/gabygoole/p/4618377.html