关于数据结构的思考
数据结构是选择一种高效组织数据存储,查询等操作的集合。
往往结构与操作是相互对应,映衬实现。
开源项目中数据结构的设计,往往是为了解决某个场景或事物来设计的,而不是书本中的通用性数据结构,因此有一定的局限性、可适性和变相性,即该数据结构已有一定的基础限制,如Nginx中的多数数据结构设计在内存池中,内存无需特意释放。同时该数据结构在项目中就是为了解决或存储某个特定的事物,不用特意去扩大其功能和适用场景,即通用性的操作“增删查改”中,有些是特意不需要支持的。
学习开源项目中的数据结构方式
- 知道项目中该数据结构是来做什么的?先列出一个真实的应用场景。思考该应用场景还可以使用哪些数据结构,为什么偏偏使用这种?
- 有什么背景、限制?即基于什么、有哪些前提条件?这些对其会产生什么影响?比如基于内存池实现,内存分配会很简单,无需手动释放
- 项目中该数据结构是如何设计的?组成部分有哪些?哪些组成是核心,哪些是补充/优化?画出其数据结构图
- 提供/支持的操作有哪些?因为设计初衷而特意不提供有些操作,如为了高效存储而特意不需要也不支持删除
- 当前操作中使用了哪些巧用技巧,编码技巧,解决方案/策略?
- 分析其优缺点,如何进行优化,如何提高应用场景及判断是否需要提高?
- 对比其他开源项目中的同类型数据结构,有什么异同点,支持场景有何不同,优缺点如何?
- 思考如何才能编写全面不遗漏的操作流程?
- 虽然开源项目已经受广泛大众的考验,但仍可以去思考还有哪些待改进地方?
- 编写风格如何?函数命名是否得体?为什么自己觉得不好(此处必须询问他人,自己思考方向已有限制)
- 学会中开源项目中学习如何编写测试demo并如何编译
Nginx中的数据结构
写作模板
## 应用场景
## 背景
基于内存池实现
## 定义
```c
数据结构图
.drawio
操作/API
注:图的形式,粗体对外提供
操作 | 功能 | 时间复杂度 | 备注 |
---|---|---|---|
** | |||
编程技巧/解决方案
对比分析
其他
1. 编写demo
``` | 操作 | 功能 | 时间复杂度 | 备注 | | —- | —- | —- | —- | | | | | | | | | | | | | | | |