学习总结
利用计算机来解决显示世界中的各种实际问题时,首先要将实际问题中的操作对象抽象为能够用计算机表示的数据,为这些数据建立一个数学模型(数据的逻辑结构),再面对数据以某种组织形式进行存储(数据的存储结构),最后实现对数据元素的各种操作(算法设计与实现)。
1.1 数据结构的基本概念
1.1.1 基本的数据概念和术语
1.数据(Data)
数据是信息的载体。数据时对客观事物的逻辑归纳,是能够被计算机识别、存储和加工处理的数字、字符以及各种符号集合的统称,是计算机程序加工的“原料”。它可以是离散的数字、文字、符号等,也可以是连续的数据,如声音、图像等。
2. 数据元素(Data Element)
数据元素是组成数据的基本单位,也成为结点、顶点、记录等,在计算机程序中通常作为一个整体进行考虑和处理。一个数据元素可以是一个不可分割的原子项,也可以由若干个数据项组成。
3. 数据项(Data Item)
数据项是数据元素中具有独立含义的最小表示单位,为称为字段、域、属性。
4. 数据对象(Data Object)
数据对象时性质 相同的数据元素的集合,是数据的子集。性质相同指的是数据元素具有相同数量和类型的数据项。
5. 数据结构(Data Structure)
数据结构就是数据元素之间的相互关系,即数据的组织形式。
包含三个方面:数据的逻辑结构、数据的存储结构、数据的运算(操作或算法)。通常,算法的设计取决于数据的逻辑结构,算法的实现取决于数据的存储结构。
1.1.2 数据的逻辑结构
数据的逻辑结构常简称为数据结构,分为线性结构和非线性结构了两种,其中非线性结构又主要包括树结构和图结构。
1.线性结构
线性结构是数据元素之间具有线性关系的数据结构,数据元素之间形成一对一的关系。其特征是:除第一个和最后一个元素外,每个数据元素有且仅有一个直接前驱和一个直接后继元素,第一个元素只有一个直接后继元素,最后一个元素只有一个直接前驱元素。
2. 树结构
树结构是数据元素之间具有层次关系的一种非线性结构,数据元素之间存在一对多的关系,树中数据元素通常称为结点。其特征是:出来根节点和叶子结点之外,树中任意一个结点只有一个直接前驱结点(父结点)和多个直接后继结点(孩子结点),根结点没有前驱结点,叶子结点没有后继结点。
3. 图结构
图结构也是非线性结构,数据元素之间存在多对多的关系,每个数据元素可有多个前驱元素和多个后继元素。
4. 集合结构
集合结构中的数据元素除了属于同一个集合外,它们之间没有其他关系。各个数据是“平等”的,它们的共同关系就知识属于同一个集合,如图
1.1.3 数据的存储结构
数据的存储结构主要有两种:顺序存储和链式存储。为了加快查找速度,引入了索引(分块)查找和散列(哈希)查找。因此,从采用顺序存储和拉链式存储。
1.顺序存储结构是把数据元素依次放在一组地址连续的存储单元里,数据元素的物理存储次序和它们的逻辑次序相同,即逻辑上相邻的结点存储在物理位置上相邻的存储单元中。通常,使用程序设计语言中的数组来实现顺序存储结构。
2.链式存储结构
链式存储结构是把数据元素存放在任意的存储单元里,这组存储单元可以是连续的,也可以是不连续的,了逻辑上相邻的数据元素在物理位置上不一定相邻。通常,需要采用指针变量来记载前驱和后继元素的存储地址。
3.索引存储结构
除数据元素需要采用顺序存储或链式存储结构外,还要加你了附加的索引表来标识数据元素的地址。它不是独立的存储结构,只是为了在查找运算时,能够减少查找的时间,提高数据查找的性能。索引表中的每一项称为索引项,索引项由元素的关键字和它的存储地址组成,关键字是能够唯一标识一个数据元素的数据项
4. 散列(哈希)存储结构
散列存储结构根据结点的关键字直接计算出该结点的存储地址。它是一种能快速实现访问的存储方式,理想情况下,无须比较即可根据指定值直接定位记录的存储位置。
1.2 算法
学习“数据结构”就必须认识“算法”。为什么呢?瑞士计算机科学家尼古拉斯- 沃斯 曾经提出:
程序=算法+数据结构
1.2.1 算法及其特性
1.算法的概念
算法(Algorithm)是描述解决特定问题的思路、方法和步骤,是求解步骤(指令)的有限序列。
2. 算法的重要特性
1. 输入:一个算法应该有零个或多个输入。
2.有穷性:一个算法必须在执行有穷步骤之后正常结束,不能形成无穷循坏,并且每一个步骤都在可接受对的时间内完成,如果一个问题的求解算法需要10年的执行时间,尽管从数学角度看它是有穷的,可这个算法是没有任何意义的
3.确定性:算法中的每一条指令必须有确切的含义,不能产生多义性,即算法的每一个步骤被精确定义而无歧义,相同的输入只能有唯一的输出结果。