QQ解密

原文:
【坐在马桶上看算法】算法4:队列——解密QQ号


用队列来实现。
队列相关知识:
队列是一种特殊的线性结构,它只允许在队列的首部(head)进行删除操作称之为“出队”,而在队列的尾部(tail)进行插入操作称之为“入队”。当队列中没有元素时(即head==tail),称为空队列。在我们的日常生活中有很多情况都符合队列的特性。比如我们之前提到过的买票,每个排队买票的窗口就是一个队列。在这个队列当中,新来的人总是站在队列的最后面,来的越早的人越靠前也就越早能买到票,就是先来的人先服务,我们称为“先进先出”(First InFirst Out,FIFO)原则。
队列将是我们今后学习广度优先搜索以及队列优化的Bellman-Ford最短路算法的核心数据结构。所以现在将队列的三个基本元素(一个数组,两个变量)封装为一个结构体类型,如下。

struct queue
{
    int data[100];//队列的主体,用来存储内容
    int head;//队首
    int tail;//队尾
};

上面我们定义了一个结构体类型,我们通常将其放在main函数的外面,请注意结构体的定义末尾有个;号。struct是结构体的关键字,queue是我们为这个结构体起的名字。这个结构体有三个成员分别是:整型数组data、整型head和整型tail。这样我们就可以把这三个部分放在一起作为一个整体来对待。你可以这么理解:我们定义了一个新的数据类型,这个新类型非常强大,用这个新类型定义出的每一个变量可以同时存储一个整型数组和两个整数。
有了新的结构体类型,如何定义结构体变量呢?很简单,这与我们之前定义变量的方式是一样,如下。

struct queue q;

qq解密代码:

#include <iostream>

using namespace std;

struct queue
{
    int data[100];//队列的主体,用来存储内容
    int head;//队首
    int tail;//队尾
};
int main()
{
    struct queue q;
    //初始化队列
    q.head=0;
    q.tail=0;
    int number[]={6,3,1,7,5,8,9,2,4};
    int num=sizeof(number)/sizeof(int);
    for(int i=0;i<num;i++)
    {
        //依次向队列插入9个数
        q.data[i]=number[i];
        q.tail++;
    }

    while(q.head<q.tail) //当队列不为空的时候执行循环
    {
        //打印队首并将队首出队
        cout<<q.data[q.head]<<" ";
        q.head++;

        //先将新队首的数添加到队尾
        q.data[q.tail]=q.data[q.head];
        q.tail++;
        //再将队首出队
        q.head++;
    }

    getchar();getchar();
    return 0;
}

运行结果:

6 1 5 9 4 7 2 8 3

猜你喜欢

转载自blog.csdn.net/zhenaoxi1077/article/details/80302553