大话数据结构---(一)绪论

1.基本概念和术语

数据: 是描述客观事物的符号,是计算机中可以操作的对象。换句话说,你可以把数据比作一亩菜地,你可以对这亩菜地进行不同的操作,浇水,收割等等。对于计算机而言,数据可以是声音、图像、字符集合等。
数据对象:是性质相同的数据元素的集合,是数据的子集。它可能是一亩菜地的某个角落,一个不到十平米的位置,里面种着白菜,既然是性质相同,那么是绝对不允许这小块地长出西红柿的。
数据元素:是组成数据的、有一定意义的基本单位。可以是菜地里的一棵白菜,一株西红柿。
数据项:一个数据元素可以由若干个数据项组成,是数据不可分割的最小单位。如果把一棵白菜当成数据元素,那么数据项可以是它的根、茎、叶。如果把一株西红柿当成数据元素,那么数据项可以是它的根、茎、叶、花、果实、种子。(你可能会说,白菜也有花,但这不是重点。。。)
数据结构:是相互之间存在一种或多种特定关系的数据元素的集合。虽然白菜和西红柿是不同的数据对象,但是通过某种组合,白菜和西红柿可能有着共同的命运。(大家都懂) 同样是结构,从不同的角度来讨论,会有不同的分类。

  • 逻辑结构:集合结构、线性结构、树形结构、图形结构等。
  • 物理结构:顺序存储结构、链接存储结构。
    几个基本概念的关系如下:
    大话数据结构---(一)绪论_第1张图片

2.算法

定义:解决特定问题求解步骤的描述,说白了,就是用代码解决实际问题。
特性:有穷性、确定性、可行性、输入、输出。
设计要求:正确性、可读性、健壮性、高效率和低存储量需求。
时间复杂度:T(n)=O(f(n))
推导大O阶的步骤:
- 用常数1取代运行时间中的所有加法常数(见常为1)。
- 在修改后的运行次数函数中,只保留最高阶项(去低保高)。
- 如果最高阶项存在且不是1,则去除与这个项相乘的常数(见常为1)。
注:见常为1,见变保高。
常见的时间复杂度大小排序为:
O(1)2)3)n)n)
空间复杂度: S(n)=O(f(n)),首先明确一个概念,变量的内存分配发生在定义的时候。 学了很多次空间复杂度,到现在才弄懂 和介绍时间复杂度不同,接下来会通过几个实例来说明空间复杂度,以及它的求法。
例1:

a=0;
b=0;
cout<<a<<","<<b<<endl;
//它的空间复杂度O(n)=O(1)

例2:递归算法的空间复杂度=递归深度N*每次递归所需要的辅助空间

def fun(n);
int k=10;
if(n==k)
return n;
else
return fun(++n);
//递归实现,调用fun函数,每次都创建一个变量k。调用n次,空间复杂度为O(n*1)=O(n)

例3:

for(i=0;i<n;i++){
int temp=i;
}
//变量的内存分配发生在定义的时候,因为temp的定义是循环里边,所以是n*O(1)

例4:

int temp=0;
for(i=0;i<n;i++){
 temp=i;
}
//temp定义在循环外边,所以是1*O(1)

空间复杂度说明,参考链接

你可能感兴趣的:(数据结构,数据结构)