队列

队列:在表的一端输入,另一端删除。有先后顺序存储。

允许插入的为队尾(rear),允许删除的为队头(front)。

队列的特点是先进先出。

出队列:sq.rear=sq.rear+1

队列空:sq.front=sq.rear//不能只凭这个判断循环队列的状态是空还是满。

入队:sq.rear=(sq.rear+1)%maxsize

   sq.elem[sq.rear]=x

出队:sq.rear=(sq.front+1)%maxsize

#define maxsize
typedef struct
{
    elementype elem[maxsize];
    int front,rear;//队头front,队尾rear 
}squeuetp;
void InitQueue(cqueuetp *sq)
{
    sq->front = 0;
    sq->rear = 0;
}
void main()
{
    cqueuetp *sq;
    s1 = (cqueuetp *)malloc(sizeof(cqueuetp));
    InitQueue(sq);
}

int QueueEmpty(cquequetp *sq)
{
    if(sq->rear==sq->front)
        return 1;
    else
        return 0;
}

int Size(cqueuetp *sq)
{
    return ((maxsize+sq->rear-sq->front)%maxsize);
}

elemtype Head(cqueuetp *sq)
{
    if(sq->front==sq->rear)
        return NULL;
    else
        return (sq->elem[(sq->front+1)%maxsze]);
}

重点:

void EnQueue(cqueuetp *sq,elementype x)//没满则插入x作为新的队尾元素 
{
    if((sq->rear+1)%maxsize==sq->front)
    {
        printf("overflow");
    }
    else
    {
        sq->rear = (sq->rear+1)%maxsize;
        sq->elem[sq->rear]=x;
    }
}

elementype DelQueue(cqueuetp *sq)
{
    if(sq->front==sq->rear)
    {
        return NULL;
    }
    else
    {
        sq->front = (sq->front+1)%maxsize;
        return sq->elem[sq->front];
    }
}
原文地址:https://www.cnblogs.com/claudia529/p/11104710.html