数据结构------初识数据结构
数据结构的概念
相互之间存在一种或多种特定关系的数据元素的集合。数据结构是计算机科学中的一个基本概念,它是指数据元素之间的关系和组织方式。数据结构是计算机存储、组织数据的方式,它使得数据可以高效地被访问和修改。数据结构不仅影响程序的性能,还影响算法的效率。
数据结构的逻辑结构总共分为四种它们分别为:
集合,集合是一种基本的数据结构,用于存储一组不重复的元素。集合的概念在数学和计算机科学中都非常重要,它们提供了一种组织和处理数据的有效方式。在集合中所有数据在同一个集合中,关系平等。
线性,在数据结构中,线性结构是指数据元素之间存在一对一的线性关系的数据结构。这种结构中,数据元素之间是有序的,每个数据元素(除了第一个和最后一个)都有一个前驱和一个后继。线性结构的特点是数据元素之间有顺序关系,可以形象地看作是一条线。数据和数据之间是一对一的关系;
树,在数据结构中,树是一种非常重要的非线性结构,它由节点组成,每个节点可以有零个或多个子节点,但只能有一个父节点。树结构通常用于表示具有层次关系的数据集合。
图,在数据结构中,图是一种用于表示节点(也称为顶点或点)之间关系的非线性结构。图可以用来表示复杂的关系,如网络、路径、连接等。图由两个基本元素组成:顶点和边。
在数据结构中物理结构(在内存当中的存储关系)也有两种:
顺序存储,数据存放在连续的存储单位中。逻辑关系和物理关系一致。
链式,数据存放的存储单位是随机或任意的,可以连续也可以不连续。
数据的类型
数据类型是指一组性质相同的值的集合及定义在此集合上的一些操作的总称。
数据又可以分为原子类型和结构类型:
原子类型,int,char,float;
结构类型,sturct, union;
其实抽象数据类型等于数学模型 + 操作。
数据结构和算法是息息相关的,程序=数据+算法,那么算法是什么呢?算法,
是解决特定问题求解步骤的描述,计算机中表现为指令的有限序列,每条指令表示一个或多个操作。
算法的特征:
1,输入,输出特性,输入时可选的,输出时必须的。
2,有穷性,执行的步骤会自动结束,不能是死循环,并且每一步是在可以接受的时间内完成。
3,确定性,同一个输入,会得到唯一的输出。
4,可行性,每一个步骤都是可以实现的。
算法的设计:
1,正确性,
语法正确
合法的输入能得到合理的结果。
对非法的输入,给出满足要求的规格说明,虽然说不能做到对所有的错误或者异常都能都做出相应的报错提示但是一个算法不能够有明显的错误;
对精心选择,甚至刁难的测试都能正常运行,结果正确;
2,可读性,便于交流,阅读,理解;
3,健壮性,输入非法数据,能进行相应的处理,而不是产生异常;
4,高效,存储低,效率高 。
时间复杂度
衡量一个算法的好坏的一个关键指标是时间复杂度,什么是时间复杂度呢?
简单来说,算法时间复杂度也就是执行这个算法所花时间的度量,算法的时间复杂度是衡量算法执行时间与输入数据量之间的关系的一个指标。它描述了算法在最坏情况下(有时也考虑平均情况或最佳情况)执行步骤的数量随输入规模增长的变化趋势。时间复杂度通常用大O表示法来表示。
大O表示法
大O表示法描述了算法性能的上界,即随着输入规模的增长,算法执行时间的增长率。常见的时间复杂度表示包括:
O(1):常数时间复杂度,表示算法执行时间不随输入规模变化。
O(log n):对数时间复杂度,表示算法执行时间随输入规模的对数增长。
O(n):线性时间复杂度,表示算法执行时间随输入规模线性增长。
O(n log n):线性对数时间复杂度,常见于高效的排序算法,如快速排序和归并排序。
O(n^2):二次时间复杂度,常见于简单排序算法,如冒泡排序和插入排序。
O(n^k):多项式时间复杂度,其中k是常数,表示算法执行时间随输入规模的k次幂增长。
O(2^n):指数时间复杂度,表示算法执行时间随输入规模的指数增长,这类算法在大规模数据上效率极低。
O(n!):阶乘时间复杂度,表示算法执行时间随输入规模的阶乘增长,这类算法效率非常低。
推算时间复杂度的方法:
1,用常数1 取代运行时间中的所有加法常数。按照我的理解由于CPU的计算速度非常快只要是能说出具体数字的算法的时间复杂度都算做O(1);
2,在修改后的运行函数中,只保留最高阶项。
3,如果最高阶存在且不是1,则取除这个项相乘的常数。
比如说算法的实际时间复杂度为2n^2+3n+1但是在进行具体的表示时只保留最高阶项也就是2n^2,根据第三条规则最高阶项的系数不是1时直接看成1只保留n^2项最后算出的时间复杂度就是n^2。
今天并只是初步地认识一下数据结构往后会更新具体的数据结构比如说顺序表,链表,树之类的,会不定期更新的。