#include <stdio.h>
#include <stdlib.h>
#define M 6 //数组长度
#define bool char //c语言中没有bool类型,自己添加的
#define true 1
#define false 0
typedef struct Queue
{
int * pBase;//数组首地址,相当于数组名
int front;
int rear;
}QUEUE;
void init(QUEUE *);//初始化队列
bool en_queue(QUEUE *, int);//入队列
bool out_queue(QUEUE *, int *);//出队列
void traverse_queue(QUEUE *);//遍历队列
bool full_queue(QUEUE *);//判断队列是否为满
bool empty_queue(QUEUE *);//判断队列是否为空
int main(int argc, const char * argv[])
{
QUEUE Q;
int val;
init(&Q);
//测试数据
en_queue(&Q, 1);
en_queue(&Q, 2);
en_queue(&Q, 3);
en_queue(&Q, 4);
en_queue(&Q, 5);
en_queue(&Q, 6);
en_queue(&Q, 7);
en_queue(&Q, 8);
traverse_queue(&Q);
if (out_queue(&Q, &val))
{
printf("出队成功,队列出队元素为:%d\n", val);
}
else
printf("出队失败!");
traverse_queue(&Q);
return 0;
}
void init(QUEUE *pQ)//初始化队列
{
pQ->pBase = (int *)malloc(sizeof(int)* M);
pQ->front = 0;
pQ->rear = 0;
return;
}
bool full_queue(QUEUE * pQ)//队列是否为满
{
if ((pQ->rear + 1) % M == pQ->front)
{
return true;
}
else
return false;
}
bool en_queue(QUEUE * pQ, int val)//入队列
{
if (full_queue(pQ))
{
return false;
}
else
{
pQ->pBase[pQ->rear] = val;
pQ->rear = (pQ->rear + 1) % M;
return true;
}
}
void traverse_queue(QUEUE * pQ)//遍历队列
{
int i = pQ->front;
while (i != pQ->rear)
{
printf("%d ", pQ->pBase[i]);
i = (i + 1) % M;
}
printf("\n");
return;
}
bool empty_queue(QUEUE * pQ)//队列是否为空
{
if (pQ->front == pQ->rear)
{
return true;
}
else
return false;
}
bool out_queue(QUEUE * pQ, int * pVal)//出队列
{
if (empty_queue(pQ))
{
return false;
}
else
{
*pVal = pQ->pBase[pQ->front];
pQ->front = (pQ->front + 1) % M;
return true;
}
}
郝斌---循环队列
最新推荐文章于 2021-02-09 14:59:44 发布