# include <stdio.h>
# include <malloc.h>
# define len 6 //队列长度
typedef struct QUENE
{
int * pbase; //数据域
int front; //头指针
int rear; //尾指针
}Quene,* quene;
void init_quene(quene que); //建立队列
bool empty_quene(quene que); //判断是否为空
bool full_quene(quene que); //判断释放满溢
bool on_quene(quene que,int val); //入队
bool out_quene(quene que,int *val); //出队
void traverse_quene(quene que); //遍历输出
int main (void)
{
int val;
quene que;
que = (quene)malloc(sizeof(Quene)); //为指针变量que分配空间
init_quene(que);
on_quene(que,1);
on_quene(que,2);
on_quene(que,3);
on_quene(que,4);
traverse_quene(que);
out_quene(que,&val);
printf ("%d\n",val);
traverse_quene(que);
printf ("%d\n",val);
return 0;
}
void init_quene(quene que)
{
que->pbase = (int *)malloc(sizeof(int)*len); //为循环队列分配空间
que->front = 0;
que->rear = 0;
}
bool empty_quene(quene que)
{
if (que->front == que->rear)
return true;
else
return false;
}
bool full_quene(quene que)
{
if (que->front == (que->rear+1)%len)
return true;
else
return false;
}
bool on_quene(quene que,int val)
{
if (full_quene(que))
return false;
else
{
que->pbase[que->rear] = val;
que->rear = (que->rear+1)%len; //尾指针指向下移位置
return true;
}
}
bool out_quene(quene que,int *val)
{
if (empty_quene(que))
return false;
else
{
*val = que->pbase[que->front];
que->front = (que->front+1)%len; //头指针指向下一位置
return true;
}
}
void traverse_quene(quene que)
{
int i;
i = que->front;
while(i != que->rear)
{
printf ("%d ",que->pbase[i]); //输出队列
i = (i+1)%len;
}
printf ("\n");
}
循环队列
最新推荐文章于 2023-03-20 18:18:48 发布