数据结构——绪论

news2025/4/4 6:43:10

基本概念

数据:数据是信息的载体,对客观事物的字符表示。
数据元素:数据的基本单位,通常作为一个整体进行考虑和处理。
数据项: 一个数据元素由多个数据项组成,数据项是数据元素不可分割的最小单位。

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

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

数据结构这门课着重关注的是数据元素之间的关系,和对这些数据元素的操作,而不关心具体的数据项内容。

数据结构

数据结构是相互之间存在一种或多种特定关系的数据元素的集合。
数据结构定义中的“关系”指的是逻辑关系,即逻辑结构,与实现无关。
数据结构包括三方面的内容:逻辑结构、存储结构、数据的运算。
在这里插入图片描述
数据的逻辑结构是从面向实际问题的角度出发的,只采用抽象表达方式,独立于存储结构;
而数据的存储结构是逻辑结构在计算机上的映射,它不能独立于逻辑结构而存在。

注意:
1)数据的运算包括定义和实现,定义是针对逻辑结构的,实现是针对存储结构的。
2)区分数据结构和逻辑结构

  • 顺序表、哈希表、单链表是数据结构。既描述逻辑结构,又描述存储结构和数据运算。
  • 有序表仅描述元素之间的逻辑关系,属于逻辑结构。

3)循环队列是顺序表,属于数据结构;而栈是ADT,只表示逻辑结构。
4)链式存储设计时,各个不同结点的存储空间可以不连续,但结点内的存储单元地址必须连续。
5)广义表是广义线性结构,不是线性结构。

数据类型

1)原子类型
2)结构类型
3)抽象数据类型(ADT)
抽象数据类型(ADT)描述了数据的逻辑结构和抽象运算,通常用(数据对象、数据关系、基本操作)这样的三元组来表示,从而构成一个完整的数据结构定义。
在这里插入图片描述

如何表示

二元组

B =(D,S)
B:表示该数据结构的名称
D:表示数据结构中的数据元素集合
S:表示数据结构中的数据元素之间的关系

Bank = (D,S)
D={张三,李四,王五}
S={<张三,李四>,<李四,王五>}
在这里插入图片描述

ADT(三元组)

ADT在二元组的基础上增加了“基本操作”。
在这里插入图片描述

算法

算法是对特定问题求解步骤的一种描述,它是指令的有限序列。
程序 = 数据结构 + 算法

算法的五个特性

  • 有穷性:一个算法必须总是(对任何合法的输入值)在执行有穷步之后结束,且每一步都可在有穷时间内完成。
  • 确定性:算法中每一条指定必须有确切的含义,读者理解时不会产生二义性。并且在任何条件下,算法只有惟一的一条执行路径,即对于相同的输入只能得出相同的输出。
  • 可行性:一个算法是能行的。即算法中描述的操作都是可以通过已经实现的基本运算执行有限次来实现的。
  • 输入:一个算法有零个或多个的输入,这些输入取自于某个特定的对象的集合。
  • 输出:一个算法有一个或多个的输出,这些输出是同输入有着某些特定关系的量。

注意:算法必须是有穷的,而程序可以是无穷的。

算法设计的要求

  • 正确性:算法能够满足具体问题的需求。
  • 可读性:算法主要是为了人的阅读与交流,其次才是机器执行。可读性好有助于人对算法的理解。
  • 健壮性:当输入数据非法时,算法也能适当地做出反应或进行处理,而不会产生莫名其妙的输出结果。
  • 效率与低存储量需求:效率指的是算法执行的时间。存储量需求指算法执行过程中所需要的最大存储空间。

算法效率的度量

1)事后统计法
2)事前统计法

时间复杂度

在这里插入图片描述

常<对<幂<指<阶在这里插入图片描述
求和定理:假设T1(n)和T2(n)是程序段P1、P2的执行时间,并且T1(n)= O(f(n)), T2(n)=O(g(n)),那么
总执行时间复杂度是T1(n)+T2(n)= O(MAX(f(n),g(n)))。(多个并列循环)。

求积定理:假设T1(n)和T2(n)是程序段P1、P2的执行时间,并且T1(n)= O(f(n)), T2(n)=O(g(n)),那么
总执行时间复杂度是T1(n)*T2(n)= O(f(n)*g(n))。(多层嵌套循环·)

1) 顺序执行的代码只会影响常数项,可以忽略
2)只需挑选循环中的一个基本操作分析它的执行次数与n的关系即可。
3)如果有多层嵌套循环,只需关注最深层循环循环了几次。

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

时间复杂度是指最坏时间复杂度,只关注最高此项,只有常数项记作1。

空间复杂度

算法存储包含:输入数据所占的空间、程序本身所占的空间和临时变量所占的空间。
算法空间复杂度 S(n) = O(f(n))
算法原地工作指算法所需的辅助空间为常量,S(n)= O(1)。

空间复杂度,只需关注存储空间大小与问题规模相关的变量。

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

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

相关文章

流程图如何制作?几个流程图实用制作方法教给你

流程图如何制作&#xff1f;流程图是一种重要的图表类型&#xff0c;通常用于描绘系统、流程或程序的步骤和关系。它们在各种领域都有广泛的应用&#xff0c;包括工程、科学、商业和教育等。本文将介绍一些制作流程图的实用方法&#xff0c;以及一些快速、易于使用的工具。 制作…

k8s之Pod容器资源限制

目录 一、Pod 容器的资源限制二、CPU 资源单位三、内存资源单位四、为本地临时性存储设置请求和限制五、总结 一、Pod 容器的资源限制 当定义 Pod 时可以选择性地为每个容器设定所需要的资源数量。 最常见的可设定资源是 CPU 和内存大小&#xff0c;以及其他类型的资源。 当为…

MySQL索引事务与存储引擎

MySQL索引事务与存储引擎 索引概念索引作用副作用索引场景创建索引原则索引分类 事务概念:特性事务隔离级别 MYSQL存储引擎概念常用的存储引擎MyISAMInnoDB 索引 概念 是一个排序的列表&#xff0c;存储着索引值和这个值所对应的物理地址无须对整个表进行扫描&#xff0c;通过…

Vant安装及必坑

vant官网地址 Vant 4 - A lightweight, customizable Vue UI library for mobile web apps. 1.通过npm安装&#xff1a; 注意vue2和vue3不同&#xff0c;版本过高会报错 vue2 npm i vantlatest-v2或者npm i vant -Svue3 npm i vant或者npm i vantnext -S 备注&#xff1a…

为什么信创国产化替代 必备 “开放式ETL产品“(下篇)

信创国产化通俗来讲&#xff0c;就是在核心芯片、基础硬件、操作系统、中间件、数据服务器等领域实现信创产业的国产替代。ETL技术 属于基础软件类中间件技术。发展自己研制的安全可靠的能够保证国家信息安全的设备&#xff0c;随着信息安全问题日益突出&#xff0c;信息安全已…

小程序 点击view内部元素 不传参

点击 内部图片和文字 type 得到的是空 无法传递参数 解决办法: 用 currentTarget 代替 target

【LangChain】数据连接(Data connection)

概要 许多LLM申请需要特定于用户的数据&#xff0c;这些数据不属于模型训练集的一部分。 LangChain 为您提供了通过以下方式加载、转换、存储和查询数据的构建块&#xff1a; Document loaders &#xff1a; 从许多不同来源加载文档Document transformers&#xff1a;拆分文档…

怎么把文档翻译成英文?这几款文档翻译工具都能实现

听说你正在寻找免费的文档翻译软件&#xff0c;我来给你一些建议吧&#xff01;翻译软件的确是个很有用的工具&#xff0c;能够帮助我们快速翻译各种语言的文档。而且现在有很多免费的选择&#xff0c;真是再好不过了&#xff01;但是随着市面上文档翻译软件数量的增多&#xf…

车载测试:车联网功能组件及安全测试策略

目录 一、车联网功能组件 车域网 IVI TBOX ECU TSP APP 通信及密码特殊指标 车端特殊指标 APP特殊指标 测试用例 一、车联网功能组件 车联网是以汽车智能化、网联化为基础&#xff0c;广泛应用新一代通信技术、人工智能技术构建起的新型基础设施。在整体架构上&…

单据小票打印模板自定义设计,手机收银软件APP搭配蓝牙便携打印机,移动便携打印零售单单据小票

单据小票打印模板自定义设计&#xff0c;手机收银软件APP搭配蓝牙便携打印机&#xff0c;移动便携打印零售单单据小票&#xff0c;轻松实现仓库条码管理&#xff0c;扫码入库出库盘点_哔哩哔哩_bilibili单据小票打印模板自定义设计&#xff0c;手机收银软件APP搭配蓝牙便携打印…

突破平凡:创造独特而吸引人的登陆页UI设计灵感

今天&#xff0c;我们从移动APP产品经理或者UI设计师的角度再来聊一聊APP登录设计方式和如何去设计这些有意思的APP登录模块。 1、熟悉目前常见的手机APP登陆方式 ① 账号登陆&#xff08;手机、邮箱&#xff09; ② 第三方登陆&#xff08;微信&#xff0c;QQ&#xff0c;微博…

Java编程-IDEA中Java的main方法、sout快捷键设置

目的 我打出psvm这四个字母时&#xff0c;可快速打出main方法 我打出syso,sout时&#xff0c;可快速打出System.out.println(); 步骤&#xff1a; 1、打开IDEA&#xff0c;点击文件&#xff0c;选择Editor中的 Live Templates选项&#xff0c;点击右侧边栏中的 号 2、选中…

quartus工具篇——Signal Tap

文章目录 quartus工具篇——Signal Tap1、Signal Tap简介2、操作步骤3、查看波形结果4、总结 quartus工具篇——Signal Tap 1、Signal Tap简介 Quartus中的Signal Tap是一种用于FPGA设计调试和分析的工具。它可以捕获和显示设计中的信号波形&#xff0c;帮助设计人员验证设计…

安卓:表示日期的控件

一、日期控件 &#xff08;一&#xff09;、DatePicker DatePicker是一种安卓平台上常用的控件&#xff0c;用于让用户选择日期。它通常以日历的形式显示&#xff0c;并允许用户通过滑动或点击来选择年、月和日。 常用属性&#xff1a; android:calendarViewShown&#xff1…

第一阶段-第十二章 Python基础的综合案例(数据可视化-动态柱状图)

目录 引、案例效果一、基础柱状图的构建  1.学习目标  2.通过Bar构建基础柱状图  3.反转x和y轴  4.数值标签在右侧  5.本节的演示  6.本小节的总结 二、基础时间线柱状图  1.学习目标  2.时间线  3. 自动播放  4.时间线的主题  5.本节的代码演示  6.本…

MSP432自主开发笔记3:串口__编写自定义printf发送函数、编写发送字节字符串函数编写

之前其实对于串口在收发字节、收发字符串方面的介绍已经挺完全了&#xff0c; 但今日无意间发现漏了些什么&#xff0c;之前有讲到过串口的printf()发送问题&#xff0c;但也仅仅教大家如何重定向printf&#xff08;&#xff09;&#xff1b;来决定向哪个串口发送数据. print…

代码随想录算法训练营第57天 | 动态规划 part17 ● 647 回文子串 ●516最长回文子序列 ●动归总结

#647 回文子串 自己不会做。 之前遇到的大部分题目是&#xff0c;我们求什么dp里面就放什么。但这道回文的题不是&#xff1a;" 本题如果我们定义&#xff0c;dp[i] 为 下标i结尾的字符串有 dp[i]个回文串的话&#xff0c;我们会发现很难找到递归关系。dp[i] 和 dp[i-1]…

自监督语义分割面模型——Masked Autoencoders Are Scalable Vision Learners(MAE)论文阅读

1、摘要 This paper shows that masked autoencoders (MAE) are scalable self-supervised learners for computer vision. Our MAE approach is simple: we mask random patches of the input image and reconstruct the missing pixels. It is based on two core designs. F…

实现二分搜索函数,设计脚手架程序进行自动测试。

1. 设计思路   二分搜索算法每次将数组中间值与目标值相比较&#xff0c;若相同&#xff0c;则该元素就是要寻找的元素&#xff0c;若不相同&#xff0c;二分搜索法通过一定的方法抛弃一半的待搜索区间&#xff0c;在剩余的区间中继续以相同方法搜索目标值. 2.源代码 #incl…

网络存储技术知识点整理

目录 前言1. 直接附加存储2. 网络附加存储3. 存储区域网络 前言 目前主流的存储技术只要有三种&#xff1a; 直接附加存储&#xff08;Direct Attached Storage&#xff0c;DAS&#xff09;网络附加存储&#xff08;Network Attached Storage&#xff0c;NAS&#xff09;存储…