<数据结构笔记>

作者: 招投标秘籍 | 来源:发表于2021-05-02 09:14 被阅读0次

1.数据结构的定义

数据结构是计算机存储、组织数据的方式。数据结构是指相互之间存在一种或多种特定关系的数据元素的集合。通常情况下,精心选择的数据结构可以带来更高的运行或者存储效率.

2.几种数据结构

2.1queue(队列)

思想:先进先去,就是像我们在餐厅取号
示例:生成一个叫号的网页,点击[取号]生成一个号码
点击[叫号]显示请xxx号就餐

<!DOCTYPE html>
<html>
  <head>
    <title>Parcel Sandbox</title>
    <meta charset="UTF-8" />
  </head>
  <body>
    <div id="screen"></div>
    <div class="actions">
      <button id="createNumber">取号</button>
      <button id="callNumber">叫号</button>
    </div>
    <div>最新号码 <span id="newNumber"></span></div>
    <div>当前队列 <span id="queue"></span></div>
    <script src="src/index.js"></script>
  </body>
</html>
#screen{border: 1px solid black;
  width: 200px;
  height: 200px;
  display: flex;
  justify-content: center;
  align-items: center;
  font-size: 20px;
}
import "./styles.css";

const btnCreateNumber = document.querySelector("#createNumber");
const btnCallNumber = document.querySelector("#callNumber");
const spanNewNumber = document.querySelector("#newNumber");
const spanQueue = document.querySelector("#queue");
const divScreen = document.querySelector("#screen");

const queue = [];
let number = 0;

btnCreateNumber.onclick = () => {
  number += 1;
  queue.push.call(queue, number); // 等价于 queue.push(number)
  spanNewNumber.innerText = number;
  spanQueue.innerText = JSON.stringify(queue);
};

btnCallNumber.onclick = () => {
  const n = queue.shift.call(queue); // 等价于 queue.shift()
  // if n === undefined 没处理
  divScreen.innerText = `请 ${n} 号就餐`;
  spanQueue.innerText = JSON.stringify(queue);
};
image.png

2.2stack(栈)

思想:先进后出
示例:代码的弹栈过程


image.png

2.3Linked List(链表)

思想:一个链接一个

2.3.1Linked List的形式

image.png

2.3.2对链表的操作

//创建新的节点
const createList = value => {
  return createNode(value);
};
//增加节点
const appendList = (list, value) => {
  const node = createNode(value);
  let x = list;
  while (x.next) {
    x = x.next;
  }
  // x.next === null //x 是最后一个节点
  x.next = node;
  return node;
};
//删除节点
const removeFromList = (list, node) => {
//链表
let x = list;
 let p = node; // 课堂里将 p 初始化为 null,这里改为 node
  while (x !== node && x !== null) { // 对 null 进行处理,如果 node 不在 list 中,x 就可能为 null
    p = x;
    x = x.next;
  }
  if(x === null){ // 若 x 为 null,则不需要删除,直接 return, false 表示无法删除不在list里的节点
    return false
  }else if(x === p){ // 这说明要删除的节点是第一个节点
    p = x.next
    return p // 如果删除的是第一个节点,那么就要把新 list 的头节点 p 返回给外面,即 newList = removeFromList(list, list)
  }else{
    p.next = x.next;
    return list // 如果删除的不是第一个节点,返回原来的 list 即可
  }
};
//创建新的节点的函数
const createNode = value => {
  return {
    data: value,
    next: null
  };
};
//遍历节点
const travelList = (list, fn) => {
  let x = list;
  while (x !== null) {
    fn(x);
    x = x.next;
  }
};

const list = createList(10);
const node2 = appendList(list, 20);
const node3 = appendList(list, 30);
const node4 = appendList(list, 40);
travelList(list, node => {
  console.log(node.data);
});

2.4哈希表

思想:就是键和值的组合
难点:如何快速找出需要找到的键值对的组合

2.5tree(树结构)

思想:像公司和中国与省份之间的关系一样的关系,一个链多个


image.png

2.5.1对树的操作

/创建树
const createTree=value=>{
    return{
    data:value,
    children:null,
    parent:null,
    };
};
//增加新的节点
const addChild=(node,value)=>{
    const newNode={
        data:value,
        children:null,
        parent:node,
    };
    node.children=node.children||[];
    node.children.push(newNode);
    return newNode;
}
//遍历所有节点,先根遍历
const travel=(tree,fn)=>{
    fn(tree);
    if(!tree.children){
        return;
    }
    for(let i=0;i<tree.children.length;i++){
        travel(tree.children[i],fn);
    }
};
//删除节点
const removeNode=(tree,node)=>{
    const 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);
};

const tree=createTree(10);
const node2=addChild(tree,20);
const node3=addChild(tree,30);
const node4=addChild(tree,40);
//给node2在增加节点
addChild(node2,200);
addChild(node2,201);
console.log(tree);
//打印出节点数据
const fn=node=>{
    console.log(node.data);
}
travel(tree,fn)
//删除节点
removeNode(tree,node4)

本文为本人的原创文章,著作权归本人和饥人谷所有,转载务必注明来源.

相关文章

  • 数据结构回顾学习-基础知识

    数据结构回顾学习笔记 这次数据结构回顾笔记,是我对数据结构回顾学习的笔记。回顾过程是参考易百教程网站上数据结构教程...

  • Redis深度历险笔记

    Redis深度历险笔记 基础与应用 Redis基础数据结构 5种基础数据结构:string、list、hash(字...

  • Observer 观察者模式

    设计原则学习笔记 设计模式学习笔记 作用 使数据结构的变换可以从数据结构主动通知到观察者处。同时方便观察者和被观...

  • alg4th-1.3

    algorithm 4th笔记(1.3) 封装数据结构 Bag,Stack,Queue 三种数据结构各有各的特点,...

  • 小甲鱼数据结构&算法教程学习笔记01

    小甲鱼数据结构&算法教程学习笔记01 一、绪论 程序设计=数据结构+算法 数据结构:数据元素之间的一种或多种特定关...

  • 00.数据结构、算法、时间复杂度

    文章为极客时间《数据结构与算法之美》的学习笔记。要点:辩证思考,多想为什么,多练。 什么是数据结构? 数据结构就是...

  • Redis入门--数据结构

    学习笔记 Redis的数据结构的编码 常说的Redis五种基本数据结构string、list、hash、set、z...

  • 数据结构(二):栈和队列

    本系列为数据结构学习笔记,如有错误请指正~ 数据结构(一):数组和链表 一、理论知识 栈和队列都是线性数据结构,属...

  • 数据结构(三):散列表

    本系列为数据结构学习笔记,如有错误请指正~数据结构(一):数组和链表数据结构(二):栈和队列 一、基本概念 散列表...

  • 2019-04-30

    数据结构记录笔记 第一章:数据结构概论 1.1数据结构的概念 数据是信息的载体,是描述客观事物的数、字符,以及所有...

网友评论

    本文标题:<数据结构笔记>

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