forked from yystopf/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;
 | |
| }
 | |
| 
 |