如有错误,敬请指正
#include
#include
typedef struct Queue
{
int *pbase;//用于创建数组下标,与内存的分配,主导指针指向,相当于 a[i]中的a[]
int front;//队头
int rear;//队尾
}QUEUE;
void init(QUEUE * Q);//初始化 ,注意各函数 的参数类型是队列指针
void traverse_Queue(QUEUE * Q);//输出各元素
bool empty_Queue(QUEUE * Q);//判断是否为空
bool full_Queue(QUEUE * Q);//判断是否为满
bool in_Queue(QUEUE * Q,int val);//元素入队
void out_Queue(QUEUE * Q,int val);//元素出队
int main()
{
int val;//用于接收出队的元素
QUEUE Q;//创建一个队列类型的变量
init(&Q);
//21-24为入队元素
in_Queue(&Q,1);
in_Queue(&Q,2);
in_Queue(&Q,3);
in_Queue(&Q,4);
traverse_Queue(&Q);
//27-28为出对元素
out_Queue(&Q,&val);
out_Queue(&Q,&val);
traverse_Queue(&Q);
return 0;
}
/
初始化:申请一块内存,还有大小 ,队头队尾置0
/
void init(QUEUE * Q)
{
Q->pbase=(int)malloc(sizeof(int)6);//相当于创建了a[],注意:后面是int * 类型
Q->rear=0;//
Q->front=0;
}
/
输出:定义一个参数,使其指向队头,
注意:不能Q->front=(Q->front+1)%6,否则队头变化,相当于删除元素
/
void traverse_Queue(QUEUE * Q)
{
int i=Q->front;
while(i!=Q->rear)
{
printf("%d",Q->pbase[i]);
i++;
}
printf("n");
}
/
判断是否为空:根据front和rear的含义,若相等则为空
/
bool empty_Queue(QUEUE * Q)
{
if(Q->front==Q->rear)
return true;
else
return false;
}
/
判断是否满:因为是循环队列,故若rear的下一个是front就满
/
bool full_Queue(QUEUE * Q)
{
if(Q->front==(Q->rear+1)%6)
return true;
else
return false;
}
/
入队:先将该元素放入rear对应的下标中,之后将rear后移。因为rear指的一直都是该队最后一个有效元素后面的位置,故直接放入rear的就可
/
bool in_Queue(QUEUE * Q,int val)
{
if(full_Queue(Q))
{
printf(“数据已满,放入数据失败!n”);
}
else
{
Q->pbase[Q->rear]=val;
Q->rear=(Q->rear+1)%6;
}
}
/
出队:将该元素先保存,之后front后移即可,若再次使用该空间,使用后续元素将其覆盖
*/
void out_Queue(QUEUE * Q,int *val)
{
*val=Q->pbase[Q->front];
printf(“刚刚出列的元素为:%d”,*val);
Q->front=(Q->front+1)%6;
printf("n");
}



