数据结构 = 数据形式 + 操作
不同形式的数据暴露不同的操作
队列Queue
先进先出的数组
queue.push是入队,queue.shift是出队
栈Stack
后进先出的数组
a.push是压栈,a.pop是弹栈
链表 Linked List
哈希表 hash
树
面试题
计算一段字符串中出现的每个字符次数
str = '字符串'
hash = {}
for i from 0 to str.length-1
key = str.get(i)
value = hash.get(key,0)+1
hash.set(key,value)
BUG
递归调用注意打印时候不要二次调用
代码:
let numbers = [12, 9, 10, 5, 1];
let min = (numbers) => {
if (numbers.length > 2) {
return min([numbers[0], min(numbers.slice(1))]);
} else {
return Math.min.apply(null, numbers);
}
};
let minIndex = (numbers) => numbers.indexOf(min(numbers));
let sort = (numbers) => {
if (numbers.length > 2) {
let index = minIndex(numbers); // 拿到numbers最小的元素的下标
let min = numbers[index]; // 最小的元素
numbers.splice(index, 1); // 从numbers删掉最小的元素min
return [min].concat(sort(numbers));
} else {
return numbers[0] < numbers[1] ? numbers : numbers.reverse();
}
};
错误调用:
sort(numbers)
console.log(sort(numbers)); // 存在二次调用,将数组改变,结果错乱
正确调用
let s = sort(numbers);
console.log(s); // 或者直接console.log(sort(numbers)) 这里面就已经调用过了