今天大概温习了一下数据结构相关知识,在此小结,以备以后查阅。
数据结构是什么?应该如何定义?简单的说,数据结构是研究数据的存储,数据之间的关系,及对数据实现各种操作的一门科学。
以下就行数据结构概念三个方面结合Java中常用数据结构进行实例分析(数据结构大同小异思想都一样),以此更直观的链接数据结构相关概念。
数据存储:
例如对一个工厂员工的登记表,用计算机管理登记表格,把工厂中所有员工用一个格式文件存储下来,像一个关系型数据库结构,每一条记录表示一个员工,员工包括工号,姓名,年龄等,每条记录按照从下到大顺序排列。
因为每个员工的属性相同,将每个员工的属性集合抽象成一个独立的数据单位(例如:可以使用ArrayList, Vector进行数据存储,然后通过JVM对底层内存,磁盘进行操作实现物理存储)。
数据关系:
这时可以将数据单位中的集合成为数据集合,我们将这种数据之间关系成为线性关系,也就是说该文件的逻辑结构为线性结构,也称该文件为一个线性表,在这种结构中,计算机内可以采用多种方法存储,只要体现出这种线性关系就行(例如:可以用ArrayList也可以用Vector只要体现这种线性关系即可)。
数据关系可以通过如下方式进行管理,通过Java面向对象方式进行数据关系管理。
public class Employee {
// 工号
private long id;
// 姓名
private String name;
// 年龄
private int age;
}
此种关系为线性关系,数据结构中关系分为线性关系(如上边的员工关系,员工每个属性都相同,依次排开每个结构都相同)和非线性关系(如机房中的所有计算机的关系,没两个计算机都有可能有关系,有联系,这时候的数据关系可以表示为图关系)
关系是指数据元素之间存在逻辑关系,也称为数据的逻辑结构,数据在计算机内的存储表示,称为数据的存储结构或者物理结构。
逻辑结构体现的数据库元素之间的逻辑关系,换句话说就是从操作对象中抽象出来的数学模型,因此又称为抽象结构。
存储结构是数据在计算机内的表示,又称物理结构,它包括数据元素的表示和关系的表示,由于映像的方法不同,所以同一数据结构可以映像两种不同的数据结构:顺序映像(顺序存储结构,一般为一维数组等)和非顺序映像(非顺序存储结构,一般为链表,散列存储,索引存储等)
数据操作:
还是上边的文件,比如对于这个文件我们可以进行如下操作(以ArrayList为例),如果某个员工离开了工厂(remove(index), remove(obj)),如果新来一个新员工(add(obj)),新年开始新员工增加了一岁(remove(index/obj) -> add(obj) || set(index, obj)), 比如根据员工的工号进行降序排列,或者进行升序排列等(可用使用帮助类Collections.sort(collection))
数据结构所要研究的主要分三个方面:
1.研究数据之间的客观联系(逻辑结构)
2.研究数据在计算机内部的存储方法(存储结构)
3.研究如何在数据的各种结构(逻辑的和物理的)上实施有效的操作或处理(算法)