【数据结构与算法】绪论

目录

一、数据结构研究

二、基本概念和术语

2.1 基本概念

2.2 什么是数据结构?

2.3 数据结构内容

2.4 逻辑结构种类

2.5 存储结构种类

2.6 数据类型和抽象数据类型

三、算法和算法分析

3.1 算法的定义

3.2 算法的特性

3.3 算法设计要求

3.4 算法好坏评判标准

四、知识总结


一、数据结构研究

数据结构通常是用来研究非数值计算的程序设计中的线性表、树和图,以及它们中数据结点之间的关系和对这些数据结点可进行的操作学科。

二、基本概念和术语

2.1 基本概念

  • 数据元素:是组成数据的基本单位通常作为一个整体来进行考虑和处理,如:学生表数据中的每条记录即为一个数据元素也被称为结点或顶点。
  • 数据项:构成数据元素的最小单位如:学生表中的每条记录的属性。

        三者之间的关系:数据(学生表)>数据元素(学生记录)>数据项(学号或姓名等)。

  • 数据对象:将性质种类相同的数据元素(记录)放在一起构成的集合如:正整数数据对象N={1,2,3,4,5,...}
2.2 什么是数据结构?

说白了数据结构就是将一些数据元素(记录)放在一起构成一个集合,并且这些数据元素之间存在着一种或多种特定的联系。

2.3 数据结构内容
  • 逻辑结构:在大脑中想象出来的数据元素之间的逻辑邻接关系。
  • 物理存储结构: 数据元素在物理内存中的存放表现形式。
  • 数据的运算和实现: 在内存中操作这些数据元素。
2.4 逻辑结构种类
  • 划分方式一:线性结构和非线性结构。其中:

线性结构(一对一):是指只有一个开始结点和终端结点且两结点之间的数据元素只有一个前趋和后继结点,相邻结点之间呈现出一对一的关系如:学生表中的记录即线性表、栈、队列、串。

非线性结构是指数据元素(即结点)之间不是一对一的关系而是存在一对多如树或多对多的关系如图。

树(一对多):

 图(多对多):

  • 划分方式二:

集合结构:数据元素之间除了都属于同一个集合外无其它任何关系。

线性结构:数据元素之间存在一对一的线性关系。

树形结构:数据元素之间存在着一对多的层次关系。

图状或网状结构:数据元素之间存在着多对多的任意关系。

2.5 存储结构种类

顺序存储结构:用一组连续的存储单元来存储数据元素其元素之间的逻辑关系根据存储位置的不同来表示如:C语言中用数组来存放具有一定顺序的数据元素。

链式存储结构:将数据元素存放到任意位置的存储单元中,根据存储单元中保存的下一个元素的指针地址来表示数据元素间的前后顺序如:C语言中使用带“数据域+指针域”的方式来表示链式存储。

索引存储结构:在存储数据元素的同时还为其建立一张索引表来记录结点存放的内存地址位置。

 

散列存储结构:根据数据元素的关键字结合某种公式直接计算出该数据结点预存放的内存地址位置。

2.6 数据类型和抽象数据类型

数据类型: 一组性质相同的值的集合以及定义在此集合上可以进行的操作,如:int、char。

抽象数据类型:从问题中抽象出的数据、不考虑其在计算机内存中的存储形式以及运算实现算法;其包括数据元素、数据元素之间的关系、以及可以对这些数据元素进行的逻辑运算操作。

定义格式如下:

说明:抽象数据类型可以用编程语言来描述实现即用编程语言中已有的数据类型来对应抽象数据类型的数据部分,用函数(方法)来描述抽象数据类型的操作部分。例如:

 

 

三、算法和算法分析

3.1 算法的定义

算法就是求解问题的方法和步骤描述,可以使用自然语言(中文、英语等)、流程图、伪代码、编程语言等来描述实现。

3.2 算法的特性
  • 有穷性:一个算法总是能在执行有限时间后结束。
  • 确定性:算法中的每条指令必须有确切的含义没有二义性即相同的输入会得到相同的输出。
  • 可行性:算法的描述可以通过具体的操作来实现如:C语言。
  • 输入:一个算法有0或多个输入
  • 输出:一个算法有一个或多个输出。
3.3 算法设计要求
  • 正确性:给出几个刁难的、苛刻的输入仍能获取正确的输出结果。
  • 可读性:要求算法的描述是可以被人们看懂理解的。
  • 健壮性:对于一些非法错误的输入,程序不会出现奇怪的信息、终止执行而是对其做出相应的处理并接着运行。
  • 高效性:算法的设计在执行时间和存储空间上占用要少。
3.4 算法好坏评判标准
  • 时间复杂度。指程序运行所消耗的时间。一般不会以编写算法程序并运行来获取算法的时间复杂度,而是通过找出算法中执行次数最多的语句并求出它的数量级来作为算法的时间复杂度,简记“T(n)=O(f(n))”其中O表示取数量级。

步骤:

1、从代码中找出执行次数最多的语句作为基本语句(*在循环中嵌套层次最深的语句往往是执行次数最多的)。

2、计算基本语句执行的次数从而得到f(n)。

3、根据公式求出数量级用“O”符号表示取数量级。

说明:时间复杂度T(n)按数量级递增顺序如下图(越往右算法的时间复杂度越高): 

 

  •  空间复杂度:指算法在执行过程中所消耗的存储空间。一般将代码中临时辅助变量所占用的空间个数来作为空间复杂度的数量级f(n),简记为"S(n)=O(f(n))",n为问题的大小规模。

说明:T(n)时间复杂度和S(n)空间复杂度在实际场景中往往存在矛盾即此消彼长的关系。

四、知识总结

@声明:“山月润无声”博主知识水平有限,以上文章如有不妥之处,欢迎广大IT爱好者指正,小弟定当虚心受教! 

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

JAVA虚拟机实战篇之GC调优[1](GC调优基知、方法、工具和常见GC模式)

文章目录 版权声明GC调优概念GC调优核心指标(KPI)吞吐量延迟(Latency)内存使用量 GC调优方法GC调优步骤GC调优工具jstat工具visualvm插件Prometheus Grafana GC日志分析GC日志保存GC日志分析工具GC ViewerGCeasy 常见的GC模式正常情况缓存对象过多情况内…

01_electron入门

由于毕业论文可能需要用 electron,所以 Linux 驱动学习慢了下来。 一、安装 node.js 进入 node.js 官网:Node.js (nodejs.org) 咱们就是用稳定版,安装包除了安装路径自己选择外,一直点 Next。 安装完成后需要配置环境&#xff0c…

如有Kata

养成跑步的习惯,就能习惯性跑步,一有空就见缝插针抽空跑步。这是一层韵律感、完成感、美感、成就感。而一次跑步的一连串动作,是另一层韵律感、完成感、美感、成就感。所以这里就有了两层的韵律感、完成感、美感、成就感。如是如水漂荡漾。健…

动手做一个最小RAG——TinyRAG

Datawhale干货 作者:宋志学,Datawhale成员 大家好,我是不要葱姜蒜。 接下来我会带领大家一步一步地实现一个简单的RAG模型,这个模型是基于RAG的一个简化版本,我们称之为Tiny-RAG。Tiny-RAG是一个基于RAG的简化版本&am…

SpringBoot源码

SpringBoot核心前置内容 1.Spring注解编程的发展过程 1.1 Spring 1.x 2004年3月24日,Spring1.0 正式发布,提供了IoC,AOP及XML配置的方式。 在Spring1.x版本中提供的是纯XML配置的方式,也就是在该版本中必须要提供xml的配置文件…

八、词嵌入语言模型(Word Embedding)

词嵌入(Word Embedding, WE),任务是把不可计算、非结构化的词转换为可以计算、结构化的向量,从而便于进行数学处理。 一个更官方一点的定义是:词嵌入是是指把一个维数为所有词的数量的高维空间(one-hot形式…

小迪安全36WEB 攻防-通用漏洞XSS 跨站MXSSUXSSFlashXSSPDFXSS

#XSS跨站系列内容:1. XSS跨站-原理&分类&手法 XSS跨站-探针&利用&审计XSS跨站另类攻击手法利用 XSS跨站-防御修复&绕过策略 #知识点: 1、XSS 跨站-原理&攻击&分类等 2、XSS 跨站-MXSS&UXSS&FlashXss&PDFXSS 等 1、原…

HCS-华为云Stack-计算节点内部网络结构

HCS-华为云Stack-计算节点内部网络结构 图中表示的仅为计算节点是两网口的模式,如果是四网口模式,系统会再自动创建一个网桥出来 图中未画出存储平面和Internal Base平面,它们和tunnel bearing、External OM-样,都是通过trunk0的…

信息系统项目管理师006:车联网(1信息化发展—1.2现代化基础设施—1.2.3车联网)

文章目录 1.2.3 车联网1.体系框架2.链接方式3.场景应用 记忆要点总结 1.2.3 车联网 车联网是新一代网络通信技术与汽车、电子、道路交通运输等领域深度融合的新兴产业形态。智能网联汽车是搭载先进的车载传感器、控制器、执行器等装置,并融合现代通信与网络技术&…

Linux常用命令之top监测

(/≧▽≦)/~┴┴ 嗨~我叫小奥 ✨✨✨ 👀👀👀 个人博客:小奥的博客 👍👍👍:个人CSDN ⭐️⭐️⭐️:传送门 🍹 本人24应届生一枚,技术和水平有限&am…

for、while、do While、for in、forEach、map、reduce、every、some、filter的使用

for、while、do While、for in、forEach、map、reduce、every、some、filter的使用 for let arr [2, 4, 6, 56, 7, 88];//for for (let i 0; i < arr.length; i) {console.log(i : arr[i]) //0:2 1:4 2:6 3:56 4:7 5:88 }普通的for循环可以用数组的索引来访问或者修改…

SAP BTP Hyperscaler PostgreSQL都有哪些Performance监控 (一)

前言 SAP BTP云平台中&#xff0c;除了自身的HANA数据库作为首选以外&#xff0c;它还支持PostgreSQL的整套服务&#xff0c;并以PaaS的形式提供给客户。你可以按照实例为单位进行购买申请不同标准规格的PG实例&#xff0c;然后构建自己的业务逻辑。Hyperscaler是这套产品或方…

【Python-Docx库】Word与Python的完美结合

今天给大家分享Python处理Word的第三方库&#xff1a;Python-Docx。 什么是Python-Docx&#xff1f; Python-Docx是用于创建和更新Microsoft Word&#xff08;.docx&#xff09;文件的Python库。 日常需要经常处理Word文档&#xff0c;用Python的免费第三方包&#xff1a;Pyt…

【Linux】Shell及Linux权限

Shell Shell的定义 Shell最简单的定义是&#xff1a;命令行解释器。 Shell的主要任务&#xff1a;1. 将使用者的命令翻译给核心进行处理。2.将核心的处理结果翻译给使用者 为什么要有Shell? 使用者和内核的关系就相当于两个完全陌生的外国人之间的关系&#xff0c;他们要进…

Linux:线程互斥与同步

目录 线程互斥 锁的初始化 加锁 解锁 锁的初始化 锁的原理 死锁 线程同步 方案一&#xff1a;条件变量 条件变量初始化 等待 唤醒 条件变量的代码示例 基于阻塞队列的生产消费模型 方案二&#xff1a;POSIX信号量 初始化信号量&#xff1a; 销毁信号量 等待信…

中国大学生计算机设计大赛--智慧物流挑战赛基础

文章目录 一、Ubuntu基础1.1 基本操作1.2 文本编辑 二、ROS基础介绍2.1 概念与特点2.2 基本结构2.3 创建工程2.4 节点和节点管理器2.5 启动文件 三、ROS通信机制3.1 话题3.2 服务3.3 动作3.4 参数服务器 四、ROS可视化工具4.1 rviz4.2 rqt4.3 tf 五、Python实现简单的ROS节点程…

01-分析同步通讯/异步通讯的特点及其应用

同步通讯/异步通讯 微服务间通讯有同步和异步两种方式 同步通讯: 类似打电话场景需要实时响应(时效性强可以立即得到结果方便使用),而且通话期间不能响应其他的电话(不支持多线操作)异步通讯: 类似发邮件场景不需要马上回复并且可以多线操作(适合高并发场景)但是时效性弱响应…

MQ高可用相关设置

文章目录 前言MQ如何保证消息不丢失RabbitMQRocketMQKafkaMQ MQ如何保证顺序消息RabbitMQRocketMQKafka MQ刷盘机制/集群同步RabbitMQRocketMQKafka 广播消息&集群消息RabbitMQRocketMQ MQ集群架构RabbitMQRocketMQKafka 消息重试RabbitMQRockeMqKafka 死信队列RocketMQKaf…

Claude3横空出世:颠覆GPT-4,Anthropic与亚马逊云科技共启AI新时代

✨✨ 欢迎大家来访Srlua的博文&#xff08;づ&#xffe3;3&#xffe3;&#xff09;づ╭❤&#xff5e;✨✨ &#x1f31f;&#x1f31f; 欢迎各位亲爱的读者&#xff0c;感谢你们抽出宝贵的时间来阅读我的文章。 我是Srlua小谢&#xff0c;在这里我会分享我的知识和经验。&am…

车载电子电器架构 —— 汽车电子电气系统分解

车载电子电器架构 —— 汽车电子电气系统分解 我是穿拖鞋的汉子&#xff0c;魔都中坚持长期主义的汽车电子工程师。 老规矩&#xff0c;分享一段喜欢的文字&#xff0c;避免自己成为高知识低文化的工程师&#xff1a; 屏蔽力是信息过载时代一个人的特殊竞争力&#xff0c;任何…