摘要

什么是队列,根据百度上的解释是,队列是一种特殊的线性表,特殊之处在于它只允许在表的前端进行删除操作,而在表的后端进行插入操作,和栈一样,队列是一种操作受限制的线性表。进行插入操作的端称为队尾,进行删除操作的端称为队头。

简易理解就是先进先出,好比我们干饭人去排队买饭,先到的人先进行购买,后到的人就要排到队伍的尾部。本人对队列理解尚浅具体可以做哪些事件也是比较模糊,在这里分享一下最近学习的解密队列算法。

解密队列

对544142804第一个数进行删除并对删除的数进行存储记录,第二位数进行移动到末尾,依次进行循环操作直到最后一位,这样记录后的删除数就是我们解密出后的qq号。

img_name

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
// 该方法利用数组的特性进行操作
// 待解密字符
let a = '544142804';
// 利用split()把字符串转换成数组
let b = a.split('');
// 记录最后结果即删除的数
let toStr = '';
// 循环解密
while( b.length > 0) {
// 记录删除数值
toStr += (b[0] + '');
// 删除第一个数
b.splice(0,1);
// 第二位向尾部进行添加
b.push(b[0]);
// 删除第二个数
b.splice(0,1);
}
// 输出结果
console.log(toStr);
结果 544841024

加密队列

有解密就有加密,根据解密方法进行反推得到加密方法;

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
// 待生成队列字符
let a = '544841024';
// 转数组
let b = a.split('');
// 循环生成
// 反推即循环最后一位进行次数的交换
for ( let i = 1; i < b.length - 1; i++) {
// 最后位置
// 因为数组下标从0开始所以需要减一
let endPos = b.length - 1;
// 要交换的位置
let startPos = b.length - (i + 1);
// 添加数据
b.splice(startPos,0,b[endPos]);
// 删除数据
b.splice(b.length - 1,1);
}
// replace() 方法用于在字符串中用一些字符替换另一些字符,或替换一个与正则表达式匹配的子串。
console.log(b.toString().replace(/,/g,""));