当前位置: 首页 > 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、 …...

高效防汛决策:山海鲸可视化系统助力城市防洪

随着全球气候的变化&#xff0c;自然灾害如洪水、台风等频发&#xff0c;防范洪水成为城市管理者和居民们亟待解决的重要问题。 洪水的威胁 洪水是自然界的杀手之一&#xff0c;不仅会造成大量的财产损失&#xff0c;还可能危害人们的生命安全。因此&#xff0c;预测、监测和有…...

易点云CFO向征:CFO不能只讲故事,价值创造才是核心

作者 | 曾响铃 文 | 响铃说 在今年6月初&#xff0c;也是易点云上市6天后&#xff0c;《巴伦周刊》正式启动评价“2023港美上市中国企业CFO精英100”的活动。 时间来到9月&#xff0c;评价揭秘&#xff0c;易点云CFO向征成功入选&#xff0c;被评为“年度最具成长潜力CFO”…...

【计算机网络】poll | epoll

文章目录 1. pollpoll函数参数解析代码解析PollServer代码 poll 特点 2. epoll认识接口epoll_createepoll_ctlepoll_wait 基本原理红黑树就绪队列 1. poll poll函数参数解析 输入 man poll poll的第一个参数是文件描述符 poll的第二个参数为 等待的多个文件描述符(fd)数字层面…...

C++设计模式_07_Bridge 桥模式

文章目录 1. 动机&#xff08;Motivation&#xff09;2. 代码演示Bridge 桥模式2.1 基于继承的常规思维处理2.2 基于组合关系的重构优化2.3 采用Bridge 桥模式的实现 3. 模式定义4. 结构&#xff08;Structure&#xff09;5. 要点总结 与上篇介绍的Decorator 装饰模式一样&…...

[JAVA版本] Websocket获取B站直播弹幕——基于直播开放平台

教程 B站直播间弹幕Websocket获取 — 哔哩哔哩直播开放平台 基于B站直播开放平台开放且未上架时&#xff0c;只能个人使用。 代码实现 1、相关依赖 fastjson2用于解析JSON字符串&#xff0c;可自行替换成别的框架。 hutool-core用于解压zip数据&#xff0c;可自行替换成别的…...

第一个 Python 程序

三、第一个 Python 程序 好了&#xff0c;说了那么多&#xff0c;现在我们可以来写一下第一个 Python 程序了。 一开始写 Python 程序&#xff0c;个人不太建议用专门的工具来写&#xff0c;不方便熟悉语法&#xff0c;所以这里我先用 Sublime Text 来写&#xff0c;后期可以…...

广告牌安全监测,保障户外广告牌的安全与稳定

随着城市的发展和现代化&#xff0c;广告牌已经成为城市风景的一部分。然而&#xff0c;随之而来的是广告牌安全问题&#xff0c;因为它们暴露在各种天气和环境条件下&#xff0c;一旦掉落&#xff0c;可能对人们的生命和财产造成威胁。广告牌安全监测有效的解决了这一问题&…...

分类预测 | MATLAB实现KOA-CNN-GRU开普勒算法优化卷积门控循环单元数据分类预测

分类预测 | MATLAB实现KOA-CNN-GRU开普勒算法优化卷积门控循环单元数据分类预测 目录 分类预测 | MATLAB实现KOA-CNN-GRU开普勒算法优化卷积门控循环单元数据分类预测分类效果基本描述程序设计参考资料 分类效果 基本描述 1.MATLAB实现KOA-CNN-GRU开普勒算法优化卷积门控循环单…...

进来了解实现官网搜索引擎的三种方法

做网站的目的是对自己的品牌进行推广&#xff0c;让越来越多的人知道自己的产品&#xff0c;但是如果只是做了一个网站放着&#xff0c;然后等着生意找上门来那是不可能的。在当今数字时代&#xff0c;实现官网搜索引擎对于提升用户体验和推动整体性能至关重要。搜索引擎可以帮…...

OpenCV3-Python(7)模板匹配和霍夫检测

模板匹配 膜版匹配不能匹配尺度变换和视角变换的图像 图片中查找和模板相似度最高的图像 计算相似程度最高的位置 res cv.matchTemplate(img , template, method) 该方法返回一个类似灰度图的东西&#xff0c;如果用的相关匹配&#xff0c;那么亮的地方就是可能匹配上的地方 …...