1.2.2 数据结构 存储结构是逻辑结构在存储器中的映象,它包含数据元素的映象和关系的映象。 在计算机中表示信息的最小单位是"位(bit)",任何一个数据元素都可以用一个 "位串" 表示,如,数值"321" 可用位串 101000001 表示,字母"A"可用位串 001000001 表示。当数据元素由多个数据项构成时,每个数据项即为表示数据元素的位串中的一个"子位串"。 |
由于逻辑结构包括数据元素集合和关系的集合,则讨论存储结构只需要分别讨论数据元素和关系在计算机中如何表示即可。 |
|||
关系有两种表示方法: 其一为"顺序映象"。以 "y 相对于 x 的存储位置" 表示 "y 是x的后继",例如,令 y 的存储位置和 x 的存储位置之间相差一个预设常量C,C本身是个隐含值,由此得到的数据存储结构为"顺序存储结构"。 其二为"链式映象"。以和x绑定在一起的附加信息(指针)表示后继关系,这个指针即为 y 的存储地址,由此得到的数据存储结构为"链式存储结构"。 可见,在顺序存储结构中只包含数据元素本身的信息,而链式存储结构中以"由数据元素 x 的存储映象和附加指针合成的结点"表示数据元素。 |
关系的最小单位是一个<x,y>的有序对,则讨论关系的表示方法只需讨论这个有序对的表示方法即可,即如何表示
"y是x的后继"。 顺序映象 链式映象 |
|||
存储结构的描述方法随编程环境的不同而不同,当用高级程序涉及的油印间相编程时,通常可用高级编程语言中提供的数据类型描述之。 例如,当以"顺序存储结构"表示前述定义的长整数时,可将它定义为: typedef int Long_int[3]; 同样,此时对数据元素也要借用高级编程语言中的数据类型描述之。 对每一个数据结构而言,必定存在与它密切相关的一组操作。若操作的种类和数目不同,即使逻辑结构相同,数据结构能起的作用也不同。 不同的数据结构其操作集不同,但下列操作必不可缺: 1) 结构的生成; 2) 结构的销毁; 3) 在结构中查找满足规定条件的数据元素; 4) 在结构中插入新的数据元素; 5) 删除结构中已经存在的数据元素; 6) 遍历。 |
例如,定义"日期"为: typedef struct { int y; // 年号 Year int m; // 月号 Month int d; // 日号 Day } DateType; // 日期类型 定义"学生"为: typedef struct { char id[8]; // 学号 char name[16]; // 姓名 char sex; // 性别 DateType bdate; // 出生日期 } Student; // 学生类型 |