forked from chunyexixiaoyu/xiuos
105 lines
2.1 KiB
C
105 lines
2.1 KiB
C
/*
|
|
* @Author: chunyexixiaoyu
|
|
* @Date: 2021-08-16 15:16:51
|
|
* @LastEditTime: 2021-08-18 14:45:47
|
|
* @LastEditors: Please set LastEditors
|
|
* @Description: In User Settings Edit
|
|
* @FilePath: \xiuos\APP_Framework\lib\queue\queue.c
|
|
*/
|
|
#include <queue.h>
|
|
|
|
|
|
/**
|
|
* @description: Initialize an empty queue
|
|
* @param {SqQueue} *Q queue struct
|
|
* @return {*}
|
|
*/
|
|
Status InitQueue(SqQueue *Q)
|
|
{
|
|
Q->front=0;
|
|
Q->rear=0;
|
|
return OK;
|
|
}
|
|
|
|
/**
|
|
* @description: Clear Q to an empty queue
|
|
* @param {SqQueue} *Q queue struct
|
|
* @return {*}
|
|
*/
|
|
Status ClearQueue(SqQueue *Q)
|
|
{
|
|
Q->front=Q->rear=0;
|
|
return OK;
|
|
}
|
|
|
|
/**
|
|
* @description: Return TRUE if Q is an empty queue, FALSE otherwise
|
|
* @param {SqQueue} *Q queue struct
|
|
* @return TRUE
|
|
* FALSE
|
|
*/
|
|
Status QueueEmpty(SqQueue *Q)
|
|
{
|
|
if(Q->front==Q->rear)
|
|
return TRUE;
|
|
else
|
|
return FALSE;
|
|
}
|
|
|
|
/**
|
|
* @description: Returns the number of elements of Q, which is the current length of the queue
|
|
* @param {SqQueue} *Q queue struct
|
|
* @return length of the queue
|
|
*/
|
|
int QueueLength(SqQueue *Q)
|
|
{
|
|
return (Q->rear-Q->front+MAXSIZE)%MAXSIZE;
|
|
}
|
|
|
|
/**
|
|
* @description: If the queue is not empty, return the header element of Q with e and OK, otherwise return ERROR
|
|
* @param {SqQueue} *Q queue struct
|
|
* @param {QElemType} *e header element
|
|
* @return TRUE
|
|
* FALSE
|
|
*/
|
|
Status GetHead(SqQueue *Q,QElemType *e)
|
|
{
|
|
if(Q->front==Q->rear)
|
|
return ERROR;
|
|
*e=Q->data[Q->front];
|
|
return OK;
|
|
}
|
|
|
|
/**
|
|
* @description: If the queue is not full, insert element E as Q's new tail element
|
|
* @param {SqQueue} *Q queue struct
|
|
* @param {QElemType} e new element
|
|
* @return TRUE insert successfully
|
|
* FALSE
|
|
*/
|
|
Status EnQueue(SqQueue *Q,QElemType e)
|
|
{
|
|
if ((Q->rear+1)%MAXSIZE == Q->front)
|
|
return ERROR;
|
|
Q->data[Q->rear]=e;
|
|
Q->rear=(Q->rear+1)%MAXSIZE;
|
|
return OK;
|
|
}
|
|
|
|
/**
|
|
* @description: If the queue is not empty, the header element in Q is removed and its value is returned with e
|
|
* @param {SqQueue} *Q
|
|
* @param {QElemType} *e the header element
|
|
* @return {*}
|
|
*/
|
|
Status DeQueue(SqQueue *Q,QElemType *e)
|
|
{
|
|
if (Q->front == Q->rear)
|
|
return ERROR;
|
|
*e=Q->data[Q->front];
|
|
Q->front=(Q->front+1)%MAXSIZE;
|
|
return OK;
|
|
}
|
|
|