循环队列
- 队列是一种”先进先出”的数据结构
- 静态队列一定是循环队列
- 静态队列的核心是数组
# include <stdio.h>
# include <malloc.h>
# include <stdlib.h>
typedef struct Queue
{
int * pBase;
int front;
int rear;
}QUEUE,* PQUEUE;
void init_queue(PQUEUE);
bool entry_queue(PQUEUE,int);
bool full_queue(PQUEUE);
void traverse_queue(PQUEUE);
bool empty_queue(PQUEUE);
bool out_queue(PQUEUE,int *);
int main(void)
{
QUEUE Q;
int val;
init_queue(&Q);
entry_queue(&Q,1);
entry_queue(&Q,2);
entry_queue(&Q,3);
entry_queue(&Q,4);
entry_queue(&Q,5);
printf("遍历输出:");
traverse_queue(&Q);
if(!out_queue(&Q,&val))
{
printf("OutQueue is failed!\n");
}
else
{
printf("出队元素: val = %d\n",val);
printf("遍历输出:");
traverse_queue(&Q);
}
return 0;
}
void init_queue(PQUEUE pQ)
{
pQ->pBase = (int *)malloc(sizeof(int)*5);
if(NULL == pQ->pBase)
{
exit(-1);
}
else
{
pQ->front = 0;
pQ->rear = 0;
return;
}
}
bool full_queue(PQUEUE pQ)
{
if((pQ->rear+1) % 5 == pQ->front)
{
return true;
}
else
{
return false;
}
}
bool entry_queue(PQUEUE pQ,int val)
{
if(full_queue(pQ))
{
return false;
}
else
{
pQ->pBase[pQ->rear] = val;
pQ->rear = (pQ->rear+1) % 5;
return true;
}
}
void traverse_queue(PQUEUE pQ)
{
int i = pQ->front;
while(i != pQ->rear)
{
printf("%-3d",pQ->pBase[i]);
i = (i+1) % 5;
}
printf("\n\n");
return;
}
bool empty_queue(PQUEUE pQ)
{
if(pQ->rear == pQ->front)
{
return true;
}
else
{
return false;
}
}
bool out_queue(PQUEUE pQ,int * pVal)
{
if(empty_queue(pQ))
{
return false;
}
else
{
* pVal = pQ->pBase[pQ->front];
pQ->front = (pQ->front+1) % 5;
return true;
}
}