关于数据结构的思考

数据结构是选择一种高效组织数据存储,查询等操作的集合。

往往结构与操作是相互对应,映衬实现。

开源项目中数据结构的设计,往往是为了解决某个场景或事物来设计的,而不是书本中的通用性数据结构,因此有一定的局限性、可适性和变相性,即该数据结构已有一定的基础限制,如Nginx中的多数数据结构设计在内存池中,内存无需特意释放。同时该数据结构在项目中就是为了解决或存储某个特定的事物,不用特意去扩大其功能和适用场景,即通用性的操作“增删查改”中,有些是特意不需要支持的。

学习开源项目中的数据结构方式

  1. 知道项目中该数据结构是来做什么的?先列出一个真实的应用场景。思考该应用场景还可以使用哪些数据结构,为什么偏偏使用这种?
  2. 有什么背景、限制?即基于什么、有哪些前提条件?这些对其会产生什么影响?比如基于内存池实现,内存分配会很简单,无需手动释放
  3. 项目中该数据结构是如何设计的?组成部分有哪些?哪些组成是核心,哪些是补充/优化?画出其数据结构图
  4. 提供/支持的操作有哪些?因为设计初衷而特意不提供有些操作,如为了高效存储而特意不需要也不支持删除
  5. 当前操作中使用了哪些巧用技巧,编码技巧,解决方案/策略?
  6. 分析其优缺点,如何进行优化,如何提高应用场景及判断是否需要提高?
  7. 对比其他开源项目中的同类型数据结构,有什么异同点,支持场景有何不同,优缺点如何?
  8. 思考如何才能编写全面不遗漏的操作流程?
  9. 虽然开源项目已经受广泛大众的考验,但仍可以去思考还有哪些待改进地方?
  10. 编写风格如何?函数命名是否得体?为什么自己觉得不好(此处必须询问他人,自己思考方向已有限制)
  11. 学会中开源项目中学习如何编写测试demo并如何编译

Nginx中的数据结构

Nginx数据结构总结 - 图1

写作模板

  1. ## 应用场景
  2. ## 背景
  3. 基于内存池实现
  4. ## 定义
  5. ```c

数据结构图

.drawio

操作/API

:图的形式,粗体对外提供

操作 功能 时间复杂度 备注
**

编程技巧/解决方案

对比分析

其他

1. 编写demo

``` | 操作 | 功能 | 时间复杂度 | 备注 | | —- | —- | —- | —- | | | | | | | | | | | | | | | |