数据结构学习笔记:概论

news2024/12/25 12:39:22

✨博文作者:烟雨孤舟
💖 喜欢的可以 点赞 收藏 关注哦~~

✍️ 作者简介: 一个热爱大数据的学习者

✍️ 笔记简介:作为大数据爱好者,以下是个人总结的学习笔记,如有错误,请多多指教!

目录

数据结构的概念

抽象数据类型的表示与实现

算法和算法分析

常见的数据结构

常见的算法


数据结构的概念

数据结构(英语:data structure)是计算机中存储、组织数据的方式。

数据结构是一种具有一定逻辑关系,在计算机中应用某种存储结构,并且封装了相应操作的数据元素集合。它包含三方面的内容,逻辑关系、存储关系及操作。

数据结构的概念:数据结构是一门研究非数值计算的程序设计问题中计算机的操作对象以及他们之间的关系和操作的学科。

数据结构的描述:ADT和C语言

数据结构的内涵:数据对象及其内部数据元素的关系描述了数据结构的静态特征。

增删改查等基本操作(算法)描述了数据结构的动态特征。

数据结构=数据(数据对象)+结构(数据元素之间的关系)

数据:信息的载体
数据元素:数据的基本单位
数据项:具有独立含义的最小标识单位;数据元素由数据项构成。
数据对象:具有相同性质的数据元素的集合。
在数据结构里数据就是指的数据对象。

案例:
数据元素:运动员
数据项:运动员的姓名 出生日期 身高 性别  俱乐部名称
数据对象:某俱乐部的所有运动员

 

结构:数据元素之间的关系
结构的分类:逻辑结构、存储结构
逻辑结构:集合、线性结构、树形结构、网状或网状结构
存储结构:顺序存储结构、链式存储结构
集合:集合之间的元素是不存在任何关系的,他们只属于某个集合
线性结构:线性结构的元素是一对一的关系
树形结构:树形结构是一对多的关系
网状或网状结构:网状或网状结构是多对多的关系
在计算机中算法的设计主要取决于逻辑结构,算法的实现取决于存储结构
顺序存储结构;数据元素存放在一组地址连续的存储单元中,逻辑上相邻的元素在存储器中仍然相邻
链式存储结构:数据元素可以放在不连续的存储单元中,数据元素之间的关系通过指针确定,逻辑上相邻的元素在存储器上不一定是相邻的

 

抽象数据类型的表示与实现

数据结构的表示和实现:可用抽象数据类型定义数据结构及其操作。

抽象数据类型可用三元组(D,S,P)表示
D:数据对象及ADT
S:D上的关系集(Status)
P:对D的基本操作集

ADT 抽象数据类型名{
    数据对象:<数据对象的定义>
    数据关系:<数据关系的定义>
    基本操作:<基本操作的定义>
}ADT抽象数据类型名

 基本操作定义格式:
    基本操作名(参数表)
    初始条件:(初始条件描述)
    操作结果:(操作结构描述)

1.常量和类型的预定义:
使用关键字define
#define TRUE 1
typedef int Status;
2.数据元素类型约定为ElemType,由用户定义,在数据结果结构中我们经常把它定义为整型或字符型
3.基本操作都是用函数描述的。在形参表中,以&开头的参数是引用参数。
形参表里有两种参数,一种是引用参数,一种是值参数
4.一些类C语言的语句是不能直接编译运行的:去成组赋值A=[0..9]=B[0..9];

算法和算法分析

算法是对数据局结构里面基本操作的描述

算法:是对特定问题求解步骤的一种描述,是指令的有限序列。

算法的5个特性:有穷性、确定性、可行性、输入、输出

有穷性指的是算法可以在有穷的步骤和有穷的时间被完成

确定性指的是语句没有歧义

可行性是指操作可以通过基本的一些操作来实现

输入输出是指算法可以有0个或多个输入和1个或多个输出

算法设计的要求:正确性、可读性、健壮性、效率和低存储量的要求

算法分析:可以通过算法效率度量来描述,第一是时间复杂度,第二是空间复杂度

算法效率的度量:时间复杂度(time complexity)

算法的存储空间需求:空间复杂度(space complexity)

时间复杂度:一般情况下,算法中基本操作的重复次数是问题规模n的某个函数F(n),算法的时间复杂度记作T(n)=O(f(n))
O是Order表示数量级,也就是说表示f(n)和T(n)是具有相同数量级的函数

 空间复杂度:类似空间复杂度的定义,设问题的规模为n,算法的空间复杂度记作S(n)=O(f(n))
O是Order表示数量级,随着问题规模n的增大,算法运行所需要的存储量的增长率与f(n)的增长率相同。
在问题中如果输入数据所占空间只取决于问题本身和算法无法则只需要分析除输入和程序之外的额外空间

#时间复杂度案例
sum =0
for(i=1;i<=n;i++)
    for(j=1;j<=i;j++)
        sum =sum+1;
//分析
函数具有两个for循环,案例是一个嵌套的for循环
外层的for循环是由i等于1变化到n,内层的for循环是由j等于1变化到n
i=1时,内层循环是循环一次
i=2时,内层循环是循环两次
......
i=n时,内层循环是循环n次
所以第四行代码执行次数为:f(n)=1=2+3+...+n=n(n+1)/2=n^2+0.5n
			时间复杂度:T(n)=O(f(n))=O(n^2+0.5n)=O(n^2)
    时间复杂度我们只取变化频率最高的项,即n方,所以最终时间复杂度是0n方
#空间复杂度案例:交换a和b的值
t=a;a=b;b=t;
程序段只需要1个辅助空间存储变量t。空间复杂度S(n)=O(1)

常见的数据结构

栈(Stack):栈是一种特殊的线性表,它只能在一个表的一个固定端进行数据结点的插入和删除操作。

队列(Queue):队列和栈类似,也是一种特殊的线性表。和栈不同的是,队列只允许在表的一端进行插入操作,而在另一端进行删除操作。

数组(Array):数组是一种聚合数据类型,它是将具有相同类型的若干变量有序地组织在一起的集合。

链表(Linked List):链表是一种数据元素按照链式存储结构进行存储的数据结构,这种存储结构具有在物理上存在非连续的特点。

树(Tree):树是典型的非线性结构,它是包括,2 个结点的有穷集合 K。

图(Graph):图是另一种非线性数据结构。在图结构中,数据结点一般称为顶点,而边是顶点的有序偶对。

堆(Heap):堆是一种特殊的树形数据结构,一般讨论的堆都是二叉堆。

散列表(Hash table):散列表源自于散列函数(Hash function),其思想是如果在结构中存在关键字和T相等的记录,那么必定在F(T)的存储位置可以找到该记录,这样就可以不用进行比较操作而直接取得所查记录。

常见的算法

数据结构研究的内容:就是如何按一定的逻辑结构,把数据组织起来,并选择适当的存储表示方法把逻辑结构组织好的数据存储到计算机的存储器里。算法研究的目的是为了更有效的处理数据,提高数据运算效率。数据的运算是定义在数据的逻辑结构上,但运算的具体实现要在存储结构上进行。一般有以下几种常用运算:

检索:检索就是在数据结构里查找满足一定条件的节点。一般是给定一个某字段的值,找具有该字段值的节点。 插入:往数据结构中增加新的节点。 删除:把指定的结点从数据结构中去掉。 更新:改变指定节点的一个或多个字段的值。 排序:把节点按某种指定的顺序重新排列。例如递增或递减。

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

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

相关文章

哈工大计算网络课程网络层协议之:IP数据报、IP子网、子网掩码详解

哈工大计算网络课程网络层协议之&#xff1a;IP数据报、IP子网、子网掩码详解 文章目录 哈工大计算网络课程网络层协议之&#xff1a;IP数据报、IP子网、子网掩码详解Internet网络层IP数据报&#xff08;分组&#xff09;格式IP数据报分片最大传输单元&#xff08;MTU&#xff…

网工内推 | 云计算专场,有通讯补助,13薪,带薪年假

01 中电信数智科技有限公司湖南分公司 招聘岗位&#xff1a;云计算工程师 职责描述&#xff1a; 1、云计算平台环境的搭建&#xff1a;安装、部署、配置、优化&#xff1b; 2、云计算平台有关的解决方案、平台测试&#xff1b; 3、桌面云和虚拟化项目的交付和维护工作&#…

功能强大却十分小众的5款软件

有些软件虽然功能强大&#xff0c;使用便捷&#xff0c;但是却没有得到广泛的关注和推荐&#xff0c;这并不意味着它们不值得一试&#xff0c;相反&#xff0c;它们可能是你不知道的宝藏。我的任务就是要把这些隐藏的好软件分享给大家。 轻量级笔记——CintaNotes CintaNotes…

PCB设计系列分享-LDO的布局布线指南

目录 概要 整体架构流程 技术名词解释 技术细节 小结 概要 “噪声问题” 这是每位电路板设计师都会听到的四个字。为了解决噪声问题&#xff0c;往往要花费数小时的时间进行实验室测试&#xff0e;以便揪出元凶&#xff0c;但最终却发现&#xff0c;噪声是由开关电源的布局不当…

27-1BP_Adaboost强分类器公司财务预管建模——强预测器和弱预测器(附matlab程序)

1.简述 学习目标&#xff1a;进行强预测器和弱预测器的训练来减小误差 BP_Adaboost模型 Adaboost算法的思想是合并多个“弱”分类器的输出以产生有效分类。其主要步骤为&#xff1a;首先给出弱学习算法和样本空间&#xff0c;从样本空间中找出m组训练数据&#xff0c;每组训练…

0015-TIPS-pawnyable : userfaultfd

原文 Linux Kernel PWN | 040303 Pawnyable之userfaultfd userfaultfdの利用 题目下载 代码分析 #include <linux/cdev.h> #include <linux/fs.h> #include <linux/kernel.h> #include <linux/module.h> #include <linux/random.h> #include &…

学生党可以做的暑期兼职,让暑假生活不再躺平

夏季期间有几种兼职工作可供选择&#xff1a; 1.许多超市在暑假期间会雇佣一些短期工来从事收银和理货等工作&#xff0c;每小时报酬一般约为15元左右&#xff0c;算是不错的待遇。 2.在暑假期间&#xff0c;你可以寻找一些人力资源工作&#xff0c;借助他们的帮助来安排一些临…

常用工具类之AJ-Captcha入门

1.引入MAVEN依赖 若依官方引入的是1.2.7版本。我选择了目前最常用的1.3.0版本。 在项目中给的 ruoyi-framework\pom.xml 添加依赖 <!-- anji滑块验证码 --><dependency><groupId>com.anji-plus</groupId><artifactId>spring-boot-starter-captc…

android native hook简介

&#xff08;一&#xff09;简介 android中的 native Hook是一个吸引人的技术点&#xff0c;诱使和带来很多特别精彩的想法和体验&#xff0c;在调试和其他场景中有很多应用。 本文代码基本都来自github上的源码&#xff0c;只做了适当的编辑和修改&#xff0c;主要是为了验证…

解决VMware虚拟机和Windows主机不在同一网段无法连接问题

解决VMware虚拟机和Windows主机不在同一网段无法连接问题 由于自己平时需要频繁更换虚拟机网段&#xff0c;有时候在Windows主机使用Xshell等SSH工具无法连接&#xff0c;还需要配置Windows主机的网段&#xff0c;需要将它们的网段配置到同一网段内&#xff0c;才能使SSH连接成…

Pillow库 三分钟带你了解最基础的使用

努力是为了不平庸~ 学习的最大理由是想摆脱平庸&#xff0c;早一天就多一份人生的精彩&#xff1b;迟一天就多一天平庸的困扰 目录 一、Pillow库是什么 二、以下是 Pillow 的一些主要作用和使用方法的概述&#xff1a; 三、学习使用 Pillow&#xff0c;一个强大的 Python …

python综合实践-利用Python turtle模块画樱花丛

目录 一、方法步骤 二、代码实现 三、代码解释 四、优化代码 五、Python turtle模块介绍 六、Python turtle模块使用方法 创建画布和画笔对象 控制画笔移动和旋转 控制画笔外观 绘制基本图形 控制画布参数 这段代码使用Python turtle模块&#xff0c;利用递归的方式绘…

前端实现消息推送、即时通信、SSE、WebSocket、http简介

信息推送 服务端主动向客户端推送消息&#xff0c;使客户端能够即时接收到信息。 场景 页面接收到点赞&#xff0c;消息提醒聊天功能弹幕功能实时更新数据功能 实现即时通讯方式 短轮询 浏览器&#xff08;客户端&#xff09;每隔一段时间向服务器发送http请求&#xff0c;…

leetcode47. 全排列 II(回溯算法-java)

全排列 II leetcode47. 全排列 II题目描述解题思路代码演示 回溯算法专题 leetcode47. 全排列 II 来源&#xff1a;力扣&#xff08;LeetCode&#xff09; 链接&#xff1a;https://leetcode.cn/problems/permutations-ii 题目描述 给定一个可包含重复数字的序列 nums &#xf…

Vulnhub: Corrosion靶机

kali&#xff1a;192.168.111.111 靶机&#xff1a;192.168.111.130 信息收集 端口扫描 nmap -A -sC -v -sV -T5 -p- --scripthttp-enum 192.168.111.130 目录爆破 blog-post目录下存在两个目录 对archives目录中的randylogs.php进行测试发现存在文件包含 wfuzz -c -w /op…

POI设置日期类型时间约束createDateConstraint不生效了

背景 在使用 POI 导出 excel 时间类型加入时间约束时&#xff0c;发生了使用 Excel 打开无法正确使用时间约束的问题&#xff0c;但是在 永中Office 打开可以使用 关键词 helper.createDateConstraint&#xff0c;POI设置时间约束 设置时间约束的代码如下 该代码是有问题的&…

浏览器渲染流程

解析HTML&#xff0c;生成DOM树&#xff0c;解析CSS&#xff0c;生成CSSOM树 将DOM树和CSSOM树结合&#xff0c;生成渲染树(Render Tree) Layout(回流):根据生成的渲染树&#xff0c;进行回流(Layout)&#xff0c;得到节点的几何信息&#xff08;位置&#xff0c;大小&#x…

MySQL实战解析底层---为什么我的MySQL会“抖“一下

目录 前言 SQL语句为什么变“慢”了 InnoDB刷脏页的控制策略 前言 一条SQL语句&#xff0c;正常执行的时候特别快&#xff0c;但是有时也不知道怎么回事&#xff0c;它就会变得特别慢&#xff0c;并且这样的场景很难复现&#xff0c;它不只随机&#xff0c;而且持续时间还很…

STM32挂载SD卡基于Fatfs文件系统读取文件信息

STM32挂载SD卡基于Fatfs文件系统读取文件信息 &#x1f516;本例程基于正点原子标准库修改而来。 &#x1f4cd;FatFs 相关API函数网站&#xff1a;http://elm-chan.org/fsw/ff/00index_e.html &#x1f334;分别测试了SD卡模块以及Mini SD卡模块。 &#x1f33f;STM32f1单片…

代码随想录二刷day29 | 回溯之 491.递增子序列 46.全排列 47.全排列 II

day29 491.递增子序列回溯三部曲 46.全排列回溯三部曲 47.全排列 II 491.递增子序列 题目链接 解题思路&#xff1a; 回溯三部曲 递归函数参数 本题求子序列&#xff0c;很明显一个元素不能重复使用&#xff0c;所以需要startIndex&#xff0c;调整下一层递归的起始位置。…