稀疏表
在许多应用中,表是一种选择。出于空间考虑会放弃这种选择。当只用一小部分时又是如此,这种表被称为稀疏表。考虑一个大学8000名学生和300多门课,可以使用二维数组的方法学号是列索引,课程编号是行索引。整个表可以想象学生一个学期学习4门课,表的每一列仅有4个单元存储了成绩,其余296个单元也就是98. 7%空着。
较好的解决方法使用两个二维数组。数组classTaken表示每个学生所修的全部课程,studentsInClass表示参与每门课程的全部学生,表中每个单元是具有两个数据成员的对象:学生或课程编号,以及成绩。假定一个学生最多修8门课程,没门课程最多有250个学生学习,在此需要两个数组,因为使用一个列表非常耗时,这两个表比前面一个稀疏表所需的字节1/5还要少。
尽管这个方法比第一个好但是还是有许多空间没有填满。这个结构也不够灵活,无法很好的解决当过满情况。
还有一种方法使用两个链表。数组class的每个单元都是一个指针,指向选修某课程学生的链表,数组student的每个单元则指向某学生所选课程的链表,链表的节点有五个数据成员:学生、课程编号、成绩、指向下一个学生的指针和指向下一门课程的指针。没有一点空间浪费而且比上次使用的空间都少没有限制每门课程的学生数目。
c++数据结构与算法
最新推荐文章于 2024-08-27 16:50:49 发布