数据结构(基础知识)

数据结构是解决算法问题的有用工具。 您可能熟悉的两个数据结构是数组和字典。 数组具有内置的函数,可让您解决问题。 您可以对数组进行计数,对数组进行排序,将项目追加到数组中,在数组中的项目之间循环等等。类似地,您可以将键值对插入字典中,从字典中提取键值对,等等。 ,队列和树是另外三个对您的代码工具箱有用的数据结构。

堆栈

堆栈有助于按特定顺序组织数据。 堆栈可归为三大功能:

  1. 推动将新元素添加到堆栈顶部
  2. 弹出以从堆栈顶部删除元素
  3. 窥视堆栈顶部而不弹出

与您放在桌上的一堆纸类似,添加到纸堆中的最后一个元素是可以从纸堆中删除的第一个元素。 另外,就像您只能看到桌子上纸叠顶部的纸上内容一样,您也只能看到编码纸叠中的顶部元素。

如果使用字符串,上面的示例很好,但是如果要使用其他类型,该怎么办? 没有恐惧! 泛型在这里!

使用泛型堆栈

s列

类似于堆栈,队列有助于按特定顺序组织数据。 与邮局在队列中等待的第一个人是第一个离开队列并得到服务的人一样,代码队列中的第一个元素也是第一个离开队列的元素。 队列可归为三大功能:

  1. 排队将新元素添加到队列
  2. 出队以从队列中删除元素
  3. 偷看队列中的第一个元素而不将其从队列中删除

像堆栈一样,您也可以将泛型与队列一起使用。

树木

树有助于提高搜索效率,提供排序的数据列表以及使对象之间具有层次关系。 树木由三个元素组成:

  1. 节点是树结构中的数据块
  2. 是树的入口点(零级节点)
  3. 叶子 (终端节点)是没有子节点的节点

由于树是由节点组成的,因此我首先创建一个Node类。 此类由值,Node类型的子级数组(有时还包括Node类型的父级)组成。

您可能想知道为什么我指定Node类符合等于协议。 为了在使用泛型时实现搜索功能,我不得不让Xcode知道Node类实际上可以执行比较。

如果您要以树的方式考虑上述测试,它看起来像这样:

您可能已经听说过专门的“二叉树”。二叉树是其中每个节点只有0,1或2个子节点的树。 二叉搜索树是一棵树,它从树中插入和删除信息,以便始终对树进行排序。 要了解更多信息,请查看以下链接:

二叉树

二进制搜索树

参考文献:

https://github.com/raywenderlich/swift-algorithm-club