关键字定义
1、数据
数据:是描述客观事物的符号,是计算机中可以操作的对象,是能被计算机识别,并输入给计算机处理的符号集合。
2、数据元素
数据元素:是组成数据的、有一定意义的基本单位,在计算机中通常作为整体处理。也被称为记录。
3、数据项
数据项:一个数据元素可以由若干个数据项组成,数据项是不可分割的最小单位。
4、数据对象
数据对象:是性质相同的数据元素的集合,是数据的子集。
根据例子理解:假设有两张表,上表为人员表,下表为课程表, 表的格式如下:
这两张表就是数据
而单独的一张表就称为数据对象,即人员表是一个数据对象,课程表也是一个数据对象
而每张表中的每一行就称为数据元素
而姓名,性别,身高,课程代号,课程名就称为数据项
逻辑结构:数据的逻辑结构是面向用户的,因此其表现方法可以有:表格、图等我们常见的表示方法
逻辑结构四类型
- 集合:数据元素同属一个集合,单个数据元素之间没有任何关系。
- 线性结构 :一对一,类似于线性关系,线性结构中的数据元素之间有且只有一个开始元素和一个终端元素。
- 树型结构 :一对多,一个开始元素(根节点),多个终端元素。
- 图形结构 :多对多,多个开始元素和多个终端元素。
存储结构:数据结构中四种数据存储结构 --- 顺序存储 链接存储 索引存储 散列存储(hash存储)
- 顺序存储结构:顺序存储结构是把数据元素放到地址连续的存储单元里面,其数据间的逻辑关系和物理关系是一致的。之前学习的数组就是一种顺序存储结构。(如图所示)
- 链式存储结构:链式存储结构:是把数据元素存放在任意的存储单元里面,这组存储单元可以是连续的也可以是不连续的。(如图所示)
根据指针找出相邻元素的位置
- 索引存储方式:每个存储结点只含一个数据元素,所有存储结点连续存放,此外增设一个索引表以指示各存储结点的存储位置或区间端点。
- 散列存储方式:每个存储结点只含一个数据元素,各个结点均匀分布在存储区里,用散列函数指示各存储结点的存储位置或区间端点。
算法和算法分析:算法 + 数据结构 = 程序
算法特性:对特定问题求解步骤的一种描述,是指令的有限序列。一个算法具有以下5个特性:①有穷性 ②确定性 ③可行性 ④有0个或多个输入 ⑤有一个或多个输出
一个算法的优劣应该从以下四方面来评价:①正确性 ②可读性 ③健全性 ④高效性
算法分析:在算法特性要求合格的情况下依据算法效率(时间复杂度,空间复杂度)进行评判;
时间复杂度:时间复杂度是一个估算,我们使用O的渐进表示法:O是用于描述函数渐进行为的数学符号。
概念:算法的时间复杂度是一个函数:(是数学含义上的函数)数据里面带未知数的函数式。
含义:算法在机器中运行所消耗的时间。
实际意义:算法中基本操作的执行次数。
作用和理解:降低占用内存和减少运行时间,提高效率。
大O表示法 :大O符号(Big O notation):用于描述函数渐进行为的数学符号(描述时间复杂度)
推导大O阶方法:
1,用常数1取代运行次数中的所有加法常数;
如:int i = 16, j = 100;//执行一次
printf("hello world");//执行一次
printf("%d",i);//执行一次
printf("%d",j);//执行一次
上述语句一共执行4次,但时间复杂度并不是O(4),而是O(1)。
2,在修改后的运行次数函数中,只保留最高阶项;
3,如果最高阶项存在且不是1,则去除与这个项目相乘的常数。得到的结果就是大O阶;
含义:(保留最高阶的未知数,不保留常系数)。
如:执行次数为f(n) = 2*n^3+4*n^2+6*n+16,时间复杂度为T(n) = O(f(n)) = O(n^3)
常见的时间复杂度
常见的时间复杂度耗费的时间从小到大的顺序为: O(1)<O(log(m)n)<O(n)<O(n*log(m)n)<O(n^2)<O(n^3)<O(2^n)<O(n!)<O(n^n)
注意: 最好、最坏和平均时间复杂度一般求解时间复杂度时,需要考虑的是算法的最坏情况。
最好时间复杂度,指的是算法计算量可能达到的最小值。
最坏时间复杂度,指的是算法计算量可能达到的最大值。
平均时间复杂度,是指算法在所有可能情况下,按照输入实例以等概率出现时,算法计算量的加权平均值。
数据类型
数据类型:一般包括整型、实型、字符型等原子类型外,还有数组、结构体和指针等结构类型。
抽象数据类型(ADT)
抽象数据类型(Abstract Data Type,ADT):类似C语言中的结构体以及C++、java语言中的类。通俗的讲,抽象数据类型,泛指除基本数据类型以外的数据类型。抽象数据类型的概念与面向对象的思想是一致的。