第一章 绪论
(零)基本内容:
数据结构相关的概念和术语(-1)
数据结构三要素:逻辑结构,存储结构,数据运算(0)
算法时间复杂度和空间复杂度的分析计算(1)
(一)数据结构的基本概念
1.数据结构的基本术语
(1)数据,是信息的载体,是描述客观事物属性的数,字符以及所有能输入到计算机中并被计算机程序识别和处理的符号的集合。数据是计算机程序加工的原料。
(2)数据元素,是数据的基本单元。一个数据元素又由若干个数据项组成,数据项是组成数据元素的不可分割的最小单位。
例如,学生就是数据元素,而学号,性别,年龄等就是数据项。
(3)数据对象,是指具有相同性质的数据元素的集合,是数据的一个子集。
例如整数的数据对象就是:0,-1,1,2,-2等等
(4)数据类型,是一个值得集合和定义在此集合上的一组操作的总称。
原子数据:值不可再分的数据类型。
结构数据:值可在分解为若干个数据类型。
抽象数据类型:抽象数据组织及与之相关的操作(三元组表示,构成一个完整的数据结构)
(5)数据结构,是相互之间存在一种或多种特定关系的数据元素的集合。元素之间的关系称为结构。
主要包括:逻辑结构,存储结构,数据运算。
2.数据结构的三要素
(1)数据的逻辑结构:数据元素之间的逻辑关系,与存储无关,独立于计算机。数据的逻辑结构主要分为线性结构(线性表)和非线性结构(图,树,集合)。
集合:数据元素同属一个集合。
线性结构:数据元素一对一的关系。
树型结构:数据元素一对多的关系。
图状结构:数据结构多对多的关系。
(2)数据的存储结构,指数据结构在计算机中的表示,也称物理结构。包括数据元素的表示和关系的表示。存储结构是用计算机语言实现的逻辑结构。数据的存储结构分为:顺序存储,链式存储,索引存储和散列存储。
顺序存储;把逻辑上相邻的元素存储在物理位置上也相邻的存储单元中。优点:随机存取和顺序存取都行。缺点:只能使用相邻的一块存储单元,会产生外部碎片。
链式存储:逻辑上相邻但是但物理上不一定相邻,借助指针来表示存储元素之间的关系。优点:会利用所有存储单元。缺点:占用额外的存储空间,只能顺序存取。
索引存储
散列存储
(3)数据的运算:对运算的定义和实现。运算的定义是对逻辑结构,运算的实现是对存储结构。
(二)算法和算法的评价
---------------------------------------------------------(一月十六日晚)
1.算法的定义:算法是对问题求解步骤的描述。
(1)有穷性:在执行有穷步之后结束。
(2)确定性:每条指令必须有确切的含义,对于相同的输入只能得到相同的输出。
(3)可行性:操作可实现。
(4)输入
(5)输出
好的算法还有:正确性,可读性,健壮性,效率和低储存量的需求。
2.算法的效率:时间复杂度和空间复杂度
重点:关于时间复杂度的计算(务必全面)
----------------------------0:23,虽然没写完,太困了,孩子以后白天再也不摸鱼了,明天继续
----------------------------------------------一月十八日晚:拖(本人废物)
------------------------------------------------------------一月十九日夜(咕)
(1)时间复杂度:指该语句在算法中被重复执行的次数。T(n)
算法的时间复杂度遵循着加法原则和乘法原则。
加法原则:取其最大时间复杂度原则。
乘法原则:时间复杂度的乘积。
(2)时间复杂度的计算:(常见简单的不列举了)
第一种:O(log(n))
for(int i = 1; i<n; i = i*2) {
cout<<i;
}
计算过程:
第二种:O(n^2)
int a=0;
for(int i = 0; i<=n; i++) {
for(int j = 0; j<=n; j++) {
a++;
}
第三种:O(n^3)
第四种:O(n!)
举个较为复杂的例题
(2)常见的排序算法的时间复杂度
(4)总结:
算法的时间复杂度体型主要分为两种
第一种:循环主体中的变量参与循环条件的判断
此类题应该找出主体语句中与T(n)成正比的循环变量,带入计算。例如:
第二种:循环主体中的变量与循环条件无关
采用数学归纳法或直接累计循环次数,只需要知道主体语句的循环次数就行。
递归程序使用公式进行递推就行。
非递归则采用累计次数就行。
--------------------------------------------------------------一月二十日(晚)
第二章线性表
二月六日晚完结,以后有时间码字吧