408计算机考研-101-数据结构-基本概念

news2025/1/13 3:05:51

数据结构

数据结构(Data Structure)是计算机存储、组织数据的方式。

数据结构分为逻辑结构和物理结构(存储结构)

逻辑结构

逻辑结构是指数据之间的相互关系和组织方式。

照数据元素之间的关系不同,可以分为以下4种:

  • 集合结构
  • 线性接口
  • 树结构
  • 图结构
    [图片]

其中集合、树、图属于非线性结构。按照线性和非线性可以分为如下关系:
在这里插入图片描述

在C语言中,数组是一种有序且类型相同的数据元素集合,数组的逻辑结构可以表示为线性结构,其中每个元素都有一个唯一的下标来表示其位置。
而数组的物理结构可以根据存储方式分为顺序存储结构和链式存储结构。在顺序存储结构中,数组元素在内存中是连续存储的,每个元素占据固定的内存空间;而在链式存储结构中,数组元素通过指针来连接,每个元素可以存储在任意的内存位置上。
因此,可以说数组在C语言中既是一种逻辑结构,表示数据元素之间的关系,又是一种物理结构,表示数据元素在计算机内存中的存储方式。

物理结构(存储结构)

物理结构是指数据元素在计算机内存中的存储关系。

  • 顺序存储
  • 链式存储
  • 索引存储
  • 散列存储

算法

算法(Algorithm)是对特定问题求解步骤的一种描述。它的表现形式是计算机指令的有限序列,执行这些指令就能解决特定的问题。

  • 算法的基本特性:
    • 有穷性:一个算法必须总是在执行有穷步后结束,且每一步都必须在有穷时间内完成。
    • 确定性:算法的每一步都必须是确定的,即给定初始输入,算法的每一步都有唯一的结果。
    • 可行性:算法中的所有操作都可以通过已经实现的基本操作运算执行有限次来实现。
    • 输入:一个算法有零个或多个输入。
    • 输出:一个算法有一个或多个输出。
  • 评价算法优劣的基本标准:
    • 正确性:在合理的数据输入下,能够在有限的运行时间内得到正确的结果。
    • 可读性:首先应便于人们理解和相互交流,其次才是机器可执行性。可读性强的算法有助于人们对算法的理解,而难懂的算法易于隐藏错误,且难于调试和修改。
    • 健壮性:当输入的数据非法时,好的算法能适当地做出正确反应或进行相应处理,而不会产生一些莫名其妙的输出结果。
    • 高效性:高效性包括时间和空间两个方面。时间高效是指算法设计合理,执行效率高,可以用时间复杂度来度量;空间高效是指算法占用存储容量合理,可以用空间复杂度来度量。时间复杂度和空间复杂度是衡量算法的两个主要指标。

时间复杂度

为了客观地反映一个算法的执行时间,可以只用算法中的“基本语句”的执行次数来度量算法的工作量。所谓“基本语句”指的是算法中重复执行次数和算法的执行时间成正比的语句,它对算法运行时间的贡献最大。通常,算法的执行时间是随问题规模增长而增长的,因此对算法的评价通常只需考虑其随问题规模增长的趋势。这种情况下,我们只需要考虑当问题规模充分大时,算法中基本语句的执行次数在渐近意义下的阶。

常见的渐进时间复杂度:
O ( 1 ) < O ( l o g 2 n ) < O ( n ) < O ( n l o g 2 n ) < O ( n 2 ) < O ( n 3 ) < O ( 2 n ) < O ( ! n ) < O ( n n ) O(1) < O(log_2n )< O(n) < O(nlog_2 n) < O(n^2) < O(n^3) < O(2^n) < O(!n) < O(n^n) O(1)<O(log2n)<O(n)<O(nlog2n)<O(n2)<O(n3)<O(2n)<O(!n)<O(nn)
计算时间复杂度时可以按照以下步骤进行:

  1. 确定基本操作:找出算法中的基本操作,即最常执行的操作。
  2. 计算执行次数:分析代码的循环、递归等结构,确定每个基本操作的执行次数。
  3. 求时间复杂度:根据执行次数公式,计算出时间复杂度。

空间复杂度

一般情况下,一个程序在机器上执行时,除了需要寄存本身所用的指令、常数、变量和输入数据外,还需要一些对数据进行操作的辅助存储空间。其中,对于输入数据所占的具体存储量取决于问题本身,与算法无关,这样只需分析该算法在实现时所需要的辅助空间就可以了。

常见的渐进空间复杂度:
O ( 1 ) < O ( l o g 2 n ) < O ( n ) < O ( n l o g 2 n ) < O ( n 2 ) < O ( n 3 ) < O ( 2 n ) < O ( ! n ) < O ( n n ) O(1) < O(log_2n )< O(n) < O(nlog_2 n) < O(n^2) < O(n^3) < O(2^n) < O(!n) < O(n^n) O(1)<O(log2n)<O(n)<O(nlog2n)<O(n2)<O(n3)<O(2n)<O(!n)<O(nn)
计算空间复杂度时可以按照以下步骤进行:

  1. 确定变量空间:找出算法中占用空间的变量,包括输入、输出等。
  2. 计算变量空间大小:分析代码执行过程中的变量空间使用情况,确定每个变量占用的空间大小。
  3. 求空间复杂度:求出所有变量空间大小的和,得到空间复杂度。

参考资料

  • 《王道数据结构》
  • 《数据结构 C语言版》第二版 严蔚敏

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

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

相关文章

华为OD机试真题 Java 实现【数字游戏】【2023 B卷 100分】,附详细解题思路

TOC 华为OD机试 2023B卷题库疯狂收录中&#xff0c;刷题点这里 专栏导读 本专栏收录于《华为OD机试&#xff08;JAVA&#xff09;真题&#xff08;A卷B卷&#xff09;》。 刷的越多&#xff0c;抽中的概率越大&#xff0c;每一题都有详细的答题思路、详细的代码注释、样例测试…

操作系统练习:进程间通信(共享内存方式)

说明 本文是《操作系统概念(第九版)》3.4节“进程间通信”的练习。 进程间通信主要由两种模型&#xff1a; 共享内存消息传递 本文使用共享内存的方式实现进程间的通信 创建消息生产者 创建生产者的主要操作包括&#xff1a; 定义共享内存的大小、名称&#xff0c;以及通…

SJA1000的简单调试

文章目录 基本过程SJA1000波特率计算公式验收滤波器使用其他关于CLKOUT测试寄存器初始化过程中会产生中断扩展帧、标准帧的区分计算器 基本过程 SJA1000的接口连接到FPGA上&#xff0c;采用软核进行CAN数据的收发。调试花了1天多的时间&#xff0c;有点波折&#xff0c;下面按…

最新版edge浏览器中安装xpath插件

最近在跟着尚硅谷进行爬虫的学习&#xff0c;老师给出了在谷歌浏览器安装Xpath插件的方法&#xff0c;由于电脑上面未安装谷歌浏览器&#xff0c;所以在网上搜索了在edge上安装Xpath插件的方法&#xff0c;安装完成以后发现使用快捷键 CTRL SHIFTX不能够打开&#xff0c;以为是…

[java安全]CommonsCollections2

文章目录 【java安全】CommonsCollections2前言Commons-Collections4版本中能否调用cc6等链子&#xff1f;PriorityQueue利用链PriorityQueueTransformingComparator**使用了phithon的总结&#xff1a;**POC 进阶POCPOC分析调用链 【java安全】CommonsCollections2 前言 Apac…

【Flutter问题记录】Android Studio不显示(右上角main.dart左边)设备栏

记录一下今天遇到的情况&#xff1a; 用android studio打开项目&#xff0c;我检查了&#xff0c;已经配置了flutter sdk和android sdk&#xff0c;但是右上角main.dart左边的设备栏就是不显示。 解决方法&#xff1a; 恢复如初&#xff1a;

【密码学】三、分组密码概述

分组密码 1.分组密码简介2.分组密码的基本原理2.1代换2.2扩散2.3混淆 3.分组密码的结构3.1Feistel网络3.1.1平衡Feistel网络3.1.2不平衡Feistel网络 3.2SP网络 4.分组密码的设计 分组密码算法是将输入数据划分成固定长度的组进行加密和解密的一类对称密码算法。本章主要介绍分组…

零基础深度学习——学习笔记1 (逻辑回归)

前言 因为各种各样的原因要开始学习深度学习了&#xff0c;跟着吴恩达老师的深度学习视频&#xff0c;自己总结一些知识点&#xff0c;以及学习中遇到的一些问题&#xff0c;以便记录学习轨迹以及以后复习使用&#xff0c;为了便于自己理解&#xff0c;我会将一些知识点用以个…

MySQL 中NULL和空值的区别

MySQL 中NULL和空值的区别&#xff1f; 简介NULL也就是在字段中存储NULL值&#xff0c;空值也就是字段中存储空字符(’’)。区别 1、空值不占空间&#xff0c;NULL值占空间。当字段不为NULL时&#xff0c;也可以插入空值。 2、当使用 IS NOT NULL 或者 IS NULL 时&#xff0…

了解 3DS MAX 3D摄像机跟踪设置:第 4 部分

推荐&#xff1a; NSDT场景编辑器助你快速搭建可二次开发的3D应用场景 1. 项目设置 步骤 1 打开“后效”。 打开后效果 步骤 2 转到合成>新合成以创建新合成。 将“宽度”和“高度”值分别设置为 1280 和 720。将帧速率设置为 25&#xff0c;将持续时间设置为 12 秒。单…

Jenkins发送的邮箱中没有带配置的压缩附件

【问题描述】&#xff1a;Jenkins中明明配置了邮箱发送时要带压缩附件&#xff0c;收到的邮箱中却没有附件内容 【问题定位】&#xff1a;压缩附件没有放在Jenkins工作空间下&#xff0c;所以发送的邮件并未发送附件 【解决办法】&#xff1a; 1&#xff09;把压缩附件放到J…

Scoop安装配置MySQL最详细版(含Navicat连接MySQL)

这是在DataWhale的第一次打卡文章&#xff0c;也是时隔三年再动笔&#xff0c;希望持续下去。 我没想到花费了一整天的时间来配置我的写作环境&#xff08;TyporaPicGo腾讯云oss&#xff09;&#xff0c;因为我不想我的文字局限在某个平台上&#xff0c;很被动&#xff0c;想要…

如何在小程序首页隐藏商品分类

​因为在分类页面有显示分类&#xff0c;所以有的商家希望在首页就不显示分类啦。下面就介绍一下如何在首页隐藏商品分类。 在小程序管理员后台->页面设置->首页&#xff0c;显示商品分类设置为否。设置后&#xff0c;在小程序首页商品分类就不会显示啦。注意&#xff1a…

手机word文档怎么转换成pdf?分享两种方法

手机word文档怎么转换成pdf&#xff1f;在如今信息化的时代&#xff0c;电子文档已经成为人们日常办公不可或缺的一部分。随着科技的不断进步&#xff0c;电子文档的格式也在不断发展。PDF作为电子文档的一种重要格式&#xff0c;被广泛使用。那么&#xff0c;如何将手机上的Wo…

zabbix通过JMX监控tomcat

目录 1&#xff09;配置java网关 2&#xff09;修改tomcat 3&#xff09;修改tomcat启动脚本 4&#xff09;启动tomcat 5&#xff09;Zabbix-web端配置——添加JMX信息 6&#xff09;导入模板​编辑 7&#xff09; 为server.zabbix.com添加模板 8&#xff09;图形如下 9&…

SAP从放弃到入门系列之-5种库存转储测试

​前段时间发了小蜘蛛同学写的《STO 库存转储总结》这篇文章&#xff0c;一直没发测试的示例&#xff0c;4年前写的文章了&#xff0c;今天才从草稿箱翻出来。 文章目录导航 一、Plant to plant 1 step二、Plant to plant 2 steps中转库存&#xff08;Stock In Transfer&#…

图数据库Neo4j学习二——cypher基本语法

1命名规范 名称应以字母字符开头&#xff0c;不以数字开头&#xff0c;名称不应包含符号&#xff0c;下划线除外可以很长&#xff0c;最多65535( 2^16 - 1) 或65534字符&#xff0c;具体取决于 Neo4j 的版本名称区分大小写。:PERSON和:Person是:person三个不同的标签&#xff…

Unity进阶-ui框架学习笔记

文章目录 Unity进阶-ui框架学习笔记 Unity进阶-ui框架学习笔记 笔记来源课程&#xff1a;https://study.163.com/course/courseMain.htm?courseId1212756805&_trace_c_p_k2_8c8d7393c43b400d89ae94ab037586fc 最上面的管理层&#xff08;canvas&#xff09; using System…

数仓学习---12、数仓开发之ADS层

星光下的赶路人star的个人主页 知世故而不世故 是善良的成熟 文章目录 1、数仓开发之ADS层1.1 流量主题1.1.1 各渠道流量统计1.1.2 路径分析 1.2 用户主题1.2.1 用户变动统计1.2.2 用户留存率1.2.3 用户新增活跃统计1.2.4 用户行为漏斗分析1.2.5 新增交易用户统计 1.3 商品主题…

Sentinel 规则持久化到 Nacos

一、Sentinel规则管理模式&#x1f349; Sentinel的控制台规则管理有三种模式&#xff1a; 原始模式&#x1f95d; 原始模式&#xff1a;控制台配置的规则直接推送到Sentinel客户端&#xff0c;也就是我们的应用。然后保存在内存中&#xff0c;服务重启则丢失 pull模式&#…