数据结构

43 阅读1分钟

数据结构 = 数据形式 + 操作

不同形式的数据暴露不同的操作

队列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))  这里面就已经调用过了