【无标题】

数据结构

算法的基本概念

程序=数据结构+算法
数据结构:用于将现实世界的问题信息化
算法:处理信息,解决问题
算法性质:有穷性;确定性;可行性,输入;输出。
有穷性:算法是有穷的,而程序可以无穷。
确定性:每条指令必须有确切含义,对于相同输入只能得到相同出。
可行性:算法描述的操作必须能通过已经实现的基本运算执行有限次来实现。
输入:一个算法有零个或多个输入。
输出:一个算法有一个或多个输出。
好的算法应具备的性质:正确性;健壮性;可读性;高效率以及低存储需求(时间复杂度和空间复杂度低) 。

算法的效率度量

**1.时间复杂度:**事前预估算法时间开销T与问题规模n的关系。
一般情况,为了简化时间复杂度的表达式,可以只保留高阶部分,、即可(类似于高数求极限的掐大头法)。
例如:T(n)=n³+n²+1,可以简化为T(n)=n³,即T(n)=O(n³)。
常用的高阶比较:
O(1)<O(log2n)<O(n)<O(nlog2n)<O(n²)<O(n³)<O(2^n)O(n!)<O(n的n次方)
结论:顺序执行的代码只会影响常数项,可忽略;只需要挑选循环中的一个基本操作分析他的执行次数与n的关系即可;如果有多层嵌套循环,只需要关注最深层的嵌套循环执行的次数。
三种时间复杂度

  1. 最好时间复杂度:考虑输入数据最优情况;(性能评估时,一般不以最好时间复杂度为参考标准,而以下面的两个为标准。)
  2. 最坏时间复杂度:考虑输入数据最差情况;
  3. 平均时间复杂度:考虑输入数据都等概率出现的情况;

注:有时候算法的效率只有在n足够大时才会暴露出来。
2.空间复杂度:S(n)
算法原地工作——算法所需的内存空间为常量,即S(n)=O(1)
注:发生函数调用时,空间复杂度等于递归调用的深度。

线性表#

定义:具有相同数据类型的n个数据元素的有限序列(次序),n为表长,n为0则为空表。
L=(a1,a2…an)
ai:线性表中第i个元素线性表中的位序
除第一个元素,每个元素都有一个直接前驱,除最后一个元素,每一个元素都有一个直接后继。

基本操作##

1.InitList(&L)
/操作结果:构造一个空的线性表/

2.DestroyList(&L)
/初始条件:线性表L已存在/
/操作结果:销毁线性表L/

3.ClearList(&L)
/初始条件:线性表L已存在/
/操作结果:将L重置为空表/

4.ListEmpty(L)
/初始条件:线性表L已存在/
/操作结果:若L为空表,则返回TRUE,否则返回FALSE/

5.ListLength(L)
/初始条件:线性表L已存在/
/操作结果:返回L中数据元素个数/

6.GetElem(L,i)
/初始条件:线性表L已存在,1≤i≤LIST_SIZE/
/操作结果:获取表L中第i个位置元素的值/

7.LocatElem(L,e)
/初始条件:线性表L已存在/
/操作结果:返回具有指定关键字的元素。若这样的数据元素不存在,则返回0/

8.PriorElem(L,cur_e,&pre_e)
/初始条件:线性表L已存在/
/操作结果:若cur_e是L的数据元素,且不是第一个,则用pre_e返回它的前驱,否则操作失败,pre_e无定义/

9.NextElem(L,cur_e,&next_e)
/初始条件:线性表L已存在/
/操作结果:若cur_e是L的数据元素,且不是最后一个,则用next_e返回它的后续,否则操作失败,next_e无定义/

10.ListInsert(&L,i,e)
/初始条件:线性表L已存在/
/操作结果:在L中第i个位置之前插入新的数据元素e,L的长度加1/

11.ListDelete(&L,i,&e)
/初始条件:线性表L已存在/
/操作结果:删除L的第i个数据元素,并用e返回其值,L的长度减1/

12.PrintList(L)
/初始条件:线性表L已存在/
/操作结果:输出操作。按照前后顺序输出线性表L的所有值/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值