一:数据结构的基本概念
数据结构----研究数据的特性及数据之间存在的关系
算法+数据结构=程序。其中数据结构是指数据逻辑结构和物理结构,算法是对数据运算的描述。
用计算机解决一个具体问题时,首先从具体问题中抽象出一个适当的数学模型,然后设计一个能解此数学模型的算法,最后编出程序,进行测试,并调整程序直至得到最终答案。
在数据结构中数据之间的关系主要有两种,它们分别是线性关系和非线性关系,其中非线性关系又可以分为树形关系和图关系。
数据的逻辑结构和存储结构是密不可分的两个方面,在实现算法时,首先应解决数据的存储问题。数据之间要考虑存储,又要考虑数据单位之间的关系,在确定了存储结构后,根据存储的结构再来确定相应操作的实现方法。
数据元素也叫结点,它是组成数据的基本单位。一般情况下,一个结点含有若干个字段(数据项),字段是构成数据的最小单位(bit)。
数据对象也称为数据元素类,是指具有相同性质的数据元素的集合。
数据结构 Data-Structure=(D,R)
D是数据元素的有限集合,R是D上的关系。
根据数据元素间关系的不同特性,通常有四类基本结构
- 集合结构
- 线性结构
- 树形结构
- 图形结构(网状结构)
逻辑结构:结点和结点之间的逻辑关系称为数据的逻辑结构。
存储结构:数据及数据之间的关系在计算机中的存储表示称为数据的存储结构(物理结构)。
数据的存储结构可用4种基本存储方法得到: - 顺序存储方法
- 链接存储方法
- 索引存储方法
- 散列存储方法
数据处理是指对数据进行查找、插入、删除、合并、排序、统计及简单计算等操作的过程。
数据类型是指一个值的集合以及在这些值上定义的一组操作的总称。
抽象数据类型(Abstract Date Type 简称ADT)是指抽象数据组织和与之相关的操作。每一个操作由它的输入和输出定义。
抽象数据类型可以定义为:
ADT=(D,S,P)
其中D表示数据对象,S是D上的关系集,P是对D的基本操作集。
格式:
ADT 抽象数据类型名{
数据对象:<数据对象的定义>
数据关系:<数据关系的定义>
基本操作:<基本操作的定义>
}
数据对象和数据关系的定义用伪码来描述,基本操作的定义格式为:
基本操作名(参数名)
初始条件:<初始条件描述>
基本操作:<操作结果描述>
二:算法和算法分析简介
算法是执行特定计算的有穷过程,一个完整的算法应该满足以下五条性质:
(1)正确性 算法必须完成所期望的功能,得到的结果必须是正确的。
(2)确定性 组成算法的指令必须是清晰的、无二义性。也就是说算法的每一个步骤都必须准确定义。准确定义是指所描述的行为必须是对人或机器而言是可读的、可执行的。每一步必须在有限的时间内执行完毕,同时必须是我们所力所能及的,能够依赖于具体的工具来执行的工序。
(3)有穷性 算法必须在有限的步骤内结束。如果一个算法由无限的步骤组成,该算法不可能有计算机程序实现。
(4)有效性 算法的指令必须具有可执行性。
(5)可终止性 算法必须可以终止,即不能进入死循环。
一个算法可以没有输入,但是至少应该有一个输出。
算法用语言结构来介绍就分为: - 常量和变量
- 基本数据类型(逻辑类型 字符类型 整数类型 浮点类型)
- 常用运算符(算术运算符 位运算符 关系运算符 逻辑运算符)
- 条件选择语句 (if if-else switch)
- 循环语句 (for while do-while)
- 输入、输出语句 (输入:System.in.read() 输出:System.out.println() )
- 其他一些语句 (break continue)
- 注释形式 (各语言不一样 如python #为单行注释 三引号为多行注释)
一个好的算法应该考虑以下方面:
1.正确性 (在合理的数据输入下,能在有限的运行时间内得出正确的结果。)
2.运行时间 (算法中包含简单操作的次数叫做算法的时间复杂性,它是算法运行时间的一个相对量度)
3.占用的存储空间 (算法在运行过程中所占用的存储空间)
4.简单性 (算法的简单性可以使正确性的证明比较容易,并且便于编写、修改、阅读和调试)
一般度量一个程序的执行时间有两种方法:事后统计方法和事前分析估算的方法(通常使用后者)。