前言
廊腰缦回,檐牙高啄,纵使相同一砖一瓦,不同雕琢设计,易生错乱有效的廊舎美景。数据结构的魅力也缘于此中道理。
一、走进数据结构
理解:数据结构是相互之间存在一种或多种特定关系的数据元素的集合。数据对象是具有相同性质的数据元素的集合,是集合的一个字集。
数据结构,它是一门综合性较强的专业基础课,它的目的是学会引导学生懂得分析数据的特性,从我们现实世界中的这些关系抽象出来的到数据的这些特性,整个数据结构以三个项目进行贯穿。
二、基本概念
首先需要我们了解数据中的一些基本概念
1.了解什么是数据
要判断一个事物是不是数据,它必须满足以下两个条件:
1.能被输入到计算机中。
2.能被计算机处理。
2.数据元素中的常用概念
1.数据类型:
数据类型就是数据集合的划分,不同数据类型对CPU的意义是不一样的
2.抽象数据类型:
他是一个实现包括储存数据元素的存储结构以及实现基本操作的算法。
三、 三要素
1.逻辑结构
数据的逻辑结构是指数据元素之间的逻辑关系,是呈现在用户面前的、能感知到的数据元素的组织形式。
接下来就由我来带大家简单的分析一下
——分类:
- 集合
集合是由这样一组数据元素组成,我们称集合中数据元素的关系是“松散”的。
- 线型结构
线性结构中数据元素之间存在“一对一”的关系,也就是指在结构非空的时候,线性结构有且仅有一个开始节点和一个终端节点。
注意:开始节点没有前驱但有一个后继,终端节点没有后继但有一个前驱。其余节点有且只有一个前驱和一个后继。
- 树形结构
对于他的简单理解就是数据元素之间的一对多
- 图形结构
其他的都是说完了那么他就是多对多
2.物理结构
物理存储简单理解就是在计算机上进行存储
——下来介绍一下他的分类:
- 顺序存储
最简单,最直观的就是在计算机中开辟一片连续的空间,用来存放一些数据
最常用到的就是数组了
- 链式存储
相对于上面的顺序存储看上去十分完美,但是他的分配方式是静态的,一旦指定好就不能在改变,否则就需要重新开辟空间,就会造成资源的浪费。
那么这个时候链式存贮就出现了,他是将数据与地址一起存储起来存放在一块。
- 索引存储
而索引存储他会建立存储结点信息的表,但是索引表也会浪费一定空间
- 散列存储
最后就是散列存储,他就是令程序员头秃的Hash存储,他相比较于索引存储的好处在于,他是通过关键信息进行存储。
3.数据运算
建立(Greate)
消除(Destroy)
插入(Insert)
访问(Access)
修改(Modify)
查找(Search)
排序(Sequence)
四.算法
算法在这里我就简单介绍一下时间复杂度和空间复杂度,想要详细了解的朋友就到我的数据结构分栏中看吧!
算法是什么?
算法简单理解就是用来操作数据和解决程序问题的一种工具
一个问题可以有多种方法,但对于同一个问题不同的解法,就需要一种工具来判断优劣程度,于是就产生了复杂度分析,从两个维度去分析出一个解决方法的最优解。
算法的五大特性
- 有穷性
- 确定性
- 可行性
- 可以没有输入,或多个输入
- 至少有一个输出,或多个输出
一个算法的特质是需要能真确解决问题(正确性),对算法的描述让其他人也可以看懂(可读性),能自动识别处理一些异常(健壮性),高效率与低存储量。
接下来就简单的介绍复杂度
常见的复杂度量级
-
常数阶O(1)
-
对数阶O(logN)
-
线性阶O(n)
-
线性对数阶O(nlogN)
-
平方阶O(n2)。
-
立方阶O(n3)
-
K次方阶O(nk)
-
指数阶(2n)
时间复杂度
时间复杂度用大白话来讲就是一个程序执行的时间长短。
空间复杂的
了解时间复杂度后,那么对空间复杂度也是相同的道理,就是一个程序执行一段代码它会占用空间的大小。
计算
这里我们只演示一般常见的时间复杂度和空间复杂度,供大家理解。
常量阶O(1)
int i = 0;
i++;
如上,就是常量级的复杂度计算
如案例所示,在创建时只占用了一个单元格,i的空间不会随着时间的变化而变化。而在创建时也只执行了一次,所以它的时间复杂度也为常量。
线型级O(n)
int a[];
int i = 0;
while(i == a.lenth){
System.out.println(i);
i++;
}
如上,就是线型级的复杂度计算
如案例所示,在创建数组时需要指定指定的空间来存放,运行时也是根据数组的长度来判断,所以他的时间复杂度与空间复杂度都为线型级。
总结
后续还会更新数据结构如果大家想看就请关注我