Coding Baby日记 Day29:哲学家之王

365 阅读3分钟

Hello大家好!我是Cathy海希,今天是我学习编程的第29天。

欢迎同时关注我的Youtube&B站👉Cathy海希TV

学习时间

6h

学习章节

今天没有学习新的章节,写了昨天学习的数据结构【队列】和【树】的代码(本来以为可以把5种数据结构都复习到的,比预计中花时间)

学习内容

Cathy‘s 餐厅排队机

利用队列的原理写了一个很简单的餐厅取号、叫号的小程序🍴特别好玩!

比起光看理论课(虽然方方老师的理论课也特别好看!每每让人产生一种在看电视连续剧的幻觉),我更加喜欢实际自己动手做一些东西,像之前的画彩虹🌈绘画板🎨太极图☯️虽然都很简单,但这些小项目其实都是集大成的,涉及到了很多目前学习过的知识,是查漏补缺的大好机会。

树的一生

树,从一颗小树苗开始茁壮成长🌱枝繁叶茂,但是也被修理枝桠,也许某一天还会被连根拔起……用编程世界的语言来说,那就是树的增删改查🌲

  • 创建树根

    创建一个对象,里面包含data/children/parent;(最一开始后二者默认为null)

  • 另外创建一个新对象,把它push进爸爸树的children数组里。

    注意children数组可能为null,所以在push之前,需要用or的短路逻辑进行保底

    如果已经有了就啥也不做,为空就创建一个空数组👇

    node.children = node.children||[]
    
  • 也就是遍历每个对象,在这里我们先暂时学习的是先根遍历的方法,据说相对比较简单。访问根结点然后遍历左子树,最后遍历右子树。

    1. 定义一个travel函数,接收它要遍历的根结点tree和要做的某事fn两个参数。
    2. 首先对根结点做完某事,然后进入它孩子数组长度的for循环,又开始对每个孩子做某事。
    3. 注意,当tree没有孩子了(为null了),tree.children.length就会取不到值,所以在循环开始之前,判断一下这个tree有没有孩子,没有的话就直接return
    4. 做的某事fn最好单独定义一下,写起来看起来都方便一些。
  • 这个部分因为其实还涉及到其它比较复杂的知识点,所以可以先暂时忽略课堂上出现的代码。

    p.s.有疑问就一定要提出来!这个部分的代码我疑惑了好久,请问方方老师才知道背后缘由。如果我没问,我就会觉得“我这里没有搞懂诶”,在心里留一个疙瘩,从而陷入消极的情绪。

mindset

算法和数据结构这两节课绝对值得我用更多时间去慢慢品味

我一点都不想尽快往前学,看上去学习进度但是每个知识点都没掌握牢固,到头来不是一场空吗?陶渊明的《归去来兮辞》里我最喜欢的一句话就是胡为乎遑遑欲何之?,你那么心神不宁的样子是要到哪里去呢?享受当下的深度思考难道不是人生的乐趣之一吗?

打算明天把剩下的数据结构代码再全部写一遍,然后复习算法。我知道我想在这一站再多呆一会儿。

本文使用 mdnice 排版