【数据结构】数据结构基础概念

系列文章目录

第一章:【数据结构】数据结构基础概念


文章目录

  • 系列文章目录
  • 前言
  • 简介
  • 名词解释
    • 数据
    • 数据元素
    • 数据项
    • 数据对象
    • 数据结构
    • 数据类型
    • 抽象
    • 抽象数据类型
    • 算法
    • 算法设计要求
  • 总结


前言

数据结构是软件编程的基础,是程序员的基本功。

简介

数据结构是一门研究非数值计算的程序设计问题中的操作对象,以及他们之间的关系和操作等相关问题的学科。
【程序设计 = 数据结构 + 算法】

名词解释

数据

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

符号必须具备的两个前提:

  • 可以输入到计算机中
  • 能被计算机程序处理

数据元素

是组成数据的,有一定意义的基本单位,在计算机中通常作为整体处理,也被称为记录。

数据项

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

数据对象

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

数据结构

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

类型说明
逻辑结构指数据对象中数据元素之间的相互关系
集合结构集合结构中的数据元素除了同属于一个集合外,他们之间没有其他关系
线性结构线性结构中的数据元素之间是一对一的关系
树形结构树形结构中的数据元素之间存在一对多的层次关系
图形结构图形结构的数据元素是多对多的关系
物理结构是指数据的逻辑结构在计算机中的存储形式
顺序存储结构是把数据元素存放在地址连续的存储单元里,其数据间的逻辑关系和物理关系是一致的
链式存储结构是把数据元素存放在任意的存储单元里,这组存储单元可以是连续的,也可以是不连续的,需要一个指针存放数据元素的地址来反映其逻辑关系

数据类型

是指一组性质相同的值的集合及定义在此集合上的一些操作的总称。
类型用来说明变量或表达式的取值范围和所能进行的操作。

按照取值的不同,分为两类:

  • 原子类型:是不可以再分解的基本类型,包括整数。实型(就是小数),字符型等。
  • 结构类型:由若干个类型组合而成,是可以再分解的,例如整型数组是由若干整型数据组成的。

抽象

指取出事物具有的普遍性的本质,“抽象”的意义在于数据类型的数学抽象特性。

抽象数据类型

指一个数学模型及定义在模型上的一组操作,体现了程序设计中问题分解、抽象和信息隐藏的特性。
(我们对已有的数据类型进行抽象,就有了抽象数据类型)

算法

是解决特定问题求解步骤的描述,在计算机中表现为指令的有限序列,并且每条指令表示一个或多个操作。
算法的五个特性:

  • 输入、输出、有穷性、确定性、可行性
  • 输入:算法具有零个或多个输入(可以是没有输入的,比如你打印个hello world的代码)
  • 输出:算法至少有一个或多个输出
  • 有穷性:指算法在执行有限的步骤之后,自动结束而不会出现无限循环,并且每一个步骤在可接受的时间内完成
  • 确定性:算法的每一步骤都具有明确的含义,不会出现二义性(在相同的条件下只有一条执行路径,相同的输入只有唯一的输出结果)
  • 可行性:算法的每一步都必须是可行的,也就是说,每一步都能够通过执行有限次数完成

算法设计要求

  • 正确性:

    算法至少应该具有输入、输出和加工处理无歧义性、能正确反映问题的需求、能够得到问题的正确答案

    分为4个层次:

    1. 算法程序没有语法错误
    2. 算法程序对于合法的输入数据能够产生满足要求的输出结果
    3. 算法程序对于非法的输入数据能够得出满足规格说明的结果(大多时候的要求标准)
    4. 算法程序对于精心选择的,甚至刁难的测试数据都能有满足要求的输出结果
  • 可读性

    算法设计的另一目的是为了便于阅读、理解和交流

  • 健壮性
    输入数据不合法时,算法也能做出相关处理,而不是产生异常或莫名其妙的结果

  • 时间效率高和存储量低

    时间效率高是指算法的执行时间短,存储量指算法在执行过程中需要的最大存储空间,主要指内存和硬盘空间

    • 算法效率的度量方法
      • 事后统计方法

        主要是通过设计好的测试仪程序和数据,利用计算机计时器对不同算法编制的程序的运行时间进行比较,确定效率高低。

        由于有以下缺点,该方法基本不予考虑

        1. 必须要花大量时间来编写测试程序
        2. 受计算机硬件和软件等环境因素影响太大,杂音太多,结果准确性不高
        3. 测试数据设计苦难, 和测试数据规模也有很大关系
      • 事前分析估算方法

        在计算机程序编制前,依据统计方法对算法进行估算。

        程序运行时间决定因素有以下几点

        1. 算法采用的策略、方法
        2. 编译产生的代码质量
        3. 问题的输入规模
        4. 机器执行指令的速度

        抛开与计算机软硬件的因素,一个程序的运行时间依赖于算法的好坏和问题的输入规模(输入量大小)。

        最终,在分析程序的运行时间时,最重要的是把程序看成是独立于程序设计语言的算法或一系列步骤。

      • 渐进增长:

        给定两个函数f(n)和g(n),如果存在一个整数N,使得对于所有的 n > N,f(n)总是比g(n)大,那么我们说f(n)的增长渐进快于g(n)。

        判断一个算法的好坏时,例如 3n+1,2n2,2n2+3n+1, n3+1:

        1. 可以忽略加法常数
        2. 与最高次项相乘的常数不重要
        3. 函数中的常数和其他次要项常常可以忽略,而更应该关注主项(最高阶项)的阶数
      • 算法时间复杂度

        在进行算法分析时,语句总的执行次数T(n)是关于问题规模n的函数,进而分析T(n)随n的变化情况并确定T(n)的数量级。

        算法的时间复杂度,也就是算法的时间度量,记作:T(n) = O(f(n))。

        他表示随问题规模n的增大,算法执行时间的增长率和f(n)的增长率相同,称作算法的渐进时间复杂度,简称为时间复杂度,其中f(n)是问题规模n的某个函数。

        • 推导大O阶(O(fn))

          1. 用常数1取代运行时间中的所有加法常数
          2. 在修改后的运行次数函数中,只保留最高阶项
          3. 如果最高阶项存在且不是1,则去除与整个项相乘的常数

          得到的结果就是大O阶,分为常数阶O(1),线性阶O(n),对数阶O(logn),平方阶O(n2)等

        • 最坏情况与平均情况

          最坏情况运行时间是一种保证,那就是运行时间将不会再坏了。

          在应用中,这是一种最重要的需求。通常,除非特别指定,我们提到的运行时间都是最坏情况的运行时间。

          平均运行时间时所有情况中最有意义的,因为它是期望的运行时间,但现实情况中。很难获取平均时间。

        • 算法空间复杂度

          现实中完全可以通过空间来换取时间,例如一个本来需要每次计算n次的结果,先把所有的情况都保存下来,然后根据输入去查找对应结果,就从O(n)变为了O(1)。

          S(n) = O(f(n)),通常说的算法复杂度指时间复杂度

总结

本文简单介绍了学习数据结构的一些基础知识,下一章开始进入第一个具体的数据结构:线性表

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

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

相关文章

[架构之路-229]:计算机体硬件与系结构 - 计算机系统的矩阵知识体系结构

目录 一、纵向:目标系统的分层结构 1.1 目标系统的架构 1.2 网络协议栈 1.3 计算机程序语言分层 二、横向(构建目标系统的时间、开发阶段):软件工程 三、二维矩阵知识体系结构 一、纵向:目标系统的分层结构 1.1…

关于字符拼接

当然,以下是加入了幽默注释的代码和对应的逻辑树: # 提示用户输入input和txt内容,期待用户真有输入 input_text input("请输入input文本:") # 好了,快点输入吧 txt_text input("请输入txt文本&#…

软件工程第四周

模型建立的基本理念 模型是对现实世界复杂系统的简化和抽象,目的是为了更好地理解、分析和预测系统的行为。它能够真实反映研究对象的整体结构 or 某一侧面(功能、反应)的本质特征和变化规律。可以建立不同的子模型用于反应系统不同的侧面。同…

DP读书:《openEuler操作系统》(四)鲲鹏处理器

鲲鹏处理器 一、处理器概述1.Soc2.Chip3.DIE4.Cluster5.Core 二、体系架构1.计算子系统2.存储子系统3.其他子系统 三、CPU编程模型1.中断与异常2.异常级别a.基本概念b.异常级别切换 下面为整理的内容:鲲鹏处理器 架构与编程(一)处理器与服务器…

Leetcode290. 单词规律

给定一种规律 pattern 和一个字符串 s ,判断 s 是否遵循相同的规律。 这里的 遵循 指完全匹配,例如, pattern 里的每个字母和字符串 s 中的每个非空单词之间存在着双向连接的对应规律。 解题思路:哈希 力扣(LeetCode&…

MIT 6.S081学习笔记(第二章)

〇、前言 本文主要完成MIT 6.S081 实验二:system call 一、Using gdb (easy) Question requirements In many cases, print statements will be sufficient to debug your kernel, but sometimes being able to single step through some assembly code or inspe…

【C++】运算符重载 ⑤ ( 一元运算符重载 | 使用 成员函数 实现 前置 ++ 自增运算符重载 | 使用 成员函数 实现 前置 - - 自减运算符重载 )

文章目录 一、一元运算符重载1、使用 成员函数 实现 前置 自增运算符重载2、使用 成员函数 实现 前置 - - 自减运算符重载 二、完整代码示例 一、一元运算符重载 1、使用 成员函数 实现 前置 自增运算符重载 使用 全局函数 实现 前置 自增运算符重载 : 首先 , 写出函数名 ,…

Java数据结构————优先级队列(堆)

一 、 优先级队列 有些情况下,操作的数据可能带有优先级, 一般出队列时,可能需要优先级高的元素先出队列。 数据结构应该提供两个最基本的操作, 一个是返回最高优先级对象, 一个是添加新的对象。 这种数据结构就是优…

[架构之路-228]:计算机硬件与体系结构 - 硬盘存储结构原理:如何表征0和1,即如何存储0和1,如何读数据,如何写数据(修改数据)

目录 前言: 一、磁盘的盘面组成 1.1 磁盘是什么 ​编辑1.2 磁盘存储介质 1.3 磁盘数据的组织 1.3.1 分层组织:盘面号 1.3.2 扇区和磁道 1.3.3 数据 1.3.4 磁盘数据0和1的存储方式 1.3.5 磁盘数据0和1的修正方法 1.3.6 磁盘数据0和1的读 二、…

(四)正点原子STM32MP135移植——u-boot移植

一、概述 u-boot概述就不概述了,u-boot、kernel、dtb三件套,dddd 经过国庆艰苦奋战,已经成功把所有功能移植好了 二、编译官方代码 进入u-boot的目录 2.1 解压源码、打补丁 /* 解压源码 */ tar xf u-boot-stm32mp-v2022.10-stm32mp-r1-r0.…

mysql双主双从读写分离

架构图: 详细内容参考: 结果展示: 178.119.30.16(从)- master 178.119.30.17(从)- slave 由上述结果可以看出,产生了主备节点同时抢占VIP的问题(即脑裂问题&#xff09…

React18入门(第二篇)——React18+Ts项目配置husky、eslint、pretttier、commitLint

前言 我的项目版本如下: React: V18.2.0Node.js: V16.14.0TypeScript:最新版工具: VsCode 本文将采用图文详解的方式,手把手带你快速完成在React项目中配置husky、prettier、commitLint,实现编码规范的统…

nodejs+vue养老人员活体鉴权服务系统elementui

系统 统计数据:统计报表、人员台账、机构数据、上报数据、核验报表等,养老人员活体鉴权服务是目前国家养老人员管理的重要环节,主要为以养老机构中养老人员信息为基础,每月进行活体鉴权识别并统计数据为养老补助等管理。前端功能&…

使用正则表达式批量修改函数

贪心匹配,替换中的$1代表括号中的第一组。 使用[\s\S\r]代表所有字符,同时加个问号代表不贪心匹配:

springboot学生管理系统

采用技术:springbootvue 项目亲测可以完美运行

MySql运维篇---008:日志:错误日志、二进制日志、查询日志、慢查询日志,主从复制:概述 虚拟机更改ip注意事项、原理、搭建步骤

1. 日志 1.1 错误日志 错误日志是 MySQL 中最重要的日志之一,它记录了当 mysqld 启动和停止时,以及服务器在运行过程中发生任何严重错误时的相关信息。当数据库出现任何故障导致无法正常使用时,建议首先查看此日志。 该日志是默认开启的&a…

竞赛 机器视觉 opencv 深度学习 驾驶人脸疲劳检测系统 -python

文章目录 0 前言1 课题背景2 Dlib人脸识别2.1 简介2.2 Dlib优点2.3 相关代码2.4 人脸数据库2.5 人脸录入加识别效果 3 疲劳检测算法3.1 眼睛检测算法3.2 打哈欠检测算法3.3 点头检测算法 4 PyQt54.1 简介4.2相关界面代码 5 最后 0 前言 🔥 优质竞赛项目系列&#x…

【数据结构】抽象数据类型

🦄个人主页:修修修也 🎏所属专栏:数据结构 ⚙️操作环境:Visual Studio 2022 目录 🎏数据类型 🎏抽象数据类型 结语 🎏数据类型 数据类型:是指一组性质相同的值的集合及定义在此集合上的一些操作的总称. 数据类型(d…

集合原理简记

HashMap 无论在构造函数是否指定数组长度&#xff0c;进行的都是延迟初始化 构造函数作用&#xff1a; 阈值&#xff1a;threshold&#xff0c;每次<<1 &#xff0c;数组长度 负载因子 无参构造&#xff1a;设置默认的负载因子 有参&#xff1a;可以指定初始容量或…

三、thymeleaf基本语法

3.1、基本语法 3.1.1变量表达式&#xff1a;${...} 变量表达式用于在页面中输出指定的内容&#xff0c;此内容可以是变量&#xff0c;可以是集合的元素&#xff0c;也可以是对象的属性。主要用于填充标签的属性值&#xff0c;标签内的文本&#xff0c;以及页面中js变量的值等…