什么是数据结构和算法?
先不考虑有关计算机的一切,我们思考一个问题:假设你所在的公司有员工上万人,如何编写一本能随身携带的通讯录?你可能首先需要搜集整理所有员工的个人信息,当然在此之前你得知道通讯录里面需要有哪些信息。我们假定需要以下员工个人信息:姓名、公司、部门、职务、手机号、电子邮箱、家庭地址,然后经过一番折腾,你终于把所有员工的这些信息搞到手了,你拥有的可能是部分电子表格、部分打印版的、部分手写的,电子表格同样的字段还有各种不同的格式,比如有的手机号是文本格式,有的又是数字格式等等。于是,你心里默默确认好各个字段的格式,然后新建了一张大表,把所有的电子表、非电子表信息全部整合到这一张表中。这时候我们需要考虑下一个问题,按什么顺序显示通讯录?你跟领导确认后得知需要先放公司领导,然后是各个职能部门及分公司,再是各个事业部及下面的子公司。你发现自己的信息表中压根就没考虑事业部,好吧,你可能需要在表中新插入一列 “事业部” 的字段。接下来呢?你还需要确认事业部下面公司的排序方式,每个公司部门的排序方式,每个部门员工的排序方式,你不能想当然地按照姓氏笔画或拼音,因为部门领导一般都要放在第一个然后是副职、主管这样一路下来,所以你还需要按职务大小排序。又经过一番折腾,你终于搞完了,在打印前你还需明确打印出来的小册子尺寸有多大,每个上面要显示多少位员工,然后才能在电子表中设置页面。你还可能需要考虑设置索引,至少到公司层面吧,如果贴心点你可能还会在公司分割线处做一些处理以便使用者可以快速翻到那一页。这看起来好像挺复杂的,但其实还有很多细节问题我们没有考虑,随便举几个例子:如果一个公司或部门正好只有个表头在某一页的最下方,要求这种直接把表头换到下一页;不同的字段要求不同的字体;字段内容太长的要求换行或缩小字体填充;所有人员信息以某个时间点为准,否则随时的人员进进出出会让你的通讯录永远无法完成;不同员工拿到的通讯录人员名单可能不同,你得根据权限设置。这些例子涉及到边界、格式、版本、权限等。噢,这还只是很普通的一个任务,实际中的任务(哪怕是做通讯录)都可能会比这更加复杂。