【数据结构】绪论


开篇:数据结构的学习之路

提示:这里可以添加本文要记录的大概内容:

在计算机科学和软件工程领域,数据结构和算法是构建高效、可靠和优质软件的基石。无论是编写简单的脚本还是开发复杂的应用程序,都需要深入理解数据结构和算法的基本概念以及它们的应用。本篇博客将带领读者探索数据结构和算法的学习之旅,从基本概念到时间复杂度和空间复杂度的深入讨论,为读者提供系统的学习指南和实用的知识技能。

提示:以下是本篇文章正文内容,下面案例可供参考

内容学习来自王道考研书籍和网课!!!!

1、开篇_数据结构在学什么

关于数据结构在学什么?可以总结为两句话

  • 如何用程序代码把现实世界的问题信息化
  • 如何用计算机高效地处理这些信息从而创造价值

其他的内容不是重点,作为科普和理解,具体大家可以去b站看看前面绪论的课就行

2、数据结构的基本概念

在这里插入图片描述
学习建议:概念多,比较无聊。抓大放小,重要的是形成框架,不必纠结于细节概念

数据

数据是信息的载体,是描述客观事物属性的数、字符及所有能输入到计算机中并被计算机程序识别
和处理的符号的集合
数据是计算机程序加工的原料。

数据元素、数据项

数据元素是数据的基本单位,通常作为一个整体进行考虑和处理。
一个数据元素可由若干数据项组成数据项是构成数据元素的不可分割的最小单位

图解:
在这里插入图片描述
在这里插入图片描述

数据结构、数据对象

数据结构是相互之间存在一种或多种特定关系的数据元素的集合。
数据对象是具有相同性质的数据元素的集合,是数据的一个子集。
在这里插入图片描述

数据类型、抽象数据类型

数据类型是一个值的集合和定义在此集合上的一组操作的总称。
1)原子类型。其值不可再分的数据类型。
在这里插入图片描述

2)结构类型。其值可以再分解为若干成分(分量)的数据类型。
在这里插入图片描述
抽象数据类型(Abstract Data Type,ADT)是抽象数据组织及与之相关的操作。
在这里插入图片描述
总结就是,抽象数据类型只包括逻辑结构和运算操作,但是不存在具体的实现,可以理解为只是一个理论上的存在,但是是否能用代码实现就不可知了,所以是抽象的,不够具体!!!

数据结构的三要素

在这里插入图片描述

逻辑结构

在这里插入图片描述
集合:
在这里插入图片描述
线性结构:
在这里插入图片描述
树形结构:
在这里插入图片描述
图结构:
在这里插入图片描述

数据的物理结构(存储结构)

在这里插入图片描述
顺序存储:
在这里插入图片描述
链式存储:
在这里插入图片描述

索引存储:
在这里插入图片描述
散列存储:
在这里插入图片描述
顺序存储和非顺序存储
在这里插入图片描述
在这里插入图片描述

数据的运算

数据的运算——施加在数据上的运算包括运算的定义和实现运算的定义是针对逻辑结构的,
指出运算的功能;运算的实现是针对存储结构的,指出运算的具体操作步骤。
在这里插入图片描述

最后总结内容

在这里插入图片描述在这里插入图片描述在这里插入图片描述

3、算法的基本概念

在这里插入图片描述
在这里插入图片描述

算法的特性

  • 有穷性

在这里插入图片描述

  • 确定性

算法中每条指令必须有确切的含义,对于相同的输入只能得出相同的输出。(输出结果唯一,不能出现多个输出结果)

  • 可行性

算法中描述的操作都可以通过已经实现的基本运算执行有限次来实现。

  • 输入

一个算法有零个或多个输入,这些输入取自于某个特定的对象的集合。

  • 输出

一个算法有一个或多个输出,这些输出是与输入有着某种特定关系的量。

好算法的拥有的特点

在这里插入图片描述
好算法通常具有以下几个特性:

  1. 正确性(Correctness): 算法能够产生正确的输出结果,满足预期的需求和规范。

  2. 效率(Efficiency): 算法在有限的资源(如时间和空间)内能够高效地完成任务,不会消耗过多的计算资源。

  3. 可读性(Readability): 算法的实现清晰简洁,易于理解和维护,便于他人阅读和理解。

  4. 健壮性(Robustness): 算法能够在各种不同的输入情况下保持稳定性和正确性,不易出现异常或崩溃。

  5. 可扩展性(Scalability): 算法能够适应不同规模和复杂度的问题,具有良好的可扩展性和适应性。

  6. 通用性(Generality): 算法能够解决一类问题而不局限于特定的场景或数据,具有一定的普适性和适用性。

  7. 优雅性(Elegance): 算法设计简洁而优雅,使用了简单而有效的思想或技巧解决问题,避免了冗余和复杂性。

4、算法的时间复杂度(重点)

首先考虑一个问题,如果我们让算法先运行起来,事后统计运行时间是否可行???
在这里插入图片描述

因此算法时间复杂度采用的是事前预估
在这里插入图片描述

注意:由于时间问题,只给出关键的计算时间复杂度的方法!!!

通常情况下,通过计算语句频度来恒量时间开销和问题规模n的关系
在这里插入图片描述
但是,在实际中,我们通常会忽略影响较小的部分
在这里插入图片描述

通常,n都是取无穷,也就是在问题规模很大的情况下!!!
在这里插入图片描述

结论:
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

练习:
在这里插入图片描述
在这里插入图片描述
总结:

一般都只考虑算法的最坏时间复杂度和平均时间复杂度,考虑最好时间复杂的意义不大
在这里插入图片描述在这里插入图片描述

5、算法的空间复杂度(重点)

空间开销
在这里插入图片描述
需要注意,算法原地工作的概念可能会考到!!!
在这里插入图片描述
只需关注存储空间大小与问题规模相关的变量
在这里插入图片描述
空间复杂度的计算和时间复杂度很相似
在这里插入图片描述

同样适用于加法规则
在这里插入图片描述

函数递归调用带来的内存开销
在这里插入图片描述
这种情况比较复杂一点,考的概率也要小很多
在这里插入图片描述
总结(通常来说,空间复杂的考查并不多,主要是考查时间复杂度):
在这里插入图片描述

总结:拓展视野,掌握精髓

数据结构和算法是计算机科学中最基础、最重要的概念之一,对于提升编程能力、解决实际问题至关重要。通过本文的学习,我们深入了解了数据结构的基本概念,理解了算法的基本原理,并重点关注了算法的时间复杂度和空间复杂度。这些知识不仅为我们提供了解决问题的方法和思路,也拓展了我们的计算机科学视野。在未来的学习和工作中,让我们继续努力,不断探索,不断提升,为自己的技术之路添砖加瓦。

  • 35
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值