数据结构第0章 初识

news2024/11/16 11:32:57

名人说:莫听穿林打叶声,何妨吟啸且徐行。—— 苏轼《定风波·莫听穿林打叶声》
本篇笔记整理:Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder😊)

目录

    • 0、思维导图
    • 1、数据结构
      • 1)数据结构是什么?
      • 2)算法是什么?
    • 2、数据结构三要素
      • 1)逻辑结构
        • 1️⃣线性结构(“一对一关系”)
        • 2️⃣非线性结构(“一对多或多对多”)
      • 2)存储(物理)结构
    • 3、算法与评价
      • 1)算法的特性
      • 2)算法效率如何评价?

0、思维导图

在这里插入图片描述

1、数据结构

1)数据结构是什么?

1️⃣数据结构

数据结构是指一组数据元素的组织方式。数据结构为计算机提供了一种高效、有序且灵活的方式来组织和处理数据。

2️⃣数据结构的作用

决定了数据元素之间的逻辑关系和物理存储结构。

  • 合适的数据结构可以大幅提高数据处理的效率。例如,哈希表可以实现快速的数据查找,而平衡树结构如红黑树可以高效地维护有序数据。
  • 许多高级算法(如图算法、排序算法)都依赖于特定的数据结构,以确保算法的高效执行。

2)算法是什么?

1️⃣算法

算法是指解决特定问题的一系列有限的步骤

2️⃣算法的作用

算法指导如何有效地在数据结构上执行操作和处理数据,确保高效、优化的数据管理和问题解决。

3)数据结构与算法之间的关系
可以从以下两个角度来理解:
① 数据结构是要处理的信息,而算法则是处理信息的步骤。
② 数据结构是算法的基础,算法是数据结构的实际应用。

2、数据结构三要素

1)逻辑结构

逻辑结构:数据对象中数据元素之间的逻辑关系

1️⃣线性结构(“一对一关系”)

在这里插入图片描述
①顺序表/链表

由零个或多个数据元素组成的有限序列。序列中第一个元素没有前驱,最后一个元素没有后继,其余每个元素有且只有一个前驱和一个后继。

②栈

仅在表尾进行插入或删除操作的线性表。
特性:后进先出(Last In First Out,LIFO)。

③队列
只允许在一端进行插入操作,在另一端进行删除操作的线性表。
特性:先进先出(First In First Out,FIFO)。

④串
由零个或多个字符组成的有限序列,通常用于表示文本。

2️⃣非线性结构(“一对多或多对多”)

在这里插入图片描述

①集合

集合是一组不重复元素的结构。它不关心元素的顺序,只关心是否存在某个元素。集合通常用于表示一组唯一项,如字典中的单词或数据库中的用户ID。

②树形结构(“一对多”)

树形结构是一种分层数据结构,其中每个元素称为节点。在树形结构中,除了顶部的节点(根节点)外,每个节点都有一个父节点,并可能有多个子节点。


  • 在这里插入图片描述

    一种基本的树形结构,其中每个节点可以有任意数量的子节点。树通常用于表示层次结构,如文件系统中的文件和目录

  • 二叉树

    一种特殊类型的树,其中每个节点最多有两个子节点,通常称为左子树和右子树。二叉树广泛应用,特别是在搜索和排序算法中。

③图形结构(“多对多”)

  • 有向图
    在这里插入图片描述

    边是有方向的(也有称为"弧"的),从一个节点指向另一个节点。关系是单向的。用于表示具有方向性的关系,如城市之间的行驶路线

  • 无向图
    在这里插入图片描述

    边没有方向,即关系是双向的或无向的。无向图用于表示双向或无特定方向的关系,如社交关系中的朋友关系

2)存储(物理)结构

指的是数据元素在存储空间中的存储方式。

  • ①顺序存储

    • 常适用于线性结构

      • 数组、线性表、栈、队列
    • 优缺点

      • a.优点

        • 可以随机访问,访问速度快

        • 存储密度大

      • b.缺点

        • 内存空间的利用率比较低

        • 插入和删除要移动大量元素,效率低

  • ②链式存储

    • 适用于线性和非线性结构

      • 线性:链表、栈、队列

      • 非线性:树、图

    • 优缺点

      • a.优点

        • 内存空间利用率高

        • 插入或删除方便,效率高

      • b.缺点

        • 不能随机访问任意元素

        • 不支持下标访问元素

        • 需要用额外的空间来表达数据之间的逻辑关系

        • 访问元素需从头结点开始遍历整个链表,访问速度较慢。

  • ③索引存储

    • 适用于线性和非线性

      • 线性:顺序表、串

      • 非线性:树、图

    • 优缺点

      • a.优点

        • 可以快速查找数据元素

        • 检索速度快

      • b.缺点

        • 存储空间的开销大

        • 在插入和删除数据时要修改索引表,花费时间较多

  • ④散列存储

    • 适用于线性结构和非线性结构

      • 线性:散列表、集合

      • 非线性:树、图

    • 优缺点

      • a.优点

        • 查找、插入、删除操作都很快
      • b.缺点

        • 不支持排序,一般比用线性表存储需要更多的空间

        • 记录的关键字不能重复

        • 可能产生散列冲突

3、算法与评价

1)算法的特性

有穷性(Finiteness)

  • 定义:算法必须在执行有限步骤后终止,不能无限循环,并且每一步骤都必须在有限时间内完成。
  • 作用:保证了算法最终会得到结果,不会陷入永无止境的执行过程中。

确定性(Definiteness)

  • 定义:算法的每一步骤都具有确切的定义,不会出现任何模糊或二义性,同一输入条件下,算法的执行过程和结果都是可预测的
  • 作用:确保了算法的行为是可以预测的,每次执行都会产生相同的结果。

可行性(Effectiveness)

  • 定义:算法中的每一步都必须是基本操作,即它们都可以在有限时间内精确地完成。
  • 作用:确保了算法的每一步都是实际可执行的,而不是抽象或理论上的。

输入(Input)

  • 定义:一个算法有零个或多个输入,这些输入取自于特定的对象集合。
  • 作用输入提供了算法处理的数据,它是算法开始执行的前提。

输出(Output)

  • 定义:算法有一个或多个输出,这些输出是与输入明显区分的特定数量的数据。
  • 作用输出是算法处理后的结果,它是衡量算法有效性的关键指标。

这些特性共同定义了算法的本质,保证了算法能够有效、可靠地解决问题。

2)算法效率如何评价?

①时间复杂度O(n)

时间复杂度(Time Complexity)是一个算法在处理数据时所消耗时间的量度。它通常表示为算法执行步骤数量与输入数据大小之间的关系。

时间复杂度通常用大写字母 “O” 表示。例如:

  • O ( 1 ) O(1) O(1):常数时间复杂度,表示算法执行时间不随输入数据大小变化。
  • O ( n ) O(n) O(n):线性时间复杂度,算法执行时间与输入数据大小成正比。
  • O ( n 2 ) O(n^2) O(n2):二次时间复杂度,执行时间与输入数据大小的平方成正比。
  • O ( log ⁡ n ) O(\log n) O(logn):对数时间复杂度,执行时间与输入数据大小的对数成正比。
  • O ( n log ⁡ n ) O(n\log n) O(nlogn):线性对数时间复杂度,常见于某些高效的排序算法。

例如,一个简单的循环从1遍历到n(n是输入大小)的算法具有 O ( n ) O(n) O(n) 的时间复杂度,而一个嵌套循环(每个循环都从1遍历到n)的算法具有 O ( n 2 ) O(n^2) O(n2) 的时间复杂度。

遇到一些循环时,求解时间复杂度的思路:

  • 单层循环求解方案:设执行次数为 t 去求解

  • 多层循环求解方案:分析循环之间的关系,之后用求和公式求解

②空间复杂度

空间复杂度(Space Complexity)是衡量算法执行过程中所需内存大小的一个指标。与时间复杂度类似,它描述的是算法对存储空间需求与输入数据大小之间的关系

空间复杂度可以帮助我们理解一个算法在执行过程中需要占用多少内存资源。

上述内容笔记部分图片来源网络,侵删。
Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder)
点赞加关注,收藏不迷路!本篇文章对你有帮助的话,还请多多点赞支持!

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

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

相关文章

如何取消ChatGPT Plus 订阅服务,不取消订阅有什么影响?取消了又如何再次订阅

一、前言 很多小伙伴给我反馈说自己不会取消chatgpt的plus订阅,今天就来给大家分享一下如何取消ChatGPTPlus订阅 ChatGPTplus快速订阅升级方法 二、不取消订阅有什么影响? 1、账号被风控(有些可以使用3.5但是不能在升级4.0) …

【Java】云HIS云计算医院信息平台源码

云HIS系统可实现“云部署”,即可实现在云计算下的多种部署模式。系统采用SaaS服务模式的新驱动,功能设计充分合理,界面布局合理美观,每个用户可具有个性化工作台。 一、系统特色 使用简易化 即开即用,快速复制&#…

前端实现websocket类封装

随着Web应用程序的发展,越来越多的人开始利用Websocket技术来构建实时应用程序。Websocket是一种在客户端和服务器之间建立持久连接的协议。这种协议可以在一个单独的连接上实现双向通信。与HTTP请求-响应模型不同,Websocket允许服务器自主地向客户端发送…

Flutter配置Android和IOS允许http访问

默认情况下,Android和IOS只支持对https的访问,如果需要访问不安全的连接,也就是http,需要做以下配置。 Android 在res目录下的xml目录中(如果不存在,先创建xml目录),创建一个xml文件network_security_con…

八股文打卡day12——计算机网络(12)

面试题:HTTPS的工作原理?HTTPS是怎么建立连接的? 我的回答: 1.客户端向服务器发起请求,请求建立连接。 2.服务器收到请求之后,向客户端发送其SSL证书,这个证书包含服务器的公钥和一些其他信息…

Codeforces Round 917 (Div. 2)更新中...

A.Least Product(思维) 题意: 给出一个数组 a 1 , a 2 , . . . , a n a_1, a_2, ..., a_n a1​,a2​,...,an​,你可以进行若干次以下操作: 选择数组中的一个元素 a i a_i ai​,将这个数字修改为 0 ∼ a i 0 \sim a_i 0∼ai​之…

《Spring Cloud学习笔记:微服务保护Sentinel》

Review 解决了服务拆分之后的服务治理问题:Nacos解决了服务治理问题OpenFeign解决了服务之间的远程调用问题网关与前端进行交互,基于网关的过滤器解决了登录校验的问题 流量控制:避免因为突发流量而导致的服务宕机。 隔离和降级&#xff1a…

XIAO ESP32S3之物体检测加入视频流

一、前言 由于XIAO ESP32S3开发套件没有显示屏配件,因此加入http视频流功能,可通过浏览器请求ESP32S3上的视频流。 二、思路 1、XIAO ESP32S3启动后通过wifi连接到AP; 2、启动http服务器,注册get_mjpeg处理函数; 3…

判断电话号码是否重复-excel

有时候重复的数据不需要或者很烦人,就需要采取措施,希望以下的方法能帮到你。 1.判断是否重复 方法一: 1)针对第一个单元格输入等号,以及公式countif(查找记录数的范围,需要查找的单元格) 2…

Linux:不同计算机使用NFS共享资源

一,安装NFS文件系统 NFS即网络文件系统(network file system),它允许网络中的计算机之间通过网络共享资源。目前,NFS只用于在Linux和UNIX主机间共享文件系统。 #使用mount命令可以将远程主机的文件系统 安装到 本地: #将远程主机…

2.3_3 进程互斥的硬件实现办法

2.3_3 进程互斥的硬件实现办法 1.中断屏蔽方法 利用“开/关中断指令”实现(与原语的实现思想相同,即在某进程开始访问临界区到结束访问为止都不允许被中断,也就不能发生进程切换,因此也不可能发生两个同时访问临界区的情况) 优点:简单、高效…

浏览器Post请求出现413 Request Entity Too Large (Nginx)

环境 操作系统 window server 2016 前端项目 Vue2 Nginx-1.25.3 一、错误信息 前端是vue项目,打包后部署在Nginx上,前端post请求出现Request Entity Too Large错误信息。 ​这种问题一般是请求实体太大(包含参数,文件等&#xf…

是德科技E9304A功率传感器

是德科技E9304A二极管功率传感器测量频率范围为9 kHz至6 GHz的平均功率,功率范围为-60至20 dBm。该传感器非常适合甚低频(VLF)功率测量。E系列E9304A功率传感器有两个独立的测量路径,设计用于EPM系列功率计。功率计自动选择合适的功率电平路径。为了避免…

HTML制作暴雨特效

🎀效果展示 🎀代码展示 <body> <!-- partial:index.partial.html --> <canvas id="canvas-club">

c语言结构体(初阶)

1. 结构体的声明 1.1 结构体的基础知识 结构是一些值的集合&#xff0c;这些值被称为成员变量。结构的每个成员可以是不同类型的变量。 1.2 结构的声明 struct tag {member - list; }variable-list; 例&#xff1a;描述一个人的信息&#xff1a;名字电话性别身高 //声明的…

如何利用ChatGPT处理文本、论文写作、AI绘图、文献查阅、PPT编辑、编程等

无论是进行代码生成、错误调试还是解决编程难题&#xff0c;ChatGPT都能为您提供实用且高质量的建议和指导&#xff0c;提高编程效率和准确性。此外&#xff0c;ChatGPT是一位出色的合作伙伴&#xff0c;可以为您提供论文写作的支持。它可以为您提供论文结构指导、段落重组建议…

LabVIEW快速入门

参考&#xff1a; 知乎labview快捷键 https://www.zhihu.com/question/287709225github 上 LabVIEW教程 https://lv.qizhen.xyz/LabVIEW 参考书籍 链接&#xff1a;https://pan.baidu.com/s/1irc0iftM0Gg3GCN2cBHCKw?pwdy1mz 提取码&#xff1a;y1mz --来自百度网盘超级会员V…

.NET 使用Camunda快速入门

一.工作流介绍 1. 什么是工作流 工作流&#xff08;Workflow&#xff09;&#xff0c;是对工作流程及其各操作步骤之间业务规则的抽象、概括描述。 工作流将一套大的业务逻辑分解成业务逻辑段&#xff0c; 并统一控制这些业务逻辑段的执行条件&#xff0c;执行顺序以及相互通…

【双系统】Windows10+Ubuntu22.04安装全过程以及安装后的配置

文章目录 0 背景0.1 电脑配置0.2 电脑磁盘的初始情况 1 准备空闲的磁盘1.1 文件整理1.2 压缩卷和扩展卷的操作 2 准备系统启动盘3 设置电脑的模式&#xff08;未验证&#xff09;并进入Ubuntu安装4 安装Ubuntu5 Ubuntu的配置6 其他 0 背景 之前一直在虚拟机上使用Ubuntu系统&am…

CentOS 5/6/7 基于开源项目制作openssh 9.6p1 rpm包—— 筑梦之路

背景介绍 开源项目地址&#xff1a;https://github.com/boypt/openssh-rpms.git 该项目主要支持了centos 5 、6、7版本&#xff0c;针对使用了比较老的操作系统进行openssh安全加固&#xff0c;还是不错的项目&#xff0c;使用简单、一件制作&#xff0c;欢迎大家去支持作者。…