当前位置: 首页 > news >正文

数据结构(一)—— 数据结构简介

文章目录

    • 一、基本概念和术语?
      • 1.1、数据
      • 1.2、数据元素
      • 1.3、数据项(属性、字段)
      • 1.4、数据对象
      • 1.5、数据结构
    • 二、逻辑结构和物理结构(存储结构)
      • 2.1、逻辑结构
        • 1、定义
        • 2、分类(线性结构和非线性结构)
      • 2、物理结构
        • 1)定义
        • 2)顺序存储和链式存储
        • 3)其他存储方式
    • 三、算法和抽象数据类型简介
      • 3.1 抽象数据类型定义
      • 3.2 算法定义
      • 1、算法的特性
      • 2、算法效率的度量
        • 2.1 事后统计法
        • 2.2 事前分析统计
      • 3、算法的复杂度
      • 4、算法实例

一、基本概念和术语?

1.1、数据

数据是描述客观事物的符号,是计算机可以操作的对象,是能被计算机识别,并输入到计算机处理的符号集合。

(数据不仅仅包括整型、实型等数值型,还有字符、声音、图像、视频等非数值类型)

1.2、数据元素

数据元素是组成数据的、有一定意义的基本单位,在计算机中通常作为整体处理,也称为记录(元组、结点、顶点)。

1.3、数据项(属性、字段)

  • 一个数据元素可以由若干个数据项组成。
  • 数据项是数据不可分割的最小单位。

1.4、数据对象

数据对象是性质相同的数据元素的集合,是数据的子集。

1.5、数据结构

  • 在现实世界中,不同数据元素之间不是独立的,而是存在特定的关系,这些关系称为结构。
  • 数据结构是相互之间存在一种或多种特定关系的数据元素的集合。
  • 数据结构包括三方面的内容:逻辑结构、存储结构和数据的运算。数据的逻辑结构和存储结构是密不可分的两个方面,一个算法的设计取决于所选定的逻辑结构,而算法的实现依赖于所采用的存储结构。

二、逻辑结构和物理结构(存储结构)

数据结构是相互间存在特定关系的数据的集合,分为逻辑结构和物理结构。

2.1、逻辑结构

1、定义

逻辑结构是指数据对象中数据元素之间相互关系(逻辑关系),即从逻辑关系上描述数据。它与数据的存储无关,是独立于计算机存储器的。

2、分类(线性结构和非线性结构)

根据数据元素之间关系的不同特征,通常有下列4类基本结构,复杂程度依次递进。

1image.png

  • 集合:结构中的数据元素之间除了同属于一个集合外,没有其他的关系。

  • 线性结构:线性结构中的数据元素之间是一对一的关系。

  • 树形结构:树形结构中的数据元素之间是一对多的关系。

  • 图状结构或网状结构:结构中的元素之间是多对多的关系。

2、物理结构

image.png

1)定义

数据的物理结构是指数据的逻辑结构在计算机中的存储方式。又称存储结构。

它研究的是数据结构在计算机中的实现方法,包括数据元素的表示和元素之间的关系。

数据元素的存储结构形式主要有两种:顺序存储和链式存储

2)顺序存储和链式存储

1. 顺序存储结构

  • 是利用数据元素在存储器中的相对位置来表示数据元素之间的逻辑顺序。
  • 顺序存储结构是把数据元素放在地址连续的存储单元中,程序设计中使用数组类型来实现。(逻辑相邻物理相邻)

2. 链式存储结构

  • 利用结点中指针来表示数据元素之间的关系。
  • 把数据元素存储在任意的存储单元里,这组存储单元可以是连续的,也可以是连续的,程序设计中使用指针类型来实现。(逻辑相邻物理不一定相邻)
3)其他存储方式
  • 索引存储:类似于目录,以后可以联系操作系统的文件系统章节来理解。

  • 散列存储:通过关键字直接计算出元素的物理地址。

三、算法和抽象数据类型简介

3.1 抽象数据类型定义

  1. 数据类型:是指一组性质相同的值的集合及定义在此集合上的一些操作的总称。

例如:C语言中数据类型分为基本类型和构造类型

基本类型:整型、浮点型、字符型等

构造类型:数组、结构、联合、指针、枚举型、自定义类型等

  1. 抽象数据类型(abstract data type,ADT):是指一个数学模型及定义在该模型上的一组操作。

3.2 算法定义

算法是特定问题求解步骤的描述,是独立存在的一种解决问题的方法和思想。

1、算法的特性

  • 输入:有0个或多个输入
  • 输出:至少有1个或多个输出
  • 有穷性:算法在有限的步骤后应该自动结束而不会无限循环。
  • 确定性:算法中的每个步骤都有确定的含义,不会出现二义性
  • 可行性:算法的每一步都是可行的
  • 正确性:算法对于合法数据能够得到满足要求的结果,能够处理非法输入,并得到合理的结果。
  • 可读性:算法要便于阅读、理解和交流
  • 健壮性:算法不应该得到莫名其妙的结果
  • 性价比:利用最少的资源得到满足要求的结果

2、算法效率的度量

效率评估是工程中算法最重要的附加特性。

2.1 事后统计法

比较不同算法对同一组输入数据的运行处理时间。

缺点:

A、为了获得不同算法的运行处理时间必须编写相应程序

B、运行处理时间严重依赖硬件以及运行时环境

C、算法的测试数据选取困难

2.2 事前分析统计

依据统计的方法对算法效率进行评估

影响算法效率的主要因素:

A、算法采用的策略和方法

B、问题的输入规模

C、编译器产生的代码

D、计算机的执行速度

算法效率的简单估算:

image.png

image.png

image.png

三种求和算法的关键部分的操作数量分别为2n,n,1。随着问题规模的增大,操作数量的差异会越来越大,效率差异也会越来越大。

image.png

不同算法操作数量的对比

算法操作数量对比的实例一:

image.png

n<=3时,算法B优于算法A。随着n的规模增大,算法A优势比较明显。

算法操作数量对比的实例二:

image.png

n=1时,算法C与算法D效率相同。随着n规模的增大,算法C优势明显优于算法D。

判断算法的效率时,操作数量中的常数项和其他次阶项常常可以忽略,只需要关注最高阶项。

3、算法的复杂度

(1)算法的时间复杂度

算法时间复杂度是算法运行后对时间需求量的定性描述。

由于主要关注算法的效率问题,因此主要讨论算法的时间复杂度。

O表示法

算法的效率严重依赖于操作(Operations)数量,操作数量的估算可以作为时间复杂度的估算,在判断时首先关注操作数量的最高阶项。

O(2)==>O(1)

O(3n+3)> O(3n)>O(n)

O(3n2+n+4)==>O(n2)

常见的时间复杂度:
image.png

image.png

image.png

image.png

(2)算法的空间复杂度

算法空间复杂度是算法运行后对空间需求量的定性描述。

通常使用S(n)表示算法的空间复杂度。使用时间复杂度的推导方法推导空间复杂度。

当算法所需的内存空间大小为常数时,算法的空间复杂度为S(1)。

通常情况下,算法的时间复杂度更受关注。可以通过增加额外空间降低时间复杂度。

算法是解决具体问题的步骤,数据结构是算法解决问题的载体。

4、算法实例

一个数组中存储着1——1000的数字,每个数字可能出现多次或者不出现,找出出现次数最多的数字。
void search(int array[], int len)
{//总计可能出现1000种可能值int sp[1000] = {0};int max = 0;for(int i = 0; i < len; i++){//遍历数组,数组中某个数组出现一次增加统计1次sp[array[i] - 1]++;}for(int i = 0; i < 1000; i++){if(max < sp[i]){max = sp[i];}}for(int i = 0; i< 1000; i++){if(max == sp[i]){cout << "Number:" << i + 1 << endl;cout << "Count:" << max << endl;}}
}

使用空间换时间,算法的时间效率为O(n)。

相关文章:

数据结构(一)—— 数据结构简介

文章目录 一、基本概念和术语&#xff1f;1.1、数据1.2、数据元素1.3、数据项&#xff08;属性、字段&#xff09;1.4、数据对象1.5、数据结构 二、逻辑结构和物理结构&#xff08;存储结构&#xff09;2.1、逻辑结构1、定义2、分类&#xff08;线性结构和非线性结构&#xff0…...

Ubuntu输入正确密码重新跳到登录界面

Ubuntu输入正确密码重新跳到登录界面 问题描述 输入正确的密码登录后闪一下又回到锁屏界面 输入正确的密码后还是回到这个界面 产生的原因 /etc/profile或者/etc/enviroment出现了问题,导致无法正常登录 该错误产生的原因不止一个 这里是因为/etc/profile或者/etc/enviromen出…...

TCP/IP(十四)流量控制

一 流量控制 说明&#xff1a; 本文只是原理铺垫,没有用tcpdumpwiresahrk鲜活的案例讲解,后续补充 ① 基本概念 流量控制: TCP 通过接受方实际能接收的数据量来控制发送方的窗口大小 ② 正常传输过程 背景:1、客户端是接收方,服务端是发送方 --> 下载2、假设接收窗…...

CSS网页标题图案和LOGO SEO优化

favicon图标 将网页的头名字旁边放入一个图案 想将想要的图案切成png图片 然后把png图片转换成ico图案可以借助进行访问 将语法引用到head里面 SEO译为搜索引擎优化。是一种利用搜索引擎的规则提高网站有关搜索引擎的自然排名的方式 SEO的目的是对网站进行深度的优化&…...

机器人制作开源方案 | 双轮提升搬运小车

1. 功能描述 双轮提升搬运小车是一种用于搬运和移动物体的机械设备&#xff0c;它通常采用双轮驱动和提升装置。一般具备以下特点&#xff1a; ① 双轮驱动&#xff1a;该小车配备两个驱动轮&#xff0c;通过电动机或其它动力源驱动&#xff0c;提供足够的动力和扭矩&#xff0…...

5G安卓核心板-MT6833/MT6853核心板规格参数

随着智能手机的不断发展&#xff0c;芯片技术在推动手机性能和功能方面发挥着关键作用。MT6833和MT6853安卓核心板是两款高度集成的基带平台&#xff0c;为LTE/5G/NR和C2K智能手机应用提供强大的处理能力和多样化的接口。 这两款安卓核心板都集成了蓝牙、FM、WLAN和GPS模块&…...

信创之国产浪潮电脑+统信UOS操作系统体验4:visual studio code中怎么显示中文

☞ ░ 前往老猿Python博客 ░ https://blog.csdn.net/LaoYuanPython 一、引言 今天在vscode中打开以前的一段C代码&#xff0c;其中的中文显示为乱码&#xff0c;如图所示&#xff1a; 而在统信文本编辑器打开是正常的&#xff0c;打开所有菜单&#xff0c;没有找到相关配置…...

Magica Cloth 使用方法笔记

Magica Cloth 使用方法笔记 效果展示&#xff1a; 参考资料&#xff1a; 1、官方使用文档链接&#xff1a; インストールガイド – Magica Soft 2、鱼儿效果案例&#xff1a; https://www.patreon.com/posts/69459293 3、插件工具链接&#xff1a;版本() 目录&#xff1a…...

c++ 学习之 强制类型转换运算符 const_cast

看例子怎么用 int main() {int a 1;int* p a;// 会发生报错// 如果学着 c的风格类型转换int* pp (int*)a;*pp 1; // 编译不报错&#xff0c;但是运行报错// const_castconst int n 5;const std::string s "lalal";// const cast 只针对指针&#xff0c;引用&…...

Ceph相关部署应用(博客)

这里写目录标题 Ceph相关部署应用一.存储基础1.单机存储设备2.商业存储解决方案3.分布式存储&#xff08;软件定义的存储 SDS&#xff09; 二.Ceph 简介1.Ceph2.Ceph 优势3.Ceph 架构4.Ceph 核心组件5.OSD 存储后端6.Ceph 数据的存储过程7.Ceph 版本发行生命周期8.Ceph 集群部署…...

基于 ceph-deploy 部署 Ceph 集群 超详细

Ceph part1 一、存储基础1.1 单机存储设备1.2 单机存储的问题1.3 单机存储问题的解决方案1.3.1 商业存储解决方案1.3.2 分布式存储&#xff08;软件定义的存储 SDS&#xff09; 二、分布式存储2.1 常见的分布式存储2.2 分布式存储的类型 三、Ceph概述3.1 Ceph简介3.2 Ceph 优势…...

做一个物联网的后台程序与数据库设计

数据库部分 先设计一个简单的数据库。表结构如下: sql语句如下: SET NAMES utf8mb4; SET FOREIGN_KEY_CHECKS = 0;-- ---------------------------- -- Table structure for realtimedata -- ---------------------------- DROP TABLE IF EXISTS `realtimedata`...

Pytorch深度学习—FashionMNIST数据集训练

文章目录 FashionMNIST数据集需求库导入、数据迭代器生成设备选择样例图片展示日志写入评估—计数器模型构建训练函数整体代码训练过程日志 FashionMNIST数据集 FashionMNIST&#xff08;时尚 MNIST&#xff09;是一个用于图像分类的数据集&#xff0c;旨在替代传统的手写数字…...

uniapp 返回上一步携带参数

1. 下一步 // 返回上一页setTimeout(() > {let pages getCurrentPages();let prevPage pages[pages.length - 2];prevPage.$vm.schoolName this.formList;uni.navigateBack({delta: 1});}, 1000) 2. 返回上一步, 携带参数 // 获取下一步返回的数据onShow() {let pages …...

软件工程与计算总结(七)需求文档化与验证

目录 一.文档化的原因 二.需求文档基础 1.需求文档的交流对象 2.用例文档 3.软件需求规格说明文档 三.需求文档化要点 1.技术文档协作要点 2.需求书写要点 3.软件需求规格说明文档属性要点 四.评审软件需求规格说明文档 1.需求验证与确认 2.评审需求的注意事项 五…...

MySQL锁概述

数据库锁是一种机制&#xff0c;用于管理并发访问数据库的方式。当多个用户或事务同时访问数据库时&#xff0c;可能会导致数据不一致或冲突的问题。数据库锁的作用是确保数据的一致性和完整性&#xff0c;同时允许多个用户并发地访问数据库。 需要注意的是&#xff0c;加锁是消…...

【Ceph Block Device】块设备挂载使用

文章目录 前言创建pool创建user创建image列出image检索image信息调整image大小增加image大小减少image大小 删除image从pool中删除image从pool中“延迟删除”image从pool中移除“延迟删除的image” 恢复image恢复指定pool中延迟删除的image恢复并重命名image 映射块设备格式化i…...

Arbitrum Stylus 的工作原理

理解 Arbitrum 如何协调 EVM 和 WASM 的共存是至关重要的。这不仅仅是拥有两个独立的引擎&#xff1b;这是一种增强两者优势的协同关系。 Arbitrum 的独特架构允许 EVM 和 WASM 之间进行无缝和同步的操作&#xff0c;这要归功于其统一的状态、跨 VM 调用和兼容的经济模型。 用…...

nextjs构建服务端渲染,同时使用Material UI进行项目配置

一、创建一个next项目 使用create-next-app来启动一个新的Next.js应用&#xff0c;它会自动为你设置好一切 运行命令: npx create-next-applatest 执行结果如下&#xff1a; 启动项目&#xff1a; pnpm dev 执行结果&#xff1a; 启动成功&#xff01; 二、安装Mater…...

Java 使用 Easyexcel 导出大量数据

读Excel | Easy Excel 1、 我遇到的数据量超级大&#xff0c;使用传统的POI方式来完成导入导出很明显会内存溢出&#xff0c;并且效率会非常低&#xff1b;2、 数据量大直接使用select * from tableName肯定不行&#xff0c;一下子查出来300w条数据肯定会很慢&#xff1b;3、 …...

[2025CVPR]DeepVideo-R1:基于难度感知回归GRPO的视频强化微调框架详解

突破视频大语言模型推理瓶颈,在多个视频基准上实现SOTA性能 一、核心问题与创新亮点 1.1 GRPO在视频任务中的两大挑战 ​安全措施依赖问题​ GRPO使用min和clip函数限制策略更新幅度,导致: 梯度抑制:当新旧策略差异过大时梯度消失收敛困难:策略无法充分优化# 传统GRPO的梯…...

C++实现分布式网络通信框架RPC(3)--rpc调用端

目录 一、前言 二、UserServiceRpc_Stub 三、 CallMethod方法的重写 头文件 实现 四、rpc调用端的调用 实现 五、 google::protobuf::RpcController *controller 头文件 实现 六、总结 一、前言 在前边的文章中&#xff0c;我们已经大致实现了rpc服务端的各项功能代…...

连锁超市冷库节能解决方案:如何实现超市降本增效

在连锁超市冷库运营中&#xff0c;高能耗、设备损耗快、人工管理低效等问题长期困扰企业。御控冷库节能解决方案通过智能控制化霜、按需化霜、实时监控、故障诊断、自动预警、远程控制开关六大核心技术&#xff0c;实现年省电费15%-60%&#xff0c;且不改动原有装备、安装快捷、…...

汽车生产虚拟实训中的技能提升与生产优化​

在制造业蓬勃发展的大背景下&#xff0c;虚拟教学实训宛如一颗璀璨的新星&#xff0c;正发挥着不可或缺且日益凸显的关键作用&#xff0c;源源不断地为企业的稳健前行与创新发展注入磅礴强大的动力。就以汽车制造企业这一极具代表性的行业主体为例&#xff0c;汽车生产线上各类…...

条件运算符

C中的三目运算符&#xff08;也称条件运算符&#xff0c;英文&#xff1a;ternary operator&#xff09;是一种简洁的条件选择语句&#xff0c;语法如下&#xff1a; 条件表达式 ? 表达式1 : 表达式2• 如果“条件表达式”为true&#xff0c;则整个表达式的结果为“表达式1”…...

HDFS分布式存储 zookeeper

hadoop介绍 狭义上hadoop是指apache的一款开源软件 用java语言实现开源框架&#xff0c;允许使用简单的变成模型跨计算机对大型集群进行分布式处理&#xff08;1.海量的数据存储 2.海量数据的计算&#xff09;Hadoop核心组件 hdfs&#xff08;分布式文件存储系统&#xff09;&a…...

算法岗面试经验分享-大模型篇

文章目录 A 基础语言模型A.1 TransformerA.2 Bert B 大语言模型结构B.1 GPTB.2 LLamaB.3 ChatGLMB.4 Qwen C 大语言模型微调C.1 Fine-tuningC.2 Adapter-tuningC.3 Prefix-tuningC.4 P-tuningC.5 LoRA A 基础语言模型 A.1 Transformer &#xff08;1&#xff09;资源 论文&a…...

Python基于历史模拟方法实现投资组合风险管理的VaR与ES模型项目实战

说明&#xff1a;这是一个机器学习实战项目&#xff08;附带数据代码文档&#xff09;&#xff0c;如需数据代码文档可以直接到文章最后关注获取。 1.项目背景 在金融市场日益复杂和波动加剧的背景下&#xff0c;风险管理成为金融机构和个人投资者关注的核心议题之一。VaR&…...

RSS 2025|从说明书学习复杂机器人操作任务:NUS邵林团队提出全新机器人装配技能学习框架Manual2Skill

视觉语言模型&#xff08;Vision-Language Models, VLMs&#xff09;&#xff0c;为真实环境中的机器人操作任务提供了极具潜力的解决方案。 尽管 VLMs 取得了显著进展&#xff0c;机器人仍难以胜任复杂的长时程任务&#xff08;如家具装配&#xff09;&#xff0c;主要受限于人…...

c++第七天 继承与派生2

这一篇文章主要内容是 派生类构造函数与析构函数 在派生类中重写基类成员 以及多继承 第一部分&#xff1a;派生类构造函数与析构函数 当创建一个派生类对象时&#xff0c;基类成员是如何初始化的&#xff1f; 1.当派生类对象创建的时候&#xff0c;基类成员的初始化顺序 …...