内容正文:
项目二研究学校教学管理相关数据的组织处理
—初识数据结构
01
02
03
熟悉数据结构,了解数据结构在解决问题时的作用。
理解学生基本数据之间有的内在关系以及处理这些数据的时候如何存储。
学习目标
了解数据对象、数据元素和数据项的定义。
04
了解抽象数据类型以及熟练掌握抽象数据类型的作用。
01
问题导入
导入
某学校为了对学生进行管理,每年新生入校都要登记注册各种信息,诸如姓名、性别、出生日期、家庭地址等。学校要为每位新生分配班级学号。中途学生转学转班,学校要删除或修改学生信息。
那同学们知道怎么操作才能方便快捷的整理这些信息么?
1. 从教学管理相关数据认识数据的逻辑结构
表中的每一行构成一个学生的一条信息,包括学号、姓名、性别、出生日期等。可以看出,除第一个和最后一个学生外,每个学生都分别与前一个学生和后一个学生相邻,形成一对一的关系。这张按一定顺序排列的表,就是解决学生管理问题的模型(线性表,将在后续项目详细展开介绍)。
当学生信息被输入计算机后,就成为计算机处理的对象。表中每一行代表一条学生基本数据,称为数据元素,它由学号、姓名、性别、出生日期等组成,其中的每一项称为数据项。所有各条学生基本数据一起构成一个集合(学生基本数据表),称为数据对象。数据元素之间存在一对一的关系的逻辑结构称为线性结构。生活中还有很多这样的例子,如员工管理系统、订票系统等。在这类问题中,一个共同特点是所处理的对象之间存在简单的一对一的线性关系。基于此,可以获得解决该类问题的数学模型。通过设计算法,计算机能够完成对这些数据元素查找、插入和删除等操作。这就是一类数据结构——线
性数据结构。
数据结构
除了学科教学工作外,学校还有许多教学管理工作。为了提高管理效率,须按照一定的工作任务和目标,将成员按不同的工作性质、职务、岗位组合起来,形成层次恰当、结构合理的有机整体。以班级管理为例,一般学校都设有如图2-2 所示的组织管理结构:
其中,校长(分管校长)领导各年级组长,各年级组长分别领导本年级各班班主任。他们之间存在着一对多的关系,所构成的逻辑结构称为树形结构。逻辑结构为树形结构的数据结构属于非线性数据结构。
图 2-2 班级管理组织结构示例
上述学生信息表存储到计算机内时,不仅要存储每一条学生基本数据,还要借助它们在存储器中的相对位置来表示线性关系。表 2-2 所示的是学生信息表的一种存储结构。
假设存储地址为一个十进制数(实际存储地址是一串二进制数),首地址为 200,每条学生基本数据占用 30 个存储单元(一个存储单元的大小为一个字节),即一条数据的存储空间大小为 30 个字节。
2. 了解教学管理相关数据的存储结构
顺序存储结构
从上图中看到数据元素是按照学生信息表中的顺序依次存储在地址连续的存储空间中的,一对一的逻辑关系从存储位置的前后顺序能直接反映出来。如第一个学生杨阳的数据存储在地址为 200 的存储空间内,它后续的卢声凯的数据就存储在地址为 230 的存储空间内,以此类推,依次由低地址向高地址存储,直到存储好最后一个数据元素。
思考与讨论
如果存储地址不连续,是否能表示线性关系?
除了顺序存储结构外,还可以用其他方式来存储数据元素。假定给数据元素(每条学生记录)附加一个后继结点的地址,用于存放下一个数据元素的存储地址,则可得到表2-3 所示的存储结构。
链式储存结构
在这种存储方式下,数据元素的存储地址可以是连续的,也可以是不连续的。每个存储空间存储了数据元素(称为数据域)和后继结点(下一个数据元素)的存储地址(称为指针域),地址 0 表示结束。这一存储方式也可以用图 2-4表示。这种存储结构称为链式存储结构。
3. 了解数据类型和抽象数据类型
计算机的内存容量是有限的,而做两个个位数的加法或两个位数不同的小数的加法,显然需要的空间大小可以不同。计算机研究者通过对不同数据进行分类的方法——数据类型,来描述不同数据的集合,为不同类型的数据分配了大小恰当的内存空间。
所有高级语言都定义了一系列的数据类型。以 Python 语言为例,基本数据类型也可以分为:
• 原子类型——数字型(numbers,包括整型 int 和实数型
float)、字符串型(string)
• 结构类型——元组(tuple)、列表(list)、字典(dict)
教学管理数据中,班级学生人数是整型,学生成绩是实
数型,学生的姓名是字符串型等。
除了上述基本数据类型外,Python 语言还通过定义类(class)来实现结构类型。例如,用“class student:”就可以定义包含学号、姓名等多个数据项的结构类型。这时,student 就相