队列
分享下今天的学习成果,数据结构之队列。
队列是一种可以实现“先进先出”的数据存储结构;
常见的队列分类:
链式队列——用链表来实现
静态队列——用数组来实现(通常为循环队列)
队列初始化:两个队列基本元素,font和rear的值都为0 队列非空时:
font代表队列的第一个元素的下标;
rear代表队列最后一个有效元素的下一个元素的下标
队列为空时:
font和rear值相等,但不一定为零
常见伪算法:
入队伪算法:
第一步、将值存入rear代表的位置
第二步、rear=(rear+1)%数组的长度//可以实现循环出队伪算法:
font=(font+1)%数组的长度判断循环队列是否为空:
font==rear判断循环队列是否为满:
法1:声明一个标识参数判断
法2:空出一个元素然后,font==(rear+1)%数组的长度
队列的具体应用:
所有和时间有关的操作都与队列有关
接下来是结合以上知识敲出来的队列代码:
初始化队列
void init_Queue(PQUEUE ps){
ps->pBase=(int*)malloc(sizeof(int)*6);//分配完内存后, ps->pBase指向了一个数组首地址
if(ps==NULL){
printf("队列初始化失败!程序退出!");
exit(-1);
}
ps->font=0;//初始化下标
ps->rear=0;//初始化下标
}
//判断队列是否未满
bool full_Queue(PQUEUE ps)
{
if((ps->rear+1)%6==ps->font)
{
return true;
}
else return false;
}
遍历队列
bool traverse_Queue(PQUEUE ps)
{
if(isempty_Queue(ps))
{
printf("队列为空!");
exit(-1);
}
else
{
int r;
r=ps->font;
while(r!=ps->rear)
{
printf("%3d",ps->pBase[r]);
r=(r+1)%6; //r往下一个元素循环移动
}
putchar('\n');
return true;
}
}
判断队列是否为空
bool isempty_Queue(PQUEUE ps)
{
if(ps->font==ps->rear)
{
return true;
}
else return false;
}
//出队
bool out_Queue(PQUEUE ps,int *val)
{
if(isempty_Queue(ps))
{
printf("队列为空!出队失败!");
return false;
}
else
{
*val=ps->pBase[ps->font];
ps->font=(ps->font+1)%6;
return true;
}
}
各位小伙伴在看完知识点后,也要多多练习代码哦。
希望与你共同进步!