理论概念:
系统架构:
数据结构主要包括:逻辑结构、存储结构、数据运算;
逻辑结构:线性、非线性;
线性:线性表、栈、队列、串、数组;
非线性:树、图、网;
存储结构:顺序、链表、索引、散列;
数据运算:增、删、改、查、排序;
两类算法:查找算法、排序算法;
查找算法:顺序、折半、哈希、二叉排序树;
排序算法:直接插入、堆排序、二路归并排序、快排;
数据:指一切能够输入到计算机中处理的字符;
数据元素:也可以叫一条记录、一个节点,是数据结构中最基本的单位,由多个数据项组成;
数据项:是数据结构不可分割的最小单位;
数据对象:是由性质相同或者类型相同的一组数据元素的集合,是数据的一个子集;
数据结构:指相互之间存在一种或多种特定关系的数据元素的集合;用二元组来表示:
Data_Structure = (D,R)
数据类型:一个值的集合和在这个值集上定义的一组操作的总称
抽象数据类型:一个数学模型和定一在该数学模型上的一组操作的总称;
4中基本结构:
集合:散列的。除了同属于一个集合之外没有其他关系;
线性结构:数据元素之间是一对一的关系;
树形结构:数据元素之间是一对多的关系;
图形结构:数据元素之间是多对多的关系;
算法:是对特定问题求解步骤的一种描述,是指令的有限序列,
5个特性:
输入:0个或多个输入;
输出:一个活多个输出;
正确性:每条指令是正确无歧义的,不会产生二义性;
可行性:算法中的描述可以通过有限次运算执行;
有穷性:在执行有限步骤之后结束完成。
目标:
正确性:程序不含语法错误;对几组输入数据可以得到合乎要求的适当结果;对特殊输入数据可以得到合乎要求的适当结果;对于一切输入数据可以得到合乎要求的适当结果;
可读性:便于读者的阅读和交流,便于对算法的理解;
健壮性:对于非法输入数据,可以输出适当的结果,不胡出现莫名其妙的结果;
高效率和低存储:
时间复杂度:
时间复杂度和问题的规模有关;
找到最内层语句的执行次数即可;
快接计算:
分裂原则:O(longn)
双循环分裂原则:nO(longn)
时间复杂度分析例题:
for (i = 0; i < n; i++) {
for (j = 0; j < n - i; j++) {
if (a[j] > a[j + 1]) {
temp = a[j];
a[j] = a[j + 1];
a[j + 1] = temp;
}
}
}
for (i = 0; i < n; i++) {
printf(a[i]);
}
}
其时间复杂度是O(n*n)
优化:
int i = n-1;
do {
change =false;
for(j = 0;j < i;j++) {
if(a[j] > a[j+1]) {
change = true;
a[j] <-> a[j+1];
}
}
}while(change = false && i-- >= 1)
练习题:
1、数据结构在计算机内存中的表示是指:————————;
2、数据的运算————————
A、有算术运算和关系运算两大类
B、是根据存储结构来定义效率
C、与采用的存储结构有关
D、必须用编程语言来描述
3、原地工作的含义是:————————;
4、判断:在相同的问题规模下,时间复杂度为O(nlongn)的算法总优于时间复杂度为O(n*n)的算法;
5、判断:任何数据结构都具备三种基本运算:插入、删除、查找;
6、判断:逻辑结构不同的数据的必须要采用不同的存储结构;