目录
一、数据
数据(data)是对客观事物进行的符号。计算机数据是指计算机中能被识别和处理的物理符号,如数字符号、图形、图像、声音等。
数据元素(data element)是计算机科学术语。它是数据的基本单位,数据元素也叫做结点或记录。在计算机程序中通常作为一个整体进行考虑和处理
一个数据元素由若干个数据项组成,数据项是数据不可分割的最小单位。
数据对象(data object)是性质相同数据元素的集合,数据的一个子集
二、结构
结构是数据元素相互之间的关系
在计算机科学中,根据数据元素之间关系的不同特性,通常分为4类基本结构。
1)集合
集合是指结构中的数据元素之间除了“同属一个集合”的关系外,别无其他关系。
2)线性结构
线性结构是指结构中的数据元素之间存在一个对一个的关系。
3)树形结构
4)图状结构或网状结构
图状结构或网状结构是指结构中的数据元素之间存在多个对多个关系
三、数据结构
研究数据的存储方式。数据的存储只有一个目的,为了方便后期对数据的再利用,比如使用结构体数组存储数据时,就是为了方便我们对数据进行应用。
程序 = 数据结构 + 算法
四、线性结构
线性表中的数据元素可以是各式各样,但是在同一个线性表中数据元素必定具有相同特性,即属于同一个数据对像,相邻的两个元素间存在有序偶关系,若将线性表的数据元素记为(a1 a2 a3...an)
则线性具有:
- 存在唯一的一个被称为“第一个”的数据元素
- 除了最后一个数据元素以外,集合中的每一个数据元素都有一个被称为“后一个”的数据元素
- 除了第一个数据元素以外,集合中的每一个数据元素都有一个被称为“前一个”的数据元素
- 存在唯一的一个被称为“最后一个”的数据元素
- 例:时间、学号
五、线性表的物理结构实现(在计算机中怎么存储线性表)
1.顺序结构(顺序表)
线性表的顺序结构是指用一组地址连续的存储单元一次存储线性表中的数据元素
==》 数组
2.链式结构(链式表)
线性表的链式结构数据元素存储地址不一定连续
==》链表
单向链表
双向链表
循环链表
基本操作:增删改查
六、算法分析
算法分析是指算法在正确的情况下,对其优劣的分析。一个好的算法通常是指:
- 算法对应的程序所耗时间少
- 算法对应的程序消耗的存储空间小
- 算法结构性好、易读、易移植和调试
数据结构与算法的本质任务,提高程序的时间空间效率,简单的讲程序运行越快越好,所需内存空间越少越好。实际情况下无法实现只能去平衡时间和空间对性能的消耗。
1.时间复杂度
一般而言,时间复杂度并不考察一段代码运行所需的绝对时间,因为不同计算机硬件参数是不同的,考察绝对时间没有意义。时间复杂度一般指的是代码的语句执行的总次数,称为语句频度。比如:
void function(int n)
{
for(int i=0; i<n; i+++)
{
printf("本行语句出现n次\");
for(int j=0; j<n; j++)
{
printf("本行语句出现n*n次\");
}
}
}
上述代码的时间复杂度(语句频度)理论:T(n) = N^2 + N
一般我们只关心多项式的最高次幂,与上述代码的时间复杂度(语句频度)表示为:T(n) = O(n^2)
2.空间复杂度
概念: 一段程序运行时所需的内存字节量
一段程序运行的性能指标:既要快又要节省内存资源;但是通常而言这两者时相互制约,很难兼得。实际解决问题时,会根据侧重的一方而牺牲另一方。
七、给定一个int数据,要求尽快求出其二进制中的1的位数。
1.不考虑内存使用情况,只考虑速度问题,此时将每个数的二进制的1的个数存入数组
int cont[256] = {0,1,1,2,1,2,2,3.........};
int fun(int Val)
{
return cont[Val];
}
2.平衡时间与空间
int Num(int n)
{
int count = 0;
while (n)
{
n = n & (n - 1);
count++;
}
return count;
}