美文网首页
数据结构

数据结构

作者: 郑馋师 | 来源:发表于2019-10-14 11:06 被阅读0次

数据结构:要写!!手动!!数据结构非常简洁才可

eg. 弹栈压栈的过程


后进先出

链表

就是原型链不断的连接,要断去某个链,就让x的前一个等于x的后一个,这样就不走x从而断开
链表的怎删改查
eg.

let createNode = value => {
  return {
    data: value,
    next: null
  };
};
let removeFromlist = (list, node) => {
  let p = null;
  let x = list;
  while (x !== node) {
    p = x;
    x = x.next;
  }
  p.next =
    x.next; /*p代表的是上一个节点的x,所以根据我们删节点得到的规律就是让list的上一个节点等于list的下一个节点,这样list没用就被删了
p.next===x,也就是x和x.next相同,这样到达x.next.next的时候只要经过x而不用经过x---x.next---x.next.next,所以x.next就被删掉了*/
};
//删
let createList = value => {
  return createNode(value);
};
//增
let appendlist = (list, value) => {
  let node = createNode(value);
  let x = list;
  while (x.next) {
    x = x.next;
  }
  //x.next === null; //x是最后一项
  x.next = node;
  return node;
};

let travelList = (list, fn) => {
  let x = list;
  while (x !== null) {
    fn(x);
    x = x.next;
  }
}; //查
let list = createList(10);
let node2 = appendlist(list, 20);
let node3 = appendlist(list, 30);
console.log("list");
console.log(list);
travelList(list, node => {
  console.log(node.data);
});

变形

  1. 双向:除去next,data外还有一个previous属性指向上一个
  2. 循环:最后一个不是null而是指向第一项

tree

链表的升级,一个可以对应多个
eg.

let createTree = value => {
  return { data: value, children: null, parent: null };
};

//增
let addChild = (node, value) => {
  let Newnode = {
    data: value,
    children: null,
    parent: node
  };
  node.children = node.children || [];
  node.children.push(Newnode);
  return Newnode;
};
//查
let travel = (tree, fn) => {
  fn(tree); //先看根节点
  if (!tree.children) {
    return;
  }
  for (let i = 0; i < tree.children.length; i++) {
    travel(tree.children[i], fn);
  } //再看子节点的每棵树
};
let fn = node => {
  console.log(node.data);
};
//删(哪个对应节点包含了某个数,要找他的爸爸,所以要先弄一个find的函数)
let find = (tree, node) => {
  if (tree === node) {
    //如果树就是要找的,就return树
    return tree;
  } else if (tree.children) {
    //没就去他儿子里面找
    for (let i = 0; i < tree.children.length; i++) {
      let result = find(tree.children[i], node);
      if (result) {
        return result;
      }
    }
    return undefined; //result不存在回undefinded
  } else {
    return undefined;
  } //}tree.result不存在回undefined
};

//开始删了
let removeNode = (tree, node) => {
  let siblings = node.parent.children; //他的兄弟姐妹
  let index = 0;
  for (let i = 1; i < siblings.length; i++) {
    if (siblings[i] === node) {
      index = i;
    }
    siblings.splice(index, 1);
  }
};

let tree = createTree(10);
let node2 = addChild(tree, 40);
addChild(tree, 20);
addChild(tree, 30);
addChild(node2, 50);
addChild(node2, 60);
removeNode(tree, node2);
console.log(tree);

哈希

看这个
个人简单的理解:
很简单,我们把你的车牌号看作一个8位36进制的数字;为了方便,我们可以把它转换成十进制。那么,你的车牌号就是一个不大于2821109907456的数字。现在,我们把你的车牌号除以一万,只取余数——你看,你的车牌号是不是就和010000之间的数字对应起来了?很好,你的车就停在这个数字对应的停车位上,过去开就是了——O(1)的查找效率!这个“把你的车牌号映射进010000之间”的操作,就是所谓的“散列”“杂凑”“哈希”或者hash(当然,实践上,为了尽量减少冲突,哈希表的空间大小会尽量取质数)。相对于“以key为下标直接访问的数组”,哈希表是“时间换空间”;相对于二分法查找,哈希表又是“以空间换时间”。这种“中庸”的定位使得它在许多场合极为好用。

如果冲突就叠起来或者顺延一位,但还是看这个文章比较好

相关文章

  • IOS开发_数据结构

    1、数据结构; 2、算法; 3、数据结构与算法; 1、数据结构; 1.1 概念: 数据结构:数据结构是计算...

  • py基础

    5Python集合容器 数据结构数据结构 一般将数据结构分为两大类: 线性数据结构和非线性数据结构。 线性数据结构...

  • 思维导图之数据结构+算法

    数据结构+算法 = 程序 数据结构比较 参考文章 数据结构与算法数据结构与算法(java)

  • 数据结构与算法分析:大纲]

    00数据结构与算法分析:大纲01数据结构:数组02数据结构:链表03数据结构:栈03数据结构:队列 本系列课程主要...

  • 数据结构:数组

    00数据结构与算法分析:大纲01数据结构:数组02数据结构:链表03数据结构:栈03数据结构:队列 数组 数组是一...

  • 数据结构—概述

    数据结构概述 数据结构概述:程序设计 = 数据结构 + 算法数据结构:数据元素之间存在所有特定关系的集合,数据结构...

  • OVS 源码分析整理

    OVS 核心代码 OVS 架构 OVS 主要的数据结构数据结构关系图主要的数据结构和数据结构的参数数据结构代码 d...

  • 01. 数据结构与算法绪论

    一、数据结构 1. 什么是数据结构 2. 数据结构的分类 3. 常用的数据结构 4. 数据结构的应用表现 二、算法...

  • 数据结构与算法 - 查找

    数据结构与算法系列文章数据结构与算法 - 时间复杂度数据结构与算法 - 线性表数据结构与算法 - 树形结构数据结构...

  • C#之数据结构(上)

    数据结构 一般将数据结构分为两大类: 线性数据结构和非线性数据结构。 线性数据结构有: 线性表、栈、队列、串、数组...

网友评论

      本文标题:数据结构

      本文链接:https://www.haomeiwen.com/subject/kqfzpctx.html