数据结构(C语言版)第一章绪论

目录

1.1 基本概念

1.2 数据结构 

1.2.1 逻辑结构

1.2.2 存储结构 

1.2.3 存储结构的相关考研真题:

1.3 数据类型和抽象数据类型 

1.4 算法和算法分析

1.4.1 算法的定义及特性

1.4.2  算法的优劣评价标准

1.4.3 算法的时间复杂度

1.4.4 时间复杂度的相关考研真题:

1.4.5 算法的空间间复杂度 


1.1 基本概念

数据:所有能输入计算机中并被计算机程序处理的符号的总称。(能够被计算机识别的符号的总称)


数据元素:数据的基本单位


数据项:组成数据元素的最小单位


数据对象:性质相同的数据元素的集合,是数据的子集。

1.2 数据结构 

数据结构是相互之间存在一种或多种特定关系的数据元素的集合。


通常被定义为(D,R),其中D是数据的有限集合,R是D上的所有数据元素之间关系的有限集合。

1.2.1 逻辑结构

数据的逻辑结构是指:数据的组织形式,即数据元素之间逻辑关系的总体。

逻辑关系是指:数据元素之间的关联方式(邻接关系)。

逻辑结构分为线性结构和非线性结构两大类。 

其中非线性结构又包含树形结构,图形结构和集合结构。


线性结构(1:1):线性表,栈,队列,字符串,数组,广义表。

树形结构(1:n):树,二叉树。

图形结构(n:m):有向图,无向图。

集合结构(节点之间无任何逻辑关系)。

1.2.2 存储结构 

数据的存储结构是指:数据对象在计算机中的存储表示称为数据的存储结构,也称为物理结构。

存储结构分为顺序存储结构和链式存储结构


顺序存储结构的特点:

①逻辑顺序与存储顺序一致

②存储空间连续

③对元素的访问是随机的


链式存储结构的特点:

①逻辑顺序与存储顺序不一致

②存储空间不连续

③对元素的访问是顺序的


两种存储结构的优缺点:

顺序存储结构:

优点:存储密度大(=1),存储空间利用率高。

缺点:插入或删除元素时不方便。

链式存储结构:

优点:插入或删除元素时很方便。

缺点:存储密度小(<1),存储空间利用率低。


扩展:存储密度是指在计算机中,一个节点数据本身所占的存储量与整个节点结构所占的存储量之间的关系比例。

存储密度 = 节点数据本身所占的存储量 / 节点结构所占的存储总量


链式存储结构的存储密度小是因为链式存储的节点空间一部分要用来存放指针变量。

1.2.3 存储结构的相关考研真题:

1.设某数据结构的二元组形式表示为A=(D,R),D={01,02,03,04,05,,06,07,08,09},R={r},r={<01,02>,<01,03>,<01,04>,<02,05>,<02,06>,<03,07>,<03,08>,<03,09>},则数据结构A是( )。[常州大学2022年]
A.线性结构      B.树形结构      C.物理结构      D.图形结构

解析:
15.【答案】B。
【考点】数据结构-数据结构的概念及分类
【解析】根据题意可画出数据结构A如下图所示。

上图中,数据元素之间存在一对多的关系,因此,数据结构A是树形结构。

1.3 数据类型和抽象数据类型 

数据类型是高级程序设计语言的一个基本概念(一个值的集合和定义在这个值集上的一组操作的总称),例如:整数类型,浮点类型,字符类型,布尔类型。当然还有顺序存储结构中借助数组类型来描述,链式存储结构中借助指针类型来描述,因此数据类型和数据结构的概念密切相关。

抽像数据类型是指由用户定义的,表示应用问题的数学模型,以及定义在这个模型上 的一组操作的总称。

抽像数据类型包括数据对象,数据对象上关系的集合以及数据对象的基本操作的集合。

1.4 算法和算法分析

1.4.1 算法的定义及特性

算法是解决某一问题的有限运算序列。(一个有穷指令的集合)


 一个算法必须满足5个重要特性:

①有穷性

②确定性

③可行性

④输入(一个算法可以有0个或多个输入)

⑤输出(一个算法可以有一个或多个输出)

1.4.2  算法的优劣评价标准

一个算法的优劣可以从4个方面评价:

①正确性

②可读性

③健壮性

④高效性

1.4.3 算法的时间复杂度

 T(n)=O(f(n))

算法的计算量大小称为算法的时间复杂度。


若一个算法的时间复杂度为T(n),则n的含义为问题规模


算法的时间复杂度取决于问题的规模待处理数据的初态

常见的时间复杂度按数量级递增排序为:常量阶O(1),对数阶O(log2^{n}),线性阶O(n),线性对数阶O(nlog2^{n}),平方阶O(n^{2}),立方阶O(n^{3}),......,k次方阶O(n^{k}),指数阶O(2^{n})等。

1.4.4 时间复杂度的相关考研真题:

1.下列程序段的时间复杂度为( ) 

int sum=0;
for(int i=1;i<n;i*=2)
    for(int j=0;j<i;j++)
        sum++;

A.O(log2^{n})      B.O(n)      C.O(nlog2^{n})      D.O(n^{2})

解析:

1.【答案】B。
【考点】算法------算法分析与度量
【解析】本题的解题关键在于求循环执行次数与问题规模的关系。
(1)设k表示外层循环的执行次数,外层循环可表示为for(inti=1;i<n;i=2*)的取值为1,2,3,4,···,log2^{n},因此外层循环执行log2^{n}次。
(2)内层循环的执行次数与语句sum++;无关,只需要考虑for(int j=0;j<i;j++)即可。
当k=1时,i=1,内层循环条件为(j=0;j<1;j++),循环执行1次。
当k=2时,i=2,内层循环条件为(j=0;j<2;j++),循环执行2次。
当k=3时,i=4,内层循环条件为(j=0;j<4;j++),循环执行4次。
当k=4时,i=8,内层循环条件为(j=0;j<8;j++),循环执行8次。
k=log2n时,i=n,内层循环条件为(j=0;j<n;j++),循环执行n次。
利用等比数列求和,1+2+4+8+··+n=2^{0}+2^{1}+2^{2}+2^{3}+...+2^{log2^{n}}=\frac{2a_n{-a_1{}}}{2-1}=\frac{2*2^{2log2^{n}}-1}{1}=2n-1,因此,时间复杂度为O(2n-1)=O(n)。

2.下列程序段的时间复杂度为( ) 

int count=0;
for(int i=1;i<=n;i*=2)
   for(int j=1;j<=n;j++)
       count++;

A.O(log2^{n})      B.O(n)      C.O(nlog2^{n})      D.O(n^{2})

解析:

2.【答案】C。
【考点】算法------算法分析与度量
【解析】这是一个双重for循环嵌套的程序段。在内层循环中,每次循环j都自增1,每次内层循环执行n次,时间复杂度是O(n);在外层循环中,每次循环的增量定义为k*=2,时间复杂为O(log2^{n}))。因此该程序段的时间复杂度是O(n)*O(log2^{n}),即O(nlog2^{n})。

1.4.5 算法的空间间复杂度 

 S(n)=O(f(n))

算法所需存储空间的量度称为算法的空间复杂度。

一个算法的时间复杂度与空间复杂度无直接关系。 

马上就要期末了,简单整理了一下,就当电子笔记了,欢迎大家斧正错误不足之处,感谢感谢!!!最后祝大家学习生活快乐,还有期末考试必过!!!

  • 27
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

乱码怪才

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值