数据结构【绪论】

数据结构入门级

第一章绪论

什么是数据结构?什么是数据类型?

程序=数据结构+算法

在这里插入图片描述

一、基本概念:

  1. 数据:指所有能被计算机处理的,无论图、文字、符号等。
  2. 数据元素数据的基本单位,通常作为整体考虑;由若干个数据项组成(数据项是数据最小的单位)。
  3. 数据对象:是性质相同的数据元素的集合,数据的一个子集。(int类型、char类型...)

在这里插入图片描述

二、数据结构(三要素):

  1. 逻辑结构:指数据之间逻辑关系得整体,对数据之间关系的描述,与数据存储结构无关,与数据元素本身的内容和形式无关。
    • 集合:结构中数据元素除了“同属于一个集合”外,无其他关系;
    • 线性结构:元素都是一对一的关系;
    • 树形结构:元素存在一对多的关系;
    • 网状或图状结构:元素存在多对多的关系。
  • 存储结构(物理结构):描述数据具体在内存中的存储,可以理解为计算机的硬件设备,看得见摸得着;
    • 顺序存储:把逻辑上相邻的结点存储在物理位置上相邻的存储单位中,一般借助计算机程序设计语言(C/C++中的数组)来描述的;
    • 链式存储:不要求在逻辑位置相邻的结点在物理位置也相邻,结点之间的逻辑关系是用附加的指针(指向内存地址的工具)字段表示的(C/C++中的指针类型)。
    • 索引存储:建立附加索引表来标识结点地址;
      • 索引项形式<关键字,地址>,关键字:标识唯一一个结点;地址:指向结点的指针。
    • 散列存储:根据结点的关键字通过散列函数直接计算出该结点的存储地址,顺序存储的扩展。
  • 数据运算:增删改查,建立和消除。 (数组没有插入和删除)
  • PS:对于两种不同的数据结构来说,它们的物理结构和物理结构完全由可能相同,数据的运算不相同即可。

    三、算法与算法的评价

    1. 概念:算法是由基本运算及规定的运算顺序所构成的完成的解题步骤,是按照要求设计好的有限的确切的序列,简单来说就是问题求解步骤的描述。
    2. 算法的五个特性:
      • 有穷性:算法在执行有限的步骤(在可接受的时间内完成)之后,自动结束,不会出现无限循环;
      • 确定性:算法每一步具有确定的含义,不会出现二义性
      • 可行性:算法中描述的操作都是通过已实现的基本运算执行有限次来实现。
      • 输入:一个算法有个或个输入;
      • 输出个或个输出。
    3. 好算法的标准:
      • 正确性:应满足具体问题的需求;
      • 可读性:应容易阅读和交流,有助于理解和修改算法;
      • 健壮性:具有容错处理;
      • 通用性:具有一般性,对一般的数据集合都成立。
    4. 算法的设计要求:
      • 事后统计法:比较不同算法对同组输入数据的运行处理时间;
        • 缺陷:为获得不同算法的运行时间必须编写相应代码,实施困难且缺陷多;
        • 优点:非常直观。
      • 事前分析估算:一句统计方法对算法效率进行估算;
        • 影响效率因素:①算法采用的策略和方法;②问题的输入规模;③编译器所产生的代码;④计算机的执行速度。
    5. 算法效率的度量:
      • 时间复杂度(渐进时间复杂度):通过算法中最基本语句执行次数得数量级来确定,常用最深层循环内的语句中的原操作的执行频度重复的次数)来表示,指问题规模。
        • 例如:for(i = 0; i < 100; i++); 循环了100次;
        • 表示时间复杂度的阶:O(1)常见时间阶;O(n)线性时间阶;O(logn)对数时间阶;O(nlogn)线性对数时间阶;
        • 定理:A(n)=aₘnᵐ+aₘ₋₁nᵐ⁺¹+....+a₁n+a₀是一个m次多项式,则A(n)=O(nᵐ);也就是只取最高次的;
        • 最坏复杂度、平均复杂度、最好时间复杂度;
        • 加法规则:T(n)=T1(n)+T2(n)=O(f(n))+O(g(n))=O(max(f(n),g(n))),也就是取最大的,并列关系;
        • 乘法规则:T(n)=T1(n)*T2(n)=O(f(n))*O(g(n))=O((f(n)*g(n))),两相乘,嵌套关系;
        • 常见:O(1)<O(log₂n)<O(nlog₂n)<O(n²)<O(n³)<O(2ⁿ)<O(n!)<O(nⁿ);
      • 空间复杂度:通过计算算法所需的存储空间实现;
        • 存储空间一般有:①指令常数变量所占的存储空间;②输入数据所占的存储空间;③辅助空间
        • 一维数组a[n]:空间复杂度O(n);
        • 二维数组a[n][m]:空间复杂度O(n*m);
      • 算法的原地工作是指所需的辅助空间,是常量O(1)。
    6. 例题1:执行以下算法的时间复杂度为:O(log₂n)
      • void fun(int n){
      • int i = 1;
      • while(i <= n)
      • i = i * 2; 假设它执行m次,那么每次就是2ᵐ;2ᵐ<=n;即m<=log₂n
      • }
    7. 递归:程序调用自身的编程技巧称为递归,它在计算机中是借助栈来实现的,可以通过简单的函数调用来完成。
      • 如计算机阶乘的定义(5! = 5 * 4! );
      • 斐波那契数列:0,1,1,2,3,5,8...它后一个数是前两个数的和;
      • 递归思想:一个数是前两个数的和;
      • 递归表达式:f(n)=n n<=1;=f(n-1)+f(n-2) n>1;
    PS:算法和结构是不同的概念。

     
    在这里插入图片描述

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

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

相关文章

快速上手Webpack打包指南:用简单的步骤掌握Webpack的使用技巧

目录 概念&#xff1a;1. webpack 打包简介1.0 多个 JS 文件打包&#xff1a;1.1 webpack 数组形式1.2 webpack 对象形式 总结 Webpack的打包过程可以总结为以下几个步骤&#xff1a; 1.入口点配置&#xff1a;在Webpack的配置文件中&#xff0c;我们需要指定一个或多个入口点…

数据接口有哪些?(数据接口有哪几种)

数据接口是指不同应用程序或系统之间交换数据的通信界面。在现代信息化社会中&#xff0c;数据接口扮演着极为重要的角色&#xff0c;它们使得不同平台之间能够相互连接和交流&#xff0c;从而实现数据共享和应用集成。 数据接口的种类繁多&#xff0c;常见的有以下几种&#…

SpringBoot开发小技巧使用(DEBUG、启动图标修改、Lombok、devtools、Spring Initializr)

目录 1. 通过DEBUG查看自动配置的组件2. springboot启动图标修改3. Lombok4. devtools5. 通过IDEA的Spring Initializr快速创建新项目 1. 通过DEBUG查看自动配置的组件 在resources/application.properties中添加如下&#xff0c;开启DEBUG功能&#xff1a; debugtrue然后启动…

SpringBoot 集成 EasyExcel 3.x 优雅实现 Excel 导入导出

介绍 EasyExcel 是一个基于 Java 的、快速、简洁、解决大文件内存溢出的 Excel 处理工具。它能让你在不用考虑性能、内存的等因素的情况下&#xff0c;快速完成 Excel 的读、写等功能。 EasyExcel文档地址&#xff1a; https://easyexcel.opensource.alibaba.com/ 快速开始 …

前后端分离windows本地nginx解决跨域

下载 http://nginx.org/en/download.html 命令 启动Nginx&#xff1a; nginx.exe start 快速停止或关闭Nginx&#xff1a; nginx.exe -s stop 正常停止或关闭Nginx&#xff1a; nginx.exe -s quit 配置文件修改重装载命令&#xff1a; nginx.exe -s reload 强制停用…

SQL调优教程

SQL调优教程 基础方法论 任何计算机应用系统性能问题最终都可以归结为 1.cpu消耗 2.内存使用 3.对磁盘&#xff0c;网络或其他I/O设备的输入/输出(I/O)操作 遇到性能问题时&#xff0c;要判断的第一点就是“在这三种资源中&#xff0c;是否有哪一种资源达到了有问题的程度”&…

Linux环境下Elasticsearch相关软件安装

Linux环境下Elasticsearch相关软件安装 本文将介绍在linux(Centos7)环境下安装Elasticsearch相关的软件。 1、安装Elasticsearch 1.1 Elasticsearch下载 首先去Elasticsearch官网下载相应版本的安装包&#xff0c;下载之后传输到linux服务器上。 官网地址&#xff1a;http…

Python采集某网站小视频内容, m3u8视频内容下载

目录标题 前言环境使用:模块使用:代码实现步骤代码展示尾语 前言 嗨喽~大家好呀&#xff0c;这里是魔王呐 ❤ ~! 环境使用: python 3.8 运行代码 pycharm 2021.2 辅助敲代码 模块使用: import requests >>> pip install requests 内置模块 你安装好python环境就…

Windows 微信更新内核(小程序框架)的指南

WMPF-PC 更新指引&#xff1a; 准备工作 1. 安装最新微信客户端&#xff08; https://dldir1.qq.com/weixin/Windows/WeChatSetup.exe &#xff09; 2. 在微信在搜索栏输入:showcmdwnd (包括前面冒号) 中输入以下代码以开启 wmpf 新内核版本(已经是现网默认&#xff0c;可以…

Spring Boot 3.x 系列【51】启动流程 | 最后阶段

有道无术,术尚可求,有术无道,止于术。 本系列Spring Boot版本3.1.0 源码地址:https://gitee.com/pearl-organization/study-spring-boot3 文章目录 1. 前言2. 执行流程2.1 打印启动完成日志2.2 发布启动完成事件2.3 调用Runner2.4 异常处理2.5 Ready 事件2.6 返回上下文1…

springboot整合log4j2

1.排除springboot本身日志 2.添加log4j2 maven没有父项目 就必须指定version!! 3.配置application.yml文件 打印sql级别为debug 4.配置log4j2.xmllogging.configclasspath:log4j2.xml logging.level.com.zhkj.shoppingdebug #mybatis-plus.mapper-locations classpath*:/mapp…

web前端开发小知识

当今互联网技术迅猛发展&#xff0c;web前端开发也成为了非常热门的职业之一。作为一个web前端开发者&#xff0c;不仅需要掌握各种前端开发技术&#xff0c;还需要了解一些小技巧和小知识。下面&#xff0c;我们将介绍一些web前端开发小知识&#xff0c;希望对你的工作有所帮助…

39. 组合总和

题目描述 给你一个 无重复元素 的整数数组 candidates 和一个目标整数 target &#xff0c;找出 candidates 中可以使数字和为目标数 target 的 所有 不同组合 &#xff0c;并以列表形式返回。你可以按 任意顺序 返回这些组合。 candidates 中的 同一个 数字可以 无限制重复被…

连续三年!瑞数信息入选Gartner《2023年中国ICT技术成熟度曲线报告》云安全代表厂商

连获殊荣 近日&#xff0c;全球权威IT研究与顾问咨询公司Gartner发布《2023年中国ICT技术成熟度曲线报告》&#xff08;Hype Cycle for ICT in China, 2023》&#xff0c;瑞数信息入选云安全领域代表厂商&#xff08;Sample Vendor&#xff09;。 这是继2021年、2022年后&…

ChatGPT API进阶调用指南

原文&#xff1a;ChatGPT API进阶调用指南 ChatGPT API 进阶调用指南 ChatGPT API 是基于 OpenAI 的 GPT模型的一个强大工具&#xff0c;可以用于构建各种对话式应用。以下是一些使用 Markdown 语法的进阶调用指南&#xff0c;以帮助您更好地利用 ChatGPT API。 设置用户角色…

vue3-vite使用amfe-flexible

1. 安装postcss-pxtorem npm install postcss-pxtorem --save-dev2. 安装lib-flexible npm i -s amfe-flexible3. 在main.js引入插件 import amfe-flexible4. 配置postcss.config.js文件 在根目录&#xff0c;和package.json同级&#xff0c;创建一个名为postcss.config.j…

Spring Security 6.x 系列【64】扩展篇之多线程支持

有道无术,术尚可求,有术无道,止于术。 本系列Spring Boot 版本 3.1.0 本系列Spring Security 版本 6.1.0 本系列Spring Authorization Server 版本 1.1.0 源码地址:https://gitee.com/pearl-organization/study-spring-security-demo 文章目录 1. 问题演示2. 解决方案:…

安装redis,适配阿里云服务器,Liunx安装redis

下载redis以及编译安装 下载redis文件 wget http://download.redis.io/releases/redis-6.0.8.tar.gz #下载redis压缩文件 tar xzf redis-6.0.8.tar.gz #解压缩 cd redis-6.0.8 make 查看是否安装了gcc编译输入gcc --version如果没有…

对比CahtGPT Bard Claude2对中文的理解

对比CahtGPT Bard Claude2对中文的理解 今天简单测试了一下目前这三个很火的模型对中文的理解能力 简单问题 鲁迅和周树人的关系 Bard CahtGPT Claude 介绍一下平凡的世界这本书 Bard CahtGPT

Java并发编程 | 创建线程的几种方式

文章目录 一、简介二、使用Thread类创建线程2.1 继承Thread类2.1.1 创建Thread子类2.1.2 重写run方法2.1.3 启动线程的方式方式一&#xff1a;创建线程对象后调用start方法方式二&#xff1a;直接使用匿名内部类创建线程对象并调用start方法 2.2 使用匿名内部类创建线程2.3 线程…