什么是数据结构
- 在计算机中存储和组织数据的方式
什么是算法(Algorithm)
- 解决问题
数组
js的数组就是API的调用- 普通语言比如
Java的ArrayList不能存放不同的数据类型,且数组容量不能自动改变,其中间插入和删除操作性能比较低
栈结构
-
栈结构示意图

-
栈(stack),一种受限的线性表,是后进先出
- 仅在栈顶能插入和删除
LastInFirstOut(LIFO)后进先出- 进栈,出栈
- 栈的应用
- 函数调用栈
- 函数之间互相调用:A中调用B,B中调用C,C中调用D
- 递归函数的栈溢出
-
栈结构面试题

-
栈结构代码实现封装
- 实现栈可基于数组也可基于链表
- 先封装栈类,定义一个类,也就是定义一个方法,让栈中的
items为数组- 实现方法需要用原型来实现,不然每个实例都有这些全部方法就会太占用内存,在
Stack类中,定义各原型方法,用本来就有的push,pop...
- 注意使用
this.items- 栈的常见操作
push(element):添加一个新元素到栈顶pop():移除栈顶的元素,同时返回peek():返回栈顶元素,不移除isEmpty():如果栈里面没用任何元素就true,否则falsesize():返回栈里的元素个数,像数组的lengthtoString():将栈结构的内容以字符串形式返回
function Stack() {
this.items = [];
Stack.prototype.push = function (element) {
this.items.push(element)
}
Stack.prototype.pop = function () {
return this.items.pop();
}
Stack.prototype.peek = function () {
return this.items[this.items.length - 1]
}
Stack.prototype.isEmpty = function () {
return this.items.length == 0
}
Stack.prototype.size = function(){
return this.items.length
}
Stack.prototype.toString = function(){
var str = ''
for(var i = 0;i<this.items.length;i++){
str += this.items[i] + ' '
}
return str
}
}
- 用栈实现十进制转二进制
- 定义一个方法要传入参数
- 新定义一个栈
- 用while循环,获取余数并将其压入栈
- 把除的整数作为下一次的被除数
- 直到这个数为小于等于0的值
- while循环拿出栈里的值并转成字符串的形式
function dec2bin(decNumber) {
var stack = new Stack()
while(decNumber>0){
stack.push(decNumber%2)
decNumber = Math.floor(decNumber/2)
}
var res = ''
while(!stack.isEmpty()){
res += stack.pop()
}
return res
}
console.log(dec2bin(1001));