队列简介
对于一些资源调度问题,FIFO的方法比较常用,比如操作系统的页面置换算法,在一些具体场景里(银行、医院等排队功能当然优先考虑用队列去实现了)
除此之外,队列还可以用于二叉树的层次遍历。
层次遍历的想法
1. 根节点加入队列
2. 进入循环,出口条件是队列为空
3. 出一个节点,并且把他的左右子加入队列
4.可以用一个特殊的#号代表换行,最开始根和#入队,当#出队的时候新加入一个#到队尾
代码
(用一个数组去模拟了队列)
void display_biTree(biTree* root)
{
//模拟一个 Queue(biTree)
biTree queue[20];
int head; int tail;
head =0 ; tail = 1 ;
queue[0] = *root;
queue[1].data = -1;
for(head=0;head<20;head++)
{
//左右入自己出
if(queue[head].data != -1)
{
printf(" %d ",queue[head].data);
if(queue[head].leftSon !=NULL)
{
queue[tail+1] = *queue[head].leftSon;
tail ++ ;
}
if(queue[head].rightSon != NULL)
{
queue[tail+1] = *queue[head].rightSon;
tail ++ ;
}
}
else
{
if(tail == head)
return;
else
{
printf("\n");
tail++;
queue[tail].data = -1;
}
}
}
}