提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
前言
数据结构可以说是三大件(数据结构,计算机网络,计算机组成)中挺为重要的一部分了,很多人有时觉得数据结构没啥用,但往往这只是对于简单的编写代码来说,我们往往很少去了解到我们一些调用的方法的实现原理,并且在很多时候JavaScript引擎帮我们处理好了一切。但是这并不代表我们不去了解甚至把它当为关键来学习。
在武林中,同样的招式,也会因为不同的人而不同的效果,这就是一个人内力的区别。有的人从小练就内力,打出的每一招简洁有力,以一破百。相同的,数据结构,也叫算法吧,就是我们程序员的基本修养和内力,招式千变万化,掌握基本才能以不变应万变,在现在的越来越多的公司也会要求有良好的算法基础。在大公司这更是必备的要求。呜呜呜,已经卷到找份实习都会有较高的要求。
之前和一位字节大佬的聊天,另外,我舍友面试阿里,笔试两道力扣hand,同志萌,要是打算进大厂的话,越早把算法刷起来你的优势越大。
在该系列,我会尽力去讲解JavaScript的数据结构,并且会通过与知识点的例题(力扣)加深理解。大家在学习后要多动脑,动手去实现它。
一、队列
概括
二、创建方法
基于数组的创建
基本思想是利用一个数组来存储数据,其实很简单的,大家试着写一下就好了。
- 实现代码
基于队列的创建
实现思想其实很简单,我们是要实现先进先出,先放入的在最上面的。所以我们应该在入栈时保证队列中新加入队尾的元素被移到了队头,出栈只需弹出队头元素即可。这里用两个队列来实现
- 实现代码
美妙的算法时间
力扣20
给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串 s ,判断字符串是否有效。
有效字符串需满足:
1.左括号必须用相同类型的右括号闭合。
2.左括号必须以正确的顺序闭合。
思路
代码实现
总结
提问环节
1.有6个元素6,5,4,3,2,1按顺序进栈,问下列哪一个不是合法的出栈顺序?
A:5 4 3 6 1 2 (√)B:4 5 3 2 1 6 (√)C:3 4 6 5 2 1 (×)D:2 3 4 1 5 6 (√)
解析:
关于栈非常经典的一题。
A答案:65进栈,5出栈,4进栈出栈,3进栈出栈,6出栈,21进栈,1出栈,2出栈(整体入栈顺序符合654321);
B答案:654进栈,4出栈,5出栈,3进栈出栈,2进栈出栈,1进栈出栈,6出栈(整体的入栈顺序符合654321);
C答案:6543进栈,3出栈,4出栈,之后应该5出栈而不是6,所以错误;
D答案:65432进栈,2出栈,3出栈,4出栈,1进栈出栈,5出栈,6出栈。符合入栈顺序;