数据结构第0章 初识

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

目录

    • 0、思维导图
    • 1、数据结构
      • 1)数据结构是什么?
      • 2)算法是什么?
    • 2、数据结构三要素
      • 1)逻辑结构
      • 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.hqwc.cn/news/311609.html

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

相关文章

LeetCode994腐烂的橘子(相关话题:矩阵dfs和bfs)

题目描述 在给定的 m x n 网格 grid 中,每个单元格可以有以下三个值之一: 值 0 代表空单元格;值 1 代表新鲜橘子;值 2 代表腐烂的橘子。 每分钟,腐烂的橘子 周围 4 个方向上相邻 的新鲜橘子都会腐烂。 返回 直到单…

获取Windows10系统原始安装日期

版权声明 本文原创作者:谷哥的小弟作者博客地址:http://blog.csdn.net/lfdfhl 目标 获取Windows10系统最原始的安装日期;例如:刚买电脑时安装系统的时间。 步骤 第一步,请打开PowerShell,单击Windows P…

“推荐大战:抖音vs.快手”——背后的秘密全揭晓!

大家好,我是小米,一个热衷于技术分享的小伙伴。最近在面试的时候遇到了一个非常有趣的问题,也是很多人关心的话题——字节跳动产品面试题:说一下抖音和快手的推荐策略有什么不同?今天,就让我们一起来揭开这…

使用opencv+tesseract识别图片中的表格

描述 在java环境中使用opencv和tesserac识别一个图片表格 环境:opencv和tesseract安装在linux环境下,docker将运行springboot服务 opencv和tesseract的安装和docker加载可参考之前的文章 过程 将图片进行预处理,过滤掉颜色等干扰元素 提…

我的2023年度总结(一)

在本文开始之前,先对我2023年的所为进行一些道歉: 部分工作中的客户/合作伙伴,在2023年我可能时长怠慢了您的消息。但我真不是故意的(有时可能在忙其他事情)。2024年,如有任何问题请尽可能抛过来吧。部分粉丝朋友,甚至…

【Java开发岗面试】八股文—Java框架(Spring+SpringMVC+MyBatis+SpringBoot)

声明: 背景:本人为24届双非硕校招生,已经完整经历了一次秋招,拿到了三个offer。本专题旨在分享自己的一些Java开发岗面试经验(主要是校招),包括我自己总结的八股文、算法、项目介绍、HR面和面试…

ctfshow 新手必刷菜狗杯 谜之栅栏题解记录

知识点:图片比较 拿到之后,有两个图片,直观看不出什么,尝试用工具比较。 用010editor打开其中一个,010editor的工具里面就有比较文件选项,比较两个文件,发现有一处不同。题目说栅栏&#xff0c…

基于时空的Ramsar湿地自动淹没映射利用Google Earth Engine

题目:Spatiotemporal‑based automated inundation mapping of Ramsar wetlands using Google Earth Engine 期刊:Scientific Reports 第一作者:Manish KumarGoyal 发表单位:University of Nebraska 发表日期:2023年 1. 摘要 研究背景:湿地是生态系统中最关键的组成…

如果你是这样选择项目的,那么再创业也不会成功的。2024新兴创业项目,2024普通人失业怎么创业

普通人怎么创业的?我昨天晚上吃饭的时候想了一个项目,觉得很可以,去干干怎么样?只能说死定了。没有任何数据支撑,想象出来的项目,它的成功率会非常低,因为在博概率,而且成功率不会超…

Avalonia学习(十五)-OxyPlot

今天开始继续Avalonia练习。展示一些样例,尤其是第三方库的使用。 本节:OxyPlot 1.引入OxyPlot.Avalonia 2.项目引入 在Main方法里增加OxyPlotModule.EnsureLoaded()方法调用。 public static void Main(string[] args) {OxyPlotModule.EnsureLoade…

别找了!前端那些好用的网站都在这里了!【文末送书】

🍀前言 好用的网站千千万万,如果你还发现好用的网站,欢迎在评论区中留言分享😁,赠书活动在文末哟,中奖者可以从给出的五本书中任意挑选自己喜欢的那本 文章目录 🍀前言 🍀一、渐变…

深度学习 | 注意力机制、自注意力机制

卷积神经网络的思想主要是通过卷积层对图像进行特征提取,从而达到降低计算复杂度的目的,利用的是空间特征信息;循环神级网络主要是对序列数据进行建模,利用的是时间维度的信息。 而第三种 注意力机制 网络,关注的是数据…