啊哈算法 之 队列

应用场景

下哈的新同桌小哼是个美女,小哈很想知道小哼的QQ号,就问了小哼,小哼为了考验小哈,就给了小哈一段加密数字
并告诉了小哈解密规则,规则就是:首先删除第一个数据,之后再将第二个数据移动到队尾,指导最后一个数,再将最后一个书删除,最后讲删除的数字连起来就是她的QQ号码了。

算法分析

要进行解密,首先要引入两个变量head 和 tail,head用来记录队列的队首,tail用来记录队尾的下一位,为什么不直接记录队尾呢,是因为当队列剩下最后一个元素时队首和队尾会重合,我们这里规定队首和队尾重合的时候,队列为空。

解密过程

上面讲了那么多,你可以对如何解密已经迫不及待了吧,那么接下来就直接上代码了
int main(int argc, const char * argv[])
{
    int q[102] = {0,6,3,1,7,5,8,9,2,4},head,tail;
    //初始化队列
    head = 1;
    tail = 10;//tail执行队列最后一位的后一位
    while (head < tail) {
        printf("%d ",q[head]); //先打印第一个被移除的
        head++; //移除第一个
        q[tail] = q[head]; //将第二个添加到队尾
        tail++;
        //再次将队首移除
        head++;
    }
    getchar()  ;getchar();
    return 0;
}


 运行后就能得到小哼的QQ号了: 
  



队列的概念

队列是一种特殊的线性数据结构,它只允许队首进行删除操作,成为出队,队尾进行添加操作,称为入队。当队首和队尾相等时(head = tail),称为空队列。
好了很晚了,今天就讲到这里,大家晚安


你可能感兴趣的:(C++,算法,C语言)