【学习笔记】数据结构(一)

基本概念和术语

在这里插入图片描述

👉数据:所有能被输入到计算机中,且被计算机处理的符号的集合;

  • 是计算机操作对象的总称;
  • 是计算机处理信息的载体;
  • 是信息的某一种特定的符号表示形式
  • 包括数值型数据、非数值型数据

👉数据元素/元素/记录/结点/顶点:数据中的一个”个体“,数据结构的基本单位

  • 数据元素的映象是 二进制位(bit)的位串

👉数据项:数据结构的最小单位,数据元素是数据项的集合,不可分割的最小单位

例如:一本书的书目信息为一个数据元素,而书目信息中的每一项(如书名、作者名等)为 一个数据项。

👉数据对象:是性质相同的数据元素的集合,是数据的一个子集

👉数据结构:带结构的数据元素的集合(结构:数据元素之间存在的一个约束关系)

例如:一维数组的次序关系:{<ai ai+1>|i = 1,2,3,4,5}

  • 逻辑结构分类

    • 线性结构

    • 树形结构

    • 图状结构

    • 集合结构

  • 形式定义 - 逻辑结构

    • 数据结构是一个二元组 Data_Structures = (D , S) D是数据元素的有限集,S是D上关系的有限集
  • 存储结构/物理结构:逻辑结构在存储器中的映象

    • 关系的映象方法 - 有序对<x,y>的表示方法:

      • 顺序映象: 以存储位置的相邻表示后继关系

        ​ 以数据元素在存储器之间一个固定的相对位置的关系来表示数据元素的关系

        ​ y的存储位置和x的存储位置之间差一个常量C,C是一个隐含值,整个存储结构只含 数据元素本身的信息

      • 链式映象: 以附加信息(指针)表示后继关系

        ​ x的存储映象是一个节点,这个节点包含了两部分信息,一部分是数据元素x的映象, 另一部分是指向后继元素的指针

      • 索引存储结构:在存储结点信息的同时,还建立附加的索引表 例如:通讯录

      • 散列存储结构:根据结点的关键字直接计算出该节点的存储地址

👉数据类型:在高级程序语言编写中,每个类型明显或隐含的规定了在程序执行期间,他的变量或表达式允许 取值的范围以及允许进行的操作;是一个值的集合和定义在此集合上的一组操作的总称

👉抽象数据类型(ADT):指一个数学模型以及定义在此数学模型上的一组操作

  • 两个特征:

    • 数据抽象 - 用ADT描述实体时,强调本质特征、所能完成实现的功能、外界使用的方法
    • 数据封装 - 实体的外部特性和内部实现细节分离,并且对外部用户隐藏其内部实现细节
  • 形式定义——抽象数据类型可用以下三元组表示

    ​ (D,S,P)

    ​ 其中, D是数据对象,S是D上的关系集, P是对D的基本操作集。

  • 定义格式

    ADT 抽象数据类型名{数据对象:<数据对象的定义>数据关系:<数据关系的定义>基本操作:<基本操作的定义>
    }ADT 抽象数据类型名数据对象、数据关系的定义用伪代码描述基本操作的定义格式:基本操作名(参数表)初始条件:<初始条件描述>操作结果: <操作结果描述>
    

在这里插入图片描述

👉算法:为了解决某类问题而规定的一个有限长的操作序列。算法是对问题求解的一种描述。

  • 特性:

    • 有穷性

      ​ 对于任意一组合法输入值,在执行有穷步骤之后一定能结束,即算法中的每个步骤都能在有限

      ​ (合理)时间内完成。

    • 确定性

      ​ 每一条指令必须有确切的含义,读者理解时不会产生二义性。

      ​ 并且对同样的输入值,在任何条件下都能得到相同的结果

    • 可行性

      ​ 算法中描述的操作都是可以通过已经实现的基本运算执行有限次来实现的。

    • 有输入 —— 有零个或多个的输入

    • 有输出 —— 有一个或多个的输出

  • 设计原则

    • 正确性

      ​ a. 程序不 含语法错误;

      ​ b. 程序对于几组输人数据能够得出满足规格说明要求的结果;

      ​ c. 程序对于精心选择的典型、苛刻而带有刁难性的几组输人数据能够得出满足规格说明要求的结 果;

      ​ d. 程序对于一切合法的输入数据都能产生满足规格说明要求的结果。

      ​ 通常以第三层意义上的正确性作为衡量一个算法是否合格的标准

    • 可读性

    • 健壮性

      ​ 输入数据非法时,应返回一个表示错误或者错误性质的值,而不是中断程序执行

    • 高效率和低存储量需求

      • 效率:算法执行时间

        • 效率衡量方法:

          • 事后统计法 - 缺点 必须执行程序、其他因素掩盖算法本质

          • 事前分析估算法

            算法运行时间 = 一个简单操作所需的时间 x 简单操作次数

        • 和算法执行时间相关的因素:(后三条与计算机硬件、软件相关)

          • 算法选用的策略
          • 问题的规模
          • 编写程序的语言
          • 编译程序产生机器代码的质量
          • 计算机执行指令的速度
        • 算法执行的时间是问题规模的函数,称之为是一个特定算法的运行工作量

        • ⭐️时间复杂度:

          ​ - 随着问题规模n的增长,算法执行时间的增长率和f(n)的增长率相同,可记作:

          T(n) = O(f(n)), 称T(n)为算法的(渐进)时间复杂度

          ​ - 算法 = 控制结构 + 原操作(固有数据类型的操作)

          ​ - 算法的执行时间 = ∑原操作(i)的执行次数 * 原操作(i)的执行时间

          ​ 原操作(i)的执行次数 - 指的是语句的频度

          ​ 算法的执行时间和原操作执行次数之和成正比

          #define _CRT_SECURE_NO_WARNINGS 1
          #include <stdio.h>
          #include <stdbool.h>void bubble_sort(int a[], int n) {//最好情况 - 只执行一次 - n-1//最坏情况 - (n-1)*n/2 - O(n^2)int i, j;bool change;int temp;for (i = n - 1, change = true; i > 0 && change; --i) {change = false;for (j = 0; j < i; ++j) {if (a[j] > a[j + 1]) {temp = a[j];a[j] = a[j + 1];a[j + 1] = temp;change = true;}}}}int main() {int a[] = { 8,7,6,5,4,3,2,1 };int size = sizeof(a) / sizeof(a[0]);bubble_sort(a, size);for (int i = 0; i < size; i++){printf("%d \n", a[i]);}return 0;
          }
          

          在这里插入图片描述

          O(1) < O(log2n) < O(n) < O(n log2n) < O(n2) < O(n3) < O(nk) < O(2n)

      • 存储量:算法执行过程中所需的最大存储空间

        • ⭐️空间复杂度

          随着问题规模n的增长,算法运行所需存储量的增长率和g(n)的增长率相同,可记作:

          S(n)= O(g(n))

          包含:输入数据所占空间、程序本身所占空间、辅助变量所占空间

          若输入数据所占空间只取决于问题本身和算法无关,只需分析辅助变量所占的额外空间 在这里插入图片描述

参考:

教材:严蔚敏《数据结构》(C语言版).pdf

视频:

https://www.bilibili.com/video/BV1nJ411V7bd?p=10&vd_source=a89593e8d33b31a56b894ca9cad33d33

https://www.bilibili.com/video/BV1Fv4y1f7T1/?p=19&spm_id_from=333.880.my_history.page.click&vd_source=a89593e8d33b31a56b894ca9cad33d33

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

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

相关文章

汇编概论和实践

一 汇编第一例 C代码 #include <stdio.h>int main() {printf("Hello, World!\n");return 0; }对应的汇编 .LC0:.string "Hello, World!"main:pushq %rbpmovq %rsp, %rbpleaq .LC0(%rip), %rdicall puts@PLTmovl $0, %eaxpopq %rbpret 二 CPU架构…

Apache Pulsar 中文社区有奖问卷调查(2024 上半年度)

Apache Pulsar 中文社区有奖问卷调查&#xff08;2024 上半年度&#xff09; &#x1f4e3; &#x1f4e3; &#x1f4e3; Hi&#xff0c;Apache Pulsar 社区的小伙伴们&#xff0c;社区 2024 上半年度的有奖问卷调查来啦&#xff01; &#x1f64c; 本次调查旨在了解用户使用 …

涂装线体智能化管理:RFID技术的典范案例

涂装线体智能化管理&#xff1a;RFID技术的典范案例 汽车涂装是汽车制造过程中极为关键的一环&#xff0c;涉及多道工序&#xff0c;如预处理、电泳、中涂、面漆等&#xff0c;每一步都需要精确控制以确保车身表面的质量和美观。传统方式下&#xff0c;车辆在不同工位间的流转依…

新火种AI|OpenAI要和苹果合作了?微软有些不高兴

作者&#xff1a;一号 编辑&#xff1a;美美 和苹果之间的合作&#xff0c;可能会称为Altman引以为傲的功绩。 根据 The Information 援引知情人士的消息&#xff0c;OpenAI 已经和苹果达成了协议&#xff0c;将在其产品中运用 OpenAI 的对话式 AI。 如果进展顺利&#xff…

SpringBoot案例,通关版

项目目录 此项目为了伙伴们可以快速入手SpringBoot项目,全网最详细的版本,每个伙伴都可以学会,这个项目每一步都会带大家做,学完后可以保证熟悉SpringBoot的开发流程项目介绍:项目使用springboot mybatis进行开发带你一起写小项目先把初始环境给你们第一步新建springboot项目返…

基于知识图谱分析贸易关系走向

基于知识图谱分析贸易关系走向 前言一、基础数据二、贸易规则三、知识图谱可视化四、完整代码 前言 知识图谱是一种用图模型来描述知识和建模世界万物之间的关联关系的技术方法。在贸易关系的分析中&#xff0c;知识图谱可以将各个国家、地区、商品、贸易政策等作为节点&#…

人脸识别模型与人类视觉识别的对比——评估人脸识别模型存在偏见是否比人类的偏见大?

1. 概述 人脸识别系统是一个几十年来一直备受关注的研究领域。而且在过去的几年中。公司和政府一直在积极引入人脸识别系统&#xff0c;并且我们看到越来越多的机会可以看到人脸识别系统。例如&#xff0c;有的系统可以随便介绍&#xff0c;如搜索特定人的图像&#xff08;图像…

Appium安装及配置(Windows环境)

在做app相关自动化测试&#xff0c;需要使用appium来做中转操作&#xff0c;下面来介绍一下appium的环境安装配置 appium官方文档&#xff1a;欢迎 - Appium Documentation 一、下载appium 下载地址&#xff1a;https://github.com/appium/appium-desktop/releases?page3 通…

网络安全岗秋招面试题及面试经验分享

Hello&#xff0c;各位小伙伴&#xff0c;我作为一名网络安全工程师曾经在秋招中斩获&#x1f51f;个offer&#x1f33c;&#xff0c;并在国内知名互联网公司任职过的职场老油条&#xff0c;希望可以将我的面试的网络安全大厂面试题和好运分享给大家~ 转眼2024年秋招又快到了金…

悬剑武器库5.04版

工具介绍 悬剑5 基于“悬剑网盘”精选工具集悬剑5“飞廉”云武器库制作。 操作系统&#xff1a;Windows 10 专业版 锁屏密码&#xff1a;secquan.org 解压密码: 圈子社区secquan.org 镜像大小&#xff1a;33.1GB 系统占用空间63.0 GB 镜像导入 下载镜像&#xff0c;文末…

TinTinLand Web3 + AI 共学月|五周上手,捕获浪潮碰撞下的无限机遇

近期&#xff0c;斯坦福大学人文x人工智能研究所&#xff08;Stanford HAI&#xff09;发布了《2024 年人工智能指数报告》&#xff08;Artificial Intelligence Index Report 2024&#xff09;&#xff0c;指出当前人工智能的发展已全面改变社会的前沿风向&#xff0c;其中据 …

使用正则表达式分割字符串

自学python如何成为大佬(目录):https://blog.csdn.net/weixin_67859959/article/details/139049996?spm1001.2014.3001.5501 split()方法用于实现根据正则表达式分割字符串&#xff0c;并以列表的形式返回。其作用同字符串对象的split()方法类似&#xff0c;所不同的就是分割…

ODBC访问达梦数据库Ubuntu18.04 x86-x64(亲测有效)

ODBC访问达梦数据库Ubuntu18.04 x86-x64 第1步&#xff1a;安装unixodbc驱动,使用下面命令。第2步&#xff1a;拷贝已经安装好的达梦数据库驱动程序第3步&#xff1a;配置ODBC必要的参数文件&#xff0c;如下图第4步&#xff1a;设置环境变量第5步&#xff1a;连接测试 说明&am…

如何 使用Cubemax配置串口1.5得停止位

title: Cubemax配置串口1.5得停止位 tags: STM32HalCubemax Cubemax里面没有这个修改停止位为1.5得 我去配置函数里面也没看见 然后我去刨基础库 发现了 1.5倍 发现 原来就是 那个寄存器的值 改成 》 0x3000 后来自己修改几笔 HAL 库里面好像也有 改之 USART_CR2_STOP_Po…

【农村电商1004】 电子商务进农村示范县名单:全面数据集等你探索!

今天给大家分享的发表在国内顶级期刊金融研究的2023年论文《农村发展电子商务能减缓资本与劳动力要素外流吗&#xff1f;——以电子商务进农村综合示范案例为例》使用到的重要数据集电子商务进农村综合示范政策县数据&#xff0c;该论文采用了双重差分法和全国县域面板数据研究…

JDK JRE JVM 三者的关系

总结&#xff1a; 1. jdk 中 的 javac 编译器将 .java 文件编译为 .class 字节码文件 &#xff08;编译&#xff09; 2. jre 执行 .class 字节码文件 &#xff08;运行&#xff09; 3. jre 通过 jvm 运行程序&#xff0c;确保程序能够在不同平台上正确执行&#xff08;实现跨平…

【Spring Cloud】微服务日志收集系统-ELK+Kafka

目录 任务背景本文相关文件资料Elasticsearch特性 LogstashKibanaELKELK的缺点引入消息中间件 ELKKafkaKafka概念 ELKKafka环境搭建1.将安装素材上传至服务器 cd /usr/local/soft2.防止Elasticsearch因虚拟内存问题启动失败3.创建镜像li/centos7-elasticsearch4.创建容器5.验证…

FOC - BLDC六步换相驱动原理

文章目录 1 . 前言2 . 电机旋转原理3 . BLDC特点4 . BLDC反电动势投影位置5 . BLDC换相时刻6 . BLDC换相注意事项7 . 小结 【全文大纲】 : https://blog.csdn.net/Engineer_LU/article/details/135149485 1 . 前言 无刷直流电机在这里区分为两种&#xff0c;一是永磁无刷直流电…

MedSAM 学习笔记(续):训练自定义数据集

1、下载官方权重 官方的预训练权重:https://dl.fbaipublicfiles.com/segment_anything/sam_vit_b_01ec64.pth 下载后保存在:work_dir/SAM/sam_vit_b_01ec64.pth 目录 2、摆放数据集 因为MedSAM 分割模型需要对3D数据集进行切片处理,也就是对nii.gz 数据处理成 npy 格式 …

掌握这三点软文营销秘诀,快速实现品牌用户增长

在信息爆炸的时代&#xff0c;品牌用户如何快速实现增长已成为每个企业发展的必经之虑。而软文营销&#xff0c;作为品牌推广中不可或缺的一环&#xff0c;也正逐渐受到越来越多企业的青睐。它与传统的硬广告相比&#xff0c;不会直接的进行产品销售&#xff0c;软文更注重与读…