以下是在学习数据结构过程中,自己整理的一些对于数据结构和算法的简介,以防忘记,在这里记录一下。
一、数据结构
1.数据分类的层次
例子:(可以类比到c语言中的结构体)
数据项->数据元素->数据人类->人->人的五官
数据对象和数据结构则是建立在数据元素的基础之上的
数据对象是指一组具有相同性质的数据元素
数据结构是指一些数据元素组成的集合,并且这些数据元素存在着特定关系2. 结构
进一步数据结构又被分为了物理结构和逻辑结构
逻辑结构则是我们平常所说的对于不同数据元素之间的关系
物理结构则是数据元素根据逻辑结构在计算机中的储存方式
逻辑结构被分为了以下几种,并且在以后都有着与其对应的算法表示
集合结构(松散的集合)、线性结构(一对一)、树形结构(一对多)和图形结构(多对多)
而物理结构只有两种
顺序储存结构(元素的储存空间依次的排开)和链式储存结构(使用指针的方式,储存指针的空间是有顺序的)
3.抽象数据结构
而数据结构的抽象化则是,我们所作程序与实际问题的联系,我们就需要对实际问题中的数据进行抽象数据化(自己的理
解,可能存在一定的问题)
二、算法
附上算法的定义:算法是解决待解决问题求解步骤的描述,在计算机中表现为指令的有限序列,并且每条指令表示一个或
多个操作。
数据结构和算法紧密相关,严格注意两者之间的相互作用。
1.算法的基本特性和要求:
输入(输入参数使用scanf、gets、getchar)、输出(puts、putchar、printf)、有穷性(程序必须在运
行完有限的步骤后结束,不能出现死循环)、确定性(每一条语句都有它特定的含义)和可行性(保证算法的可执行性)。
设计算法时的要求:正确性、可读性、健壮性、高效率和低储存量。
关于正确性,我们要注意自己做的每个程序都能够做到对精心准备的测试数据都能得到正确的结果。
可读性则要求我们有助于阅读代码的人进行理解,使得代码便于人们交流。
健壮性则要求我们的代码可以对异常的数据作出处理,而不是产生不正确的结果。
我们需要在多个不同的算法中参用执行时间最短的算法,并且占用更小的储存空间。
2.算法的度量方法:
事后统计方法(即我们自己对程序运行的时间进行记录,但是可能会受到电脑本身条件的影响,误差较大)和事前估算分析法。
正是因为事后统计法存在的较大误差,所以我们通常选择使用事前估算分析法。
在使用事前估算分析法时,我们需要考虑算法的时间复杂程度和空间复杂程度。
(1).时间复杂程度
我们使用推导大O阶方法
我们需要做到以下几点:
1.用常数1代替运算中所有的加法常数。
2.在修改后的运行次数函数中,只保留最高阶项。
3.如果最高阶项存在且不是1,则去除与这个项相乘的常数。
我们通过推导大O阶得到的只是算法执行时间的增长率,实际为渐近时间复杂度。
而真正的时间复杂度则是我们通过算法的语句执行次数得到。
而我们在计算时间复杂度的时候,我们可能会遇到程序运行的不同种情况,因此推出了最坏情况的概念,即我们在运行程
序时最大的执行时间。
(2).空间复杂程度
算法的空间复杂程度是通过计算算法运行所需要的储存空间所确定的。它计算的方法仍然类似于大O阶,也可以通过其求解。
额