【数据结构学习1】数据结构

news2025/2/27 14:29:00

目录

  • 数据结构
    • 定义
    • 数据结构的构成
      • 逻辑结构
        • 逻辑结构的类型
      • 存储结构
      • 数据运算
    • 数据类型和抽象数据类型
  • 算法
    • 定义
    • 分析基础
      • 时间复杂度分析
        • 事前分析估算法 -> 分析算法的执行时间
        • 时间复杂度
        • 时间复杂度类型
        • 简化的算法时间复杂度分析
      • 空间复杂度分析

数据结构

定义

  1. 数据:所有能够输入到计算机中,且能够被计算机处理的符号的集合。数据结构中主要讨论结构化数据,讨论的数据都是数据对象

  2. 结构化数据

  • 数据元素:是数据(集合)中的一个“个体”,它是数据的基本单位
  • 数据项:数据项是用来描述数据元素的,它是数据的最小单位
  • 数据对象:具有相同性质的若干个数据元素的集合,如整数数据对象是所有整数的集合。
  1. 数据结构:是指带结构数据元素的集合

数据结构 = 数据对象 + 结构

  1. 一个数据结构的构成
  • 数据的逻辑结构:数据元素之间的逻辑关系
  • 数据的存储结构/物理结构:数据元素及其关系在计算机存储器中的存储方式
  • 数据运算:施加在该数据上的操作

数据结构的构成

逻辑结构

逻辑结构是面向用户的,有多种表示形式:表格、二元组、图形
在这里插入图片描述
在这里插入图片描述

逻辑结构的类型

  1. 集合

元素之间关系:无
特点:数据元素之间除了“属于同一个集合”的关系外,别无其他逻辑关系。是最松散的,不受任何制约的关系。
在这里插入图片描述
2. 线性结构

元素之间关系:一对一
特点:开始元素和终端元素都是唯一的,除此之外,其余元素都有且只有一个前驱元素和一个后继元素。
在这里插入图片描述
3. 树形结构

元素之间关系:一对多
特点:开始元素唯一,终端元素不唯一。除终端元素以外,每个元素有一个或多个后续元素;除开始元素外,每个元素有且仅有一个前驱元素。
在这里插入图片描述
4. 图形结构

元素之间关系:多对多
特点:所有元素都可能有多个前驱元素和多个后继元素。
在这里插入图片描述

存储结构

数据在计算机存储器中的存储方式就是存储结构,满足两个要求:存储所有元素;存储数据元素间的关系

  • 结构体数组(顺序存储结构):所有元素占用一整块内存空间;逻辑上相邻的元素,物理上也相邻
  • 链表(链式存储结构):一个逻辑元素用一个节点存储,每个节点单独分配,所有节点的地址不一定是连续的;用指针来表示逻辑关系
  • 索引存储结构
  • 哈希(散列)存储结构

数据运算

数据运算是对数据的操作。分为两个层次:运算描述运算实现

结论:
同一逻辑结构可以对应多种存储结构
同样的运算,在不同的存储结构中,其实现过程是不同的

数据类型和抽象数据类型

  1. 数据类型是一个值的集合和定义在此集合上的一组操作的总称,就是已经实现了的数据结构(比如int整数类型等)
  2. 抽象数据类型(ADT):指的是从求解问题的数学模型中抽象出来的数据逻辑结构运算(抽象运算),而不考虑计算机的具体实现**(抽象数据类型 = 逻辑结构 + 抽象运算)**
//定义复数抽象数据类型 Complex,一个复数的形式:e1+e2i
ADT Complex
{
	D={e1,e2|e1,e2均为实数} //数据对象
	R{<e1,e2>|e1是复数的实部,e2是复数的虚部} //数据关系
}

基本运算
在这里插入图片描述

算法

定义

  1. 定义
  • 数据元素之间的关系有逻辑关系和物理关系,对应的运算有基于逻辑结构的运算描述基于存储结构的运算实现
  • 通常把基于存储结构的运算实现步骤或过程称为算法
  1. 算法的五个重要的特性
特性内容
有穷性在有穷步之后结束,算法能够停机
确定性算法中的每一条指令必须有确定的含义,无二义性
可行性可通过基本运算有限次执行来实现,也就是算法中每一个动作能够被机械地执行
有输入一个算法有0个或多个输入
有输出一个算法有1个或多个输出
  1. 如何描述输出型参数
    在这里插入图片描述

分析基础

分析算法占用的资源

  • CPU时间->时间复杂度
  • 内存空间->空间复杂度

时间复杂度分析

一个算法是由 控制结构(顺序、分支和循环三种)原操作(指固有数据类型的操作,如+、-、*、/、++、–等) 构成。算法执行时间取决于两者的总和效果。
在这里插入图片描述
2. 两种衡量算法效率的方法:事后统计法事前分析估算法

事前分析估算法 -> 分析算法的执行时间

  • 求出算法所有原操作的执行次数(也称为频度),它是问题规模n(用于表示求解问题大小的正整数,如n个记录排序)的函数,用T(n)表示
  • 算法执行时间大致 = 原操作所需时间 x T(n),所以T(n)与算法的执行时间成正比。为此用T(n)表示算法的执行时间
  • 比较不同算法的T(n)大小得出算法执行时间的好坏

时间复杂度

  • 算法的执行时间用时间复杂度来表示。
  • 算法中执行时间T(n)问题规模n某个函数f(n),记作:T(n) = O(f(n))。记号“O”读作 “大O” ,它表示问题规模n的增大算法执行时间的增长率和f(n)的 增长率相同。
    在这里插入图片描述
  • “O”的形式定义:

T(n) = O(f(n)) 表示存在一个正的常数M,使得当n>=n0时都满足:|T(n)| <= M|f(n)|,f(n)是T(n)的上界,通常取最接近的上界,即紧凑上界在这里插入图片描述

  • 就是只求出T(n)的最高阶,忽略其低阶项和常系数,这样既可以简化T(n)的计算,又能够比较客观的反映出当n很大时算法的时间性能。

时间复杂度类型

  • 一个没有循环的算法的执行时间与问题规模n无关,记作O(1),也称作常数阶
  • 一个只有一重循环的算法的执行时间与问题规模n的增长呈线性增长关系,记作O(n),也称作线性阶
  • 其余常用的算法时间复杂度还有平方阶O(n2)、立方阶O(n3)、对数阶O(log2n)、指数阶O(2n)等;
    在这里插入图片描述
    例子:在这里插入图片描述
    在这里插入图片描述

简化的算法时间复杂度分析

  • 算法中的基本操作一般是最深层循环内的原操作
  • 算法执行时间大致=基本操作时间所需的时间 x 其运算次数

总结:在算法分析时,计算T(n)时仅仅考虑基本操作的运算次数。

空间复杂度分析

  • 空间复杂度:用于亮度一个算法在运行过程中临时占用的存储空间的大小
  • 一般也作为问题规模n的函数,采用数量级形式描述,记作:S(n) = O(g(n))
  • 若一个算法的空间复杂度为O(1),则称此算法为原地工作/就地工作算法

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

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

相关文章

工作流调度系统 Azkaban介绍与安装(一)

文章目录前言1、为什么要用工作流调度系统2、常见的工作流调度系统1 集群规划2 配置 MySQL3 配置 Executor Server3.1 修改 azkaban.properties3.2 启动3.3 激活4 配置 Web Server4.1 修改 azkaban.properties4.2 修改azkaban-users.xml文件&#xff0c;添加 atguigu 用户4.3 启…

VM 虚拟机没有网络,无法Ping通

场景&#xff1a; 虚拟机用过&#xff0c;之前一切正常&#xff0c;使用NAT模式联网&#xff0c;配置了静态IP换了路由器&#xff0c;推测是主机IP网段变了无法使用ssh工具连接虚拟机&#xff0c;且相互都ping不通&#xff08;后来经历了主机可以ping通虚拟机&#xff0c;虚拟…

PWM寄存器初始化

本模块主要实现输出频率占空比可调的 PWM 波形功能和输入捕获功能&#xff0c;同时也可作为计数器使用。一、主要特性 1. 16位向上或向下计数器&#xff1b; 2. 支持最多6路PWM通道&#xff1b; 3. 每个通道支持输出比较或边缘对齐PWM模式波形输出&#xff0c;支持设置、清除、…

关于 CSDN-AI 机器人 programmer_ada —— 阿达·洛夫莱斯(Ada Lovelace)

收到早期文章的一条新评论&#xff1a; 文笔和内容稍稍透漏着机器人的风格&#xff0c;打开主页果不其然 看到个人介绍中的巴贝奇的分析机&#xff0c;突然觉得头像很是眼熟。 最近刚读了《人工智能简史》&#xff0c;第4章——从汇编语言到TensorFlow&#xff0c;人工智能的…

使用layui组件库制作进度条

使用layui组件库制作进度条 html代码 <!DOCTYPE html> <html> <head><meta charset"UTF-8"><title>Example</title><!-- 引入 layui 的 CSS 文件 --><link rel"stylesheet" href"https://cdn.staticfil…

Day948.组件化成熟度评估,你的目的地在哪里呢 -系统重构实战

组件化成熟度评估&#xff0c;你的目的地在哪里呢 Hi&#xff0c;我是阿昌&#xff0c;今天学习记录的是关于组件化成熟度评估&#xff0c;你的目的地在哪里呢的内容。 一、组件化成熟度模型 组件化成熟度模型可以帮助咱全局去思考当前的现状&#xff0c;并制定更有针对性的…

ChatGPT带火的百万年薪职业究竟是什么?

对话有ChatGPT、画图有Midjourney&#xff0c;哪怕被封号了&#xff0c;国内的文心一言、通义千问也不遑多让。 ChatGPT等生成式AI工具涌现程度堪比“乱花渐欲迷人眼”。 拟一份演讲稿&#xff0c;画一张海报&#xff0c;做一份PPT大纲&#xff0c;生成个图表&#xff0c;敲一…

【数据结构】- 线性表+顺序表(上)

文章目录前言一、线性表二、顺序表2.1概念及结构2.2接口实现2.3具体实现总结前言 所有的失败都是上帝在考验你是否真的热爱 本章是关于数据结构中的顺序表和链表 提示&#xff1a;以下是本篇文章正文内容&#xff0c;下面案例可供参考 一、线性表 线性表&#xff08;linear …

Xilinx CDC Constraints(ug903: Chapter6 )

&#xff08;1&#xff09;About CDC Constraints 跨时钟域约束适用于具有不同启动和捕获时钟的定时路径。根据启动和捕获时钟的关系以及在CDC路径上设置的时序异常&#xff0c;有同步CDC和异步CDC。例如&#xff0c;同步时钟之间但被错误路径约束覆盖的CDC路径不被定时…

传统图像处理——颜色迁移

转自知乎&#xff1a;https://zhuanlan.zhihu.com/p/267832794,仅供学习。 利用一张图片的颜色去修改另一张图片的颜色风格。 原理是利用颜色空间的正交化&#xff0c;即更改某个颜色&#xff0c;不会影响到其它属性。这里的色彩迁移的论文则是使用了LAB空间&#xff08;RGB颜…

C语言初阶--连用scanf(以%c读取时)遇到的问题

目录前言总结前言 在我们写程序的过程中&#xff0c;会频繁使用scanf函数&#xff0c;当在一个程序中scanf用多了&#xff0c;会出现输入不了的问题&#xff01;大家有没有想过是什么原因导致的该问题呢&#xff1f;下面我们一起探讨一下吧&#xff01; 遇到问题的例子&#…

Linux环境下安装JDK1.8

目录 一、下载jdk 二、安装准备 三、解压缩包到指定安装目录 四、配置环境变量 五、验证安装结果 一、下载jdk 这部分依然是从Oracle官网下载&#xff0c;下载速度还是很快的。 下载完成后&#xff0c;将该压缩包放到Linux环境下&#xff0c;准备解压安装。 二、安装准备…

Redis性能调优详解

文章目录前言确认是否是Redis真的变慢了&#xff1f;什么是基准性能&#xff1f;具体如何做&#xff1f;使用复杂度过高的命令哪些属于复杂度过高命令--聚合类命令、 大值数据针对这种情况如何解决呢&#xff1f;操作bigkeybigkey耗时原因如何定位出bigKey--bigkeys这里我需要提…

34岁本科男,做了5年功能测试想转行,除了进厂还能干什么?

我的建议是不要给自己设限。任何一个行业只要做到顶尖都是很有作为的&#xff0c;何况是IT行业&#xff0c;本身就比别的行业有优势&#xff0c;如果你现在是功能测试&#xff0c;应该想的是进阶自动化测试或者测试开发 如何在半年时间由功能测试成长为年薪30W的测试开发&#…

【Hydro】常用地下水与溶质运移模拟软件

饱和地下水流和溶质运移常见的模拟软件 常用的求解地下水水流和溶质运移方程的数学方法有两种&#xff1a;有限差分法和有限元法。两者主要的差别在于离散模型区的方法不同。基于不同的数学方法&#xff0c;当前市场上有一些地下水模拟图形用户界面&#xff0c;它们在基本功能…

【Python基础入门学习】Python工具Pycharm的安装与使用

一、关于Python 1.1 下载Python 在下载与安装pycharm工具前&#xff0c;一定要先安装python 打开Python官网&#xff1a;python下载打开上述网站&#xff0c;选择 Downloads -> 系统 我是Windows系统&#xff0c;点击进入后&#xff0c;找到自己要安装的安装包以及想安装的…

UE4/5多人游戏详解(四、加入游戏会话,数值key和value,寻找IP地址)

目录 加入游戏会话 找到会话 加入会话 代码&#xff1a; 设置会话key和value 代码&#xff1a; 在寻找会话中添加匹配&#xff1a; 代码&#xff1a; 寻找IP地址&#xff1a; 代码&#xff1a; 回调函数onJoinSessionComplete实现&#xff1a; 代码&#xff1a; 测试…

音视频开发六:FFmpeg日志使用

常用日志级别 在 FFmpeg 中&#xff0c;error、warning、info、verbose 和 debug 是指不同的日志级别&#xff0c;各自对应的是不同类型的日志信息。具体的解释如下&#xff1a; error: 输出错误信息&#xff0c;表示程序出现了无法恢复的错误&#xff0c;需要立即停止执行。…

通过数据库逆向生成表和属性word文档(PDMan/PowerDesigner)及遇到问题记录

目录背景通过PDMan导出word文档步骤导出文档格式自定义格式导出Word失败问题解决出错原因&#xff1a;[object Object]解决方式通过PowerDesigner导出word文档导出步骤导出结果PowerDesigner使用问题记录DSN警告Could not Initialize JavaVM!mysql odbc安装使用下载安装版&…

数据结构——算法的时间复杂度和空间复杂度

文章目录算法效率时间复杂度时间复杂度的定义大O渐进渐进表示法常见的时间复杂度计算举例空间复杂度算法效率 我们在算法的设计中&#xff0c;会去衡量算法的好坏。那么算法效率就是衡量标准之一。除此之外&#xff0c;我们也会关注到算法的健壮性、正确性、可读性、效率与低存…