<aside> 💡

关于数据结构和算法部分,默认采用的语言是Typescript。但部分场景涉及C/C++;

为什么不使用C++呢:因为用C++不可避免的要使用指针。这个对应用层的快速开发来说,没有场景。

为什么使用Typescript呢:首先,Javascript非常简单,易于上手,开发场景也很多。其次,Typescript是Javascript的超集,拥有类型,为学习数据结构提供了非常好的平台。Typescript开发全栈应用也非常快。从实际出发,再合适不过。

下文中举例的方法,可能涉及到TS的语法,遇到可以去看。

JavaScript/TypeScript

如果需要其他语言请联系作者。

</aside>

数据结构

数据结构是以某种特定的布局方式存储数据的容器

<aside> 💡

数据结构就是把零散的东西组织起来的方式,从而方便某种行为。 比如,去医院排队挂号,在排队过程中,零散的人通过队列的方式聚集,这是一种组织方式(线性结构,我们可以直接在他们的位置找到他们前面或者后面的人,称为顺序结构);挂完号之后,以挂号顺序进行就诊(也是线性结构,与顺序结构不同的是,因为记录他们顺序的是他们的号码,而不是他们的所站的位置,有可能他已离开。但我们可以通过广播号码,找到他们。称为链式结构)。再比如政府、企业的结构设计,从董事长-总经理-经理-负责人等等,存在一对多的关系(树形结构)。亲戚之间总喜欢谈论人际关系,小明是小红的哥哥,老李是小明的叔叔等等,明显的存在多对多的关系(图);而我们的身份证号,存在一一映射,可以迅速定位到某个具体人这也是一个组织方式(哈希,Hash)

</aside>

数据需要根据不同的场景,按照特定的格式进行存储。有很多数据结构能够满足以不同格式存储数据的需求。

逻辑结构:探讨数据元素之间的逻辑关系. 集合(各个元素同属于一个集合,别无其他关系),表,树,图;

存储结构:探讨如何用计算机表示数据元素的逻辑关系. 顺序,链式,索引,散列(根据元素的关键字直接计算出该元素的存储地址,又称为哈希(Hash)存储)

几个基本概念

基本操作

基于上文,对一个组织结构的调整:就是增加(入职)、删除(离职)、查询(找人)、更改(调职)。

  1. 增加:以数组为例: items.push(item)
  2. 删除: items.pop()
  3. 查找: items[4]