数据结构第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)
点赞加关注,收藏不迷路!本篇文章对你有帮助的话,还请多多点赞支持!

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

九州金榜|家庭教育高中孩子沟通小技巧,拉进亲子关系更融洽

高中是孩子由少年期逐步走向青少年也就是我们说的青春期。这个阶段孩子也是孩子压力最大的时候,不止是心理、生理方面,更是来自于学习压力,高中是孩子人生关键的三年,这三年决定孩子未来的出路。 高中是学业最为繁忙的阶段&#…

FinalShell连接虚拟机遇到的问题

在下载好VM后也安装好了虚拟机(我这里使用Centos7.5),但是当使用FinalShell连接虚拟机的时候,一直提示连接超时。。。。 后来找了半天,发现是有次校园网和VM虚拟机冲突,就把虚拟机的网络连接给关了&#x…

Ubuntu安装和配置Nextcloud并结合内网穿透实现远程访问

文章目录 摘要1. 环境搭建2. 测试局域网访问3. 内网穿透3.1 ubuntu本地安装cpolar3.2 创建隧道3.3 测试公网访问 4 配置固定http公网地址4.1 保留一个二级子域名4.1 配置固定二级子域名4.3 测试访问公网固定二级子域名 摘要 Nextcloud,它是ownCloud的一个分支,是一个文件共享服…

深入浅出图解C#堆与栈 C# Heap(ing) VS Stack(ing) 第五节 引用类型复制问题及用克隆接口ICloneable修复

深入浅出图解C#堆与栈 C# Heaping VS Stacking 第五节 引用类型复制问题及用克隆接口ICloneable修复 [深入浅出图解C#堆与栈 C# Heap(ing) VS Stack(ing) 第一节 理解堆与栈](https://mp.csdn.net/mdeditor/101021023)[深入浅出图解C#堆与栈 C# Heap(ing) VS Stack(ing) 第二节…

JavaGUI+Mysql工资管理系统

环境说明: JDK1.8 Mysql5.7 开发工具Eclipse或IDEA 代码获取联系方式: QQ:850698824 主要代码 /** To change this template, choose Tools | Templates* and open the template in the editor.*//** MainFrame.java** Created on 2013-6-…

Python之JSON函数介绍

JSON函数 使用 JSON 函数需要导入 json 库:import json。 举例说明,如下: a.json内容格式: {"car":{"price":1100,"color":"red"},"mac":{"price":7999,"col…

自定义docker镜像,ubuntu安装命令并导出

文章目录 问题现象解决步骤相关命令详细介绍docker save 与 docker loaddocker import 与 docker exportdocker commit 问题现象 我们的通讯服务,需要监测前端设备的在线情况(是否在线、丢包率、延迟等),使用ping命令去实现此功能…

uniapp原生插件 - android原生插件打包流程 ( 避坑指南一)

【彩带- 避坑知识点】: 当时开发中安卓插件打包成功后,uniapp引用插件aar,用云打包 ,总是提示不包含插件。原因是因为module的androidManifest.xml文件没有注册activity。 这一步 很重要,一定要注册。 --------------------------…

百度CTO王海峰:飞桨开发者已达1070万

目录 写在前面 飞桨开发者已达1070万 文心一言用户规模破亿,日提问量快速增长 写在前面 “文心一言用户规模突破1亿。”12月28日,百度首席技术官、深度学习技术及应用国家工程研究中心主任王海峰在第十届WAVE SUMMIT深度学习开发者大会上宣布。会上&…

【智慧门店】东胜物联蓝牙网关助力解决方案商,推动汽车后市场企业智能化升级

截至2023年9月底,我国汽车保有量达3.3亿辆,后市场前景广阔。 随着人工智能、5G、物联网等新技术的普及,汽车后市场企业希望向智能化迈进,借助新兴科技的力量提升汽车维修、车辆保养等服务质量,满足消费者日益增长的需…

第一节 初始化项目

系列文章目录 第一节 初始化项目 文章目录 操作步骤 总结 操作步骤 打开cmd 输入 vue ui 在打开的网页中点击“创建”,复制文件夹路径并粘贴点击“在此创建新项目” 输入项目名称 点击下一步选择手动配置 选择babel、router、vuex、css pre-processors、 linter建…

Jetpack Compose中使用Android View

使用AndroidView创建日历 Composable fun AndroidViewPage() {AndroidView(factory {CalendarView(it)},modifier Modifier.fillMaxWidth(),update {it.setOnDateChangeListener { view, year, month, day ->Toast.makeText(view.context, "${year}年${month 1}月$…

图的操作实验

图的操作 一、 实验目的 (1)掌握图的邻接矩阵和邻接表存储结构。 (2)熟练图的邻接表的基本运算。 (3)加深图的深度优先遍历算法和广度优先遍历算法的理解。 (4)领会最小生成树和…

性能手机新标杆,一加 Ace 3 发布会定档 1 月 4 日

12 月 27 日,一加宣布将于 1 月 4 日发布新品一加 Ace 3。一加 Ace 系列秉持「产品力优先」理念,从一加 Ace 2、一加 Ace 2V 到一加 Ace 2 Pro,款款都是现象级爆品,得到了广大用户的认可与支持。作为一加 2024 开年之作&#xff0…

Leetcode 56 合并区间

题意理解: 以数组 intervals 表示若干个区间的集合,其中单个区间为 intervals[i] [starti, endi] 。 合并所有重叠的区间,并返回 一个不重叠的区间数组。 该数组需恰好覆盖输入中的所有区间 。 目标:合并…

踩坑RV1106板端部署rknn模型

文章目录 1、交叉编译2、板上跑通3、验证自己模型 1、交叉编译 官方给的一个流程: RKNN 模型推理测试为了避免踩坑在开头提出来 按照官方的流程可以跑通,他自己提供的yolov5s.rknn(640*640)的模型,但是跑自己的模型的时候加载就会…

ROS多机通信

1:安装ssh sudo apt-get install openssh-server ps -e|grep ssh2:网络静态IP设置 3:配置文件修改 sudo gedit /etc/hosts192.168.3.11 用户名 192.168.3.22 用户名另一台4:重启网络 sudo /etc/init.d/network-manager resta…

码住!8个小众宝藏的开发者学习类网站

1、simplilearn simplilearn是全球排名第一的在线学习网站,它的课程由世界知名大学、顶级企业和领先的行业机构通过实时在线课程设计和提供,其中包括顶级行业从业者、广受欢迎的培训师和全球领导者。 2、VisuAlgo VisuAlgo是一个免费的在线学习算法和数…

Python(九十二)函数的参数定义-个数可变的位置参数和个数可变的关键字形参

❤️ 专栏简介:本专栏记录了我个人从零开始学习Python编程的过程。在这个专栏中,我将分享我在学习Python的过程中的学习笔记、学习路线以及各个知识点。 ☀️ 专栏适用人群 :本专栏适用于希望学习Python编程的初学者和有一定编程基础的人。无…

keil编译报错:No space in execution regions with .ANY selector matching

No space in execution regions with .ANY selector matching 出现该错误是因为内存溢出,没有更多的空间,可以从以下几点进行排查。 1、优化编译器的编译规则,配置成Level 3 最高级,但是会增加编译时间 Keil编译器提供了多种优…