天天看点

《数据结构与抽象:Java语言描述(原书第4版)》一2.1.1 类比

本节书摘来华章计算机《数据结构与抽象:java语言描述(原书第4版)》一书中的第2章 ,第2.1.1节,[美]弗兰克m.卡拉诺(frank m. carrano) 蒂莫西m.亨利(timothy m. henry) 著 罗得岛大学  新英格兰理工学院 辛运帏 饶一梅 译 更多章节内容可以访问云栖社区“华章计算机”公众号查看。

假定教室(称为教室a)在固定位置上有40把椅子。如果一门课程限制为30位学生,则有10把椅子空闲且浪费。如果我们提高选课限制,则哪怕还有另外20位学生想上这门课,也仅能多容纳10位学生。

数组就像这间教室,每把椅子像是一个数组位置。假定我们把教室内的40把椅子从0开始顺序编号,如图2-1所示。虽然在一间典型的教室内椅子按行放置,不过我们忽略这个细节,将椅子看作一维数组。

增加一位新学生。假定老师要求到达的学生按顺序坐到已编号的椅子上。这样,第一位到达教室的学生坐在0号椅子上,第二位学生坐在1号椅子上,以此类推。老师提出的按照顺序编号坐在椅子上的要求是随意给出的,这只是他的习惯而已。你会看到,我们将以类似的方式填充包的数组。

假定房间a中的30位学生坐在从0~29之间的连续编号的椅子上,且有新学生想加入这些学生中。因为房间内有40把椅子,所以可占用编号30的椅子。可以简单地把新学生分配到编号30的椅子。当所有40把椅子都占满时,教室内不能再容纳更多的学生了。教室满了。

《数据结构与抽象:Java语言描述(原书第4版)》一2.1.1 类比

删除某位学生。现在假定教室a中5号椅子上的学生要逃课。5号椅子在房间内固定的位置上,所以会空出来。但如果我们仍想让学生们坐在连续编号的椅子上,则需要一位学生移到5号椅子。因为学生没有特定的次序,所以如果位于最高编号椅子的学生移到5号椅子,则其他人就不需要再移动了。例如,如果房间内30位学生坐在0~29号椅子,则29号椅子的学生应该移到5号椅子。29号椅子将空出来。

自测题1 上面描述的为让空闲的椅子不再空闲而移动学生的方式有什么优点? 自测题2 让空闲下来的椅子空着有什么优点?

自测题3 如果学生想逃课,哪个学生逃课不会迫使其他的人换椅子?