JS描述数据结构与算法(一)
- 包含数组,栈,队列(使用数组实现)
什么是算法和数据结构
- 数据结构:计算机中存储和组织数据的方式
- 算法:解决办法的逻辑/操作
数组
JS数组就是API的调用
栈结构
- 栈是受限的线性结构:(生活中类似于自助餐的托盘)
- 只能在一端添加/删除元素(栈顶)
- 进入:进栈(压栈)
- 出去:出栈(退 栈)
-
函数调用栈
- A调用B,B调C,C调D
- D,C,B,A的弹栈顺序
-
一个栈结构面试题
- 有6个元素 6,5,4,3,2,1的顺序进栈(要考虑到可以一边入栈一边出栈)
- 3,4,6,5,2,1不合法
4.使用数组实现栈
- 有6个元素 6,5,4,3,2,1的顺序进栈(要考虑到可以一边入栈一边出栈)
|
|
-
十进制转二进制
利用栈结构来实现
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
// 函数:将十进制转为二进制 function dec2bin(decNumber) { // 1.定义栈对象 var stack = new Stack() // 2.循环操作 while (decNumber > 0) { // 2.1获取余数并放到栈中 stack.push(decNumber % 2) // 2.2获取整除后的结果作为下一次运行的数字 decNumber = Math.floor(decNumber / 2) } // 3.从栈中取出0和1 var binaryString = '' while (!stack.isEmpty()) { binaryString += stack.pop() } return binaryString }
队列
- 一种受限的线性表,先进先出
- 类似于生活中的电影影院,厕所排队,商场
- 优先排队的人优先处理
- 基于数组实现队列**,基于数组实现性能不高**(因为删除,从前面删除后,每个元素要往前移动)
|
|
-
击鼓传花面试算法题
规则
- 几个朋友一起玩一个游戏,围城一圈,开始叔叔,数到某个数字的人自动出局
- 最后剩下的人会胜利,请问最后剩下的是在哪一个位置的人
|
|
- 优先级队列
- 如头等舱和商务舱乘客的优先级高于经济舱
- 医院会优先处理病情比较严重的患者
- 每个元素不仅包含元素还包含优先级
|
|