【408计算机考研课程】数据结构-数据结构在学什么?

前言

数据结构在学什么?

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

第一章:数据结构在学什么?

总览

什么是数据?

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

数据元素、数据项

数据元素

是数据的基本单位,通常作为一个整体进行考虑和处理。

数据项:

一个数据元素可有若干个数据项组成,数据项是构成数据元素的不可分割的最小单位。

什么是数据对象

数据对象:

是具有相同性质的数据元素的集合,是数据的一个子集

数据结构

数据结构:

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

分类:

线性数据结构(xx排行榜)、网状数据结构(xx好友关系图)

同一个数据对象中的数据元素,可以组成不同的数据结构

数据结构三要素

三要素:

逻辑结构

分类:集合结构、线性结构(一对一)、树形结构(一对多)、图状结构(多对多)

数据的运算

物理结构(存储结构)

逻辑结构

集合结构

集合:

各个元素同属于一个集合,别无其他关系

线性结构

线性结构:

数据元素之间是一对一的关系

除了第一个元素,所有元素都有唯一的前驱

除了最后一个元素,所有元素都有唯一的后继

树形结构

树形结构:

数据元素之间是一对多的关系

图状结构

图状结构:

数据元素之间是多对多的关系

数据的运算

简介:针对与某种逻辑结构,结合实际需求,定义基本运算

  • 针对线性结构存在的基本运算
    • 查找第I个数据元素
    • 在第I个位置插入新的元素
    • 删除第I个元素

物理结构(存储结构)

数据的存储结构:

顺序存储

链式存储

索引存储

散列存储

顺序存储

说明:使用线性结构举例

把逻辑上相邻的元素存储在物理位置上也相邻的存储单元中,元素之间的关系有存储单元的邻接关系来体现。

链式存储

说明:使用线性结构举例

链式存储:

逻辑上相邻的元素在物理位置上可以不相邻,借助指示元素存储地址的指针来表示元素之间的逻辑关系。

索引存储

说明:使用线性结构举例

索引存储:

在存储元素信息的同时,还建立附加的索引表,在索引表中的每一项称为索引项,索引项形式为:(关键字,地址)

散列存储

散列存储:

根据元素的关键字直接计算出该元素的存储地址,又称为哈希存储。

数据类型、抽象数据类型

数据类型:

是一个值的集合和定义在此集合上的一组操作的总称。

数据类型分类:

原子类型(值不可再分的数据类型):bool、int类型

结构类型(值可以再分为若干成分):结构体类型

抽象数据类型:

是抽象数据组织与之先关的操作

算法基本概念

知识总览:

什么是算法?

程序= 数据结构 + 算法

举例说明:番茄炒蛋

数据结构等于:食材

算法等于:完成番茄炒蛋的具体步骤(求解问题的步骤)

算法的五个特性

有穷性:必须在固定的时间或步骤中完成所走的步骤

确定性:算法处理的程序结果永远是一致的,不存在多种结果的情况。

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

输入:一个算法有0个或多个输入,

输出:一个算法有-个或多个输出。

好算法的特质

正确性:可以正确的解决问题

可读性:具有良好的可读性,帮助人们好理解

健壮性:遇到非法数据时,能够适当的作出反应应对,而不会产生奇怪的结果。

高效率:算法执行时间快,时间复杂度低

低存储量需求:空间复杂度低,不费内存

算法效率的度量

时间复杂度

![](https://img-blog.csdnimg.cn/img_convert/6b41362d6bef223d7e374404fc18bde3.png)

时间复杂度:

事前预估算法时间开销**T(n)**与问题规模n的关系(T 表示 Time)

  • 案例分析1

/**
T(3000) = 1 +3001+2*3000+1
时间开销与问题规模n的关系:T(n) = 3n+3= O(n) // 常数阶直接用n结论一:顺序执行的代码只会影响常数项,可以忽略
结论二:只需挑循环中一个基本操作,分析它的执行次数与n的关系即可。
结论三:如果有多层嵌套循环,只需关注最深层循环了几次
*/
#include <stdio.h>void loveYou(int num  ) {int i = 1;while(i<=num) {printf("%d\n", i);i++;}printf("exit");
}
int main() {loveYou(3000);return 0;
}
  • 案例分析2

  • 时间复杂度简化过程

如果时间复杂度项过于长的话,可以保留最高项

结论:当问题规模n足够大时,可以只考虑阶数高的部分

简化为:

  • 比较阶数更高的项:

  • 练习题1

  • 练习题2

  • 总结

时间复杂度度量标准:

最坏时间复杂度:最坏情况下算法的时间复杂度

平均时间复杂度:所有输入示例等概率出现的情况下,算法的期望运行时间

最好时间复杂度(参考意义不大):最好情况下算法的时间复杂度

空间复杂度

空间复杂度:衡量内存空间开销与问题规模n之间的关系

程序空间复杂度分析:只需要关注存储空间大小与问题规模相关的变量

  • 案例分析1:

  • 案例分析2:

程序空间复杂度分析:只需要关注存储空间大小与问题规模相关的变量

  • 案例分析3

分析:4nn+4+4

S(O)=o(n的二次方)

  • 案例分析4

分析:4nn+4*n+4+4

S(O)=o(N的二次方)

  • 案例分析5:

分析:

递归第一次:5,a,b,c

递归第二次:4,a,b,c

递归第三次:4,a,b,c

S(O)=O(n)

总结:空阿复杂度=递归调用的深度

  • 案例分析5修改:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/1555369.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

el-pagination组件封装

组件使用 源代码&#xff1a; <script setup> import Pagination from /components/pagination/index.vue import {ref} from "vue";const pageNum ref(1) const pageSize ref(10) const total ref(120)function loadData() {// 加载数据 } </script>…

拓扑排序简介

拓扑排序(Topological Sort)是一种重要的图算法,用于对有向无环图(DAG, Directed Acyclic Graph)中的节点进行排序。拓扑排序的结果是一种线性序列,使得对于图中的任意一条有向边(u, v),顶点u都在顶点v之前。这种排序常用于任务调度、编译器依赖关系分析等领域。 拓…

24个AI写作秘技,助你写出震撼人心的佳作!

最近&#xff0c;许多朋友开始尝试使用AI进行写作。然而&#xff0c;他们创作的文章常常显得语言过于正式&#xff0c;不仅缺乏沉浸感&#xff0c;发送后也很容易被系统检测出重复内容。我一直强调&#xff0c;在写作过程中&#xff0c;我们不应完全依赖AI。AI只是一种工具&…

【C语言】分支与循环

文章目录 前言if语句关系操作符逻辑操作符&#xff1a;&& , || , &#xff01;switch语句if语句和switch语句的对比 while循环for循环do-while循环break和continue语句循环嵌套goto语句 前言 C语⾔是结构化的程序设计语⾔&#xff0c;这⾥的结构指的是顺序结构、选择&…

12条职场经验总结

01 事干得好不好尚且不说&#xff0c;但是话一定要说得漂亮。 比如&#xff0c;当领导给你安排工作的时候&#xff0c;你一定要非常积极地响应&#xff0c;拍着胸脯跟领导说“放心吧”。至于后续到底怎么干&#xff0c;再结合实际情况有的放矢地把握。 02 当别人夸奖你的时…

Hugging Face 任意大模型仓库劫持 - 无声的破坏

摘要 在这篇博客中&#xff0c;我们展示了攻击者如何攻击Hugging Face的Safetensors转换空间及其相关的服务机器人。这些服务是一个在Hugging Face上广受欢迎的服务&#xff0c;专门用于将不安全的机器学习模型转换为更安全的版本。我们随后展示了如何通过Hugging Face自身的服…

GoogleNet原理与实战

在2014年的ImageNet图像识别挑战赛中&#xff0c;一个名叫GoogLeNet 的网络架构大放异彩。以前流行的网络使用小到11&#xff0c;大到77的卷积核。本文的一个观点是&#xff0c;有时使用不同大小的卷积核组合是有利的。 回到他那个图里面你会发现,这里的一个通过我们最大的池化…

《Linux从小白到高手》理论篇:Linux用户和组相关的命令

List item 本篇介绍Linux用户和组相关的命令&#xff0c;看完本文&#xff0c;有关Linux用户和组相关的常用命令你就掌握了99%了。Linux用户和组相关的命令可以分为以下六类&#xff1a; 一.用户和用户组相关查询操作命令&#xff1a; Id id命令用于显示用户的身份标识。常见…

职场中的10个“人情世故”,随处可见

职场上&#xff0c;“现实”是主基调。如果不通#人情世故#&#xff0c;可能举步维坚。很多时候&#xff0c;人情世故并不是什么高深的学问&#xff0c;就是在点点滴滴间&#xff0c;只要稍加注意&#xff0c;就能学通。下面这10条&#xff0c;是职场很常见的人情世故。 1、登门…

InnoDB 事务模型

文章目录 InnoDB 事务模型事务ACID特性事务隔离级别 事务操作事务并发问题事务数据读写类型Consistent Nonlocking Reads 快照读Locking Reads 加锁读 MVCC 并发控制实现原理InnoDB 隐藏列Read ViewUndo log实现过程 MVCC与隔离级别MVCC和辅助索引 幻读幻行问题可重复读MVCC会出…

HTB:Synced[WriteUP]

目录 连接至HTB服务器并启动靶机 1.What is the default port for rsync? 2.How many TCP ports are open on the remote host? 3.What is the protocol version used by rsync on the remote machine? 4.What is the most common command name on Linux to interact w…

一些关于上传数据-p7zip-full-压缩包的经验

目录 前言 7z 简介 Windows如何压缩tar.gz格式 一、下载7-ZIP 二、tar文件进一步压缩 说明&#xff1a; 前言 本人每次在linux服务器上执行apt-get install p7zip-full命令&#xff0c;都会有复杂依赖报错&#xff08;因为实验过程中用到的依赖包太多了&#xff09;&…

[Python学习日记-39] 闭包是个什么东西?

[Python学习日记-39] 闭包是个什么东西&#xff1f; 简介 闭包现象 闭包意义与作用 简介 在前面讲函数和作用域的时候应该提到过&#xff0c;当函数运行结束后会由 Python 解释器自带的垃圾回收机制回收函数内作用域已经废弃掉的变量&#xff0c;但是在 Python 当中还有一种…

Linux中的多线程

Linux线程概念 在一个程序里的一个执行路线就叫做线程&#xff08;thread&#xff09;。更准确的定义是&#xff1a;线程是“一个进程内部的控制序 列” 进程是系统分配资源的基本实体 线程是CPU调度的基本单位 POSIX线程库 创建线程 功能&#xff1a;创建一个新的线程 原…

Tkinter打包成EXE安装文件

打包成 .exe可执行文件 1. 安装PyInstaller&#xff0c;命令如下&#xff1a; pip install pyinstaller2. 编写你的Tkinter应用程序&#xff1a; 创建一个Python文件&#xff0c;例如app.py&#xff0c;并写入你的Tkinter代码。 3. 在 app.py 文件所在的目录使用PyInstaller…

从零开始讲PCIe(5)——66MHZ的PCI总线与其限制

一、前言 在之前的内容中&#xff0c;我们已经基本了解了PCI总线的设计思路和传输机制&#xff0c;之前的内容我们都是基于33MHZ版本的PCI总线进行学习的&#xff0c;为了支持更到的带宽&#xff0c;PCI协议还有一种66MHZ的版本。 二、高带宽PCI&#xff08;66MHZ&#xff09;…

UML类图全解析

1.UML的基本介绍 1.1什么是UML 1.UML > 统一建模语言&#xff0c;是一种用于软件系统分析和设计的语言工具&#xff0c;它用于帮助软件开发人员进行思考和记录思路的结果。 2.UML本身是一套符号的规定&#xff0c;就像数学符号和化学符号一样&#xff0c;这样符号用于描述软…

dll动态库加载失败导致程序启动报错以及dll库加载失败的常见原因分析与总结

目录 1、问题说明 2、dll库的隐式加载与动态加载 2.1、dll库的隐式加载 2.2、dll库的显式加载 3、使用Process Explorer查看进程加载的dll库信息以及动态加载的dll库有没有加载成功 3.1、使用Process Explorer查看进程加载的dll库信息 3.2、使用Process Explorer查看动态…

交叠型双重差分法

交叠型双重差分法&#xff08;Staggered Difference-in-Differences, Staggered DiD&#xff09;是一种扩展的双重差分&#xff08;Difference-in-Differences, DiD&#xff09;方法&#xff0c;用于处理多个时间点的政策干预或处理组&#xff08;treatment group&#xff09;并…

JavaWeb的小结02

第2章-第2节 一、知识点 HttpServletRequest请求对象、HttpServletResponse响应对象、响应内容类型Content-Type、请求转发、重定向、ServletContext对象。 二、目标 深刻理解HttpServletRequest对象的作用。 深刻理解HttpServletResponse对象的作用。 掌握HttpServletRequ…