算法:队列之解密QQ号案例的算法
今天跟大家聊一聊关于数据结构中队列的一个有意思的案例,解密QQ号,想必大家都有过向别人要过QQ号吧,在这里,浅浅问一句,你是直接把自己的QQ号告诉他吗?今天教你一招,告诉他一串关于你的QQ号的数字密码让他自己去解密。
============================
解密规则
一般QQ号都是10位吧,所以你的数字密码同样也是10位,就是他对你的数字密码进行一下操作:首先将第1个数字删除掉,再将第2个数字移动到这组数字的末尾,将第3个数字删除掉,将第4个数字继续移动到这组数字的末尾,依次循环进行上述操作,直到删除所有的数字密码位置,然后按照刚才删除数字的顺序进行依次排序即可得到你的QQ号码喽!在这里偷偷告诉一下我自己的数字密码:1490793738,你也可以去试试自己的数字密码是多少哦~~
============================
下面就是你去找10张卡片进行上面的步骤进行模拟一下解密过程了,如果你的解密过程没有错误,解密后我的QQ号就应该是“1973349870”,如果解密出来不是这个,可能你还没有完全理解加密过程或者在解密的过程出了问题了,可以重新试一下哦~~
如果你的解密规则和解密过程完全没有问题,那么可以使用试下编写程序来实现该功能,我相信你一定可以实现出来的~
============================
下面给你提供一个简单的实现思路方法
#include <stdio.h>
int main()
{
int q[102] = {1,4,9,0,7,9,3,7,3,8},head,tail;
//初始化队列
head = 0;
tail = 10;
while(head<tail){
//输出队首元素并将队首元素出队
printf("%d",q[head]);
head++;
//先将新队首元素添加到队尾去
q[tail] = q[head];
tail++;
//再将队首元素出队
head++;
}
getchar();
getchar();
return 0;
}
最后输出的就是1973349870,没有实现的可以试试上述的代码哦~
如果你没有学习过数据结构也没关系,上面的代码就是用了一下简单的队列结构的思想,下面给你简单阐述一下队列的基本概念,队列是一种特殊的线性数据结构,它只允许在队首(head)进行删除操作,这就是所谓的“出队”操作,同样的道理在队尾(tail)进行元素的插入操作,这便是所谓的“入队”操作,当且仅当队列中没有元素的时候(即head = tail),此时的队列称为“空队列”
在我们的日常生活中有很多跟队列有关的实例,比如我们在食堂打饭,在银行取钱,在车站买票排队的时候,每一个窗口都是一个队列,在这个队列中新来的人都会自动排到队伍的末尾去,最先取得是最先买到票的,最先离开队列的那个人。这个就跟先来先服务的算法差不多,我们称为“先进先出(First In First Out,FIFO原则)”
============================
队列将是我们今后学习广度优先搜索以及队列优化的Bellman-Ford最短路算法的核心数据结构,所以我们也可以将队列的三个基本元素(一个数组,两个变量)封装为一个结构体类型,如下代码:
struct queue
{
//队列的主体,用来存储内容
int data[100];
//队首
int head;
//队尾
int tail;
};
下面我们定义一个结构体变量Q
struct queue q;
下面我们进行结构体内部元素的访问遍历
q.head = 0;
q.tail = 0;
scanf("%d",&q.data[q.tail]);
下面就是用完整代码队列操作实现解密QQ
#include <stdio.h>
struct queue
{
//队列的主体,用来存储内容
int data[100];
//队首
int head;
//队尾
int tail;
};
int main()
{
struct queue q;
q.head = 0;
q.tail = 0;
for(int i = 0 ; i < 10 ; i++) {
scanf("%d",&q.data[q.tail]);
q.tail++;
}
while(q.head<q.tail){
printf("%d",q.data[q.head]);
q.head++;
q.data[q.tail] = q.data[q.head];
q.tail++;
q.head++;
}
getchar();
getchar();
return 0;
}
该代码的这种写法看起来虽然有一些冗余了一些,但是可以加强大家对队列这个算法的基本理解。C++的STL库已经有队列的实现方法,如果有兴趣的同学可以参看一些相关材料。
相关文章
- 集合扩展案例练习以及HashTable和HashMap的区别?
- NLP-Pytorch-项目流程-案例(一):文本摘要【Seq2Seq(BiLSTM-LSTM)+ Attention】【预测算法:GreedySearch、BeamSearch】
- MEMS激光雷达监测法兰克福机场客流量应用案例
- connection was bad 真实案例
- Echarts:折现图表案例
- 通过AccessKey调用阿里云CDN接口刷新CDN资源案例
- C语言:快速排序算法案例
- vue.js:用户登录切换的小案例
- 深度学习基础入门篇[七]:常用归一化算法、层次归一化算法、归一化和标准化区别于联系、应用案例场景分析。
- c语言循环案例
- elasticsearch 亿级数据检索案例与原理
- 企业场景运维案例:sed实战修改多行配置技巧
- 类的集成经典案例
- 案例分析|名创优品是如何通过精细化管理获得火速扩张的?
- 七月算法机器学习 9 推荐系统与应用 小案例
- Alluxio 1.7.0 命令行接口的案例与解读
- TensorFlow 系列案例(4)及Pytorch 学习(3)实现K-Means聚类算法
- 第36课: TaskScheduler内幕天机解密:Spark shell案例运行日志详解、TaskScheduler和SchedulerBackend、FIFO与FAIR、Task运行时本地性算法
- 【案例分享】跨机房ES同步实战
- MySQL分库分表与水平分割取模案例
- Tableau可视化设计案例-03基本表、树形图、气泡图、词云
- 2021年最新最全Flink系列教程__Flink综合案例(九)