【脚踢数据结构】

news2024/11/25 6:44:20
  • (꒪ꇴ꒪ ),Hello我是祐言QAQ
  • 我的博客主页:C/C++语言,Linux基础,ARM开发板,软件配置等领域博主🌍
  • 快上🚘,一起学习,让我们成为一个强大的攻城狮!
  • 送给自己和读者的一句鸡汤🤔:集中起来的意志可以击穿顽石!
  • 作者水平很有限,如果发现错误,可在评论区指正,感谢🙏

        今天起,将开始数据结构的学习,学习数据结构之前,我们先来了解一下什么是数据,什么是结构以及什么是数据结构。

一、什么是数据

        数据是指描述事物特征或属性的符号集合,可以是数字、文字、图像、声音等形式的信息。在计算机科学中,数据是程序处理的基本元素,是计算机程序的输入和输出。数据可以分为不同的类型,例如整数、浮点数、字符、布尔值等,而计算机通过存储和处理这些数据来实现各种功能。

  • 数据的概念:数据(data)是对客观事物的符号表示,在计算机科学中是指所有能输入到计算机中并被计算机程序处理的符号总称。
  • 数据元素(data element)的概念:数据元素是数据的基本单元,在计算机程序中通常作为一个整体(结构体)来考虑和处理。一个数据元素可由若干个数据项(data item)组成。数据项是数据的不可分割的最小单位。
  • 数据对象(data object)的概念:数据对象是性质相同的数据元素的集合,是数据的一个子集。

 

二、什么是结构


        结构是指数据元素之间关系的不同性质称为结构。在数据结构中,数据元素之间的关系可以有不同的特性,通常有四类基本结构:

        集合结构、线性结构、树状结构(层次结构,一对多关系)、网状结构(图状结构,多对多关系)。

        集合结构中的数据元素之间除了"同属一个集合"的关系外,别无其他关系。线性结构中的数据元素存在一对一的相互关系,每个元素有且仅有一个直接前驱元素和一个直接后续元素。树状结构中除了一个数据元素(根节点)以外,每个元素有且仅有一个直接前驱元素,但可以有多个直接后续元素。网状结构中的每个元素可以有多个直接前驱元素和多个直接后续元素。

三、什么是数据结构


        数据结构是研究数据的逻辑结构物理结构以及它们之间相互关系,并对这种结构定义相应的运算,确保经过这些运算后所得到的新结构仍然是原来的结构类型。数据结构涉及三个主要方面:逻辑结构、存储结构和算法。

1.逻辑结构

        表示数据之间的抽象关系,描述数据元素之间的逻辑关联方式,如线性结构、树状结构、图状结构等。

        (1)线性结构:线性表(链表、栈、队列),线性表的数据结构中元素存在一对一的相互关系;

        (2)非线性结构:树(一对多)、图(多对多)。

2.存储结构

        表示数据在计算机中的存储方式,具体的实现方式有顺序存储、链式存储、索引存储、散列存储等。

      (1)  顺序存储方式(数组、顺序栈、顺序队列);

      (2)链式存储方式(链表、链式栈、链式队列、二叉树);

      (3) 索引存储方式(目录);

      (4)  散列存储方式。

3.算法

        对数据进行运算的操作,包括增加、删除、查找、修改、排序等。

4.数据结构的形式定义

        数据结构是一个二元组:
                                        Data_Structure = (D, S)
        其中:D是数据元素的有限集,S是D上关系的有限集(数据元素之间的关系的集合)。


(1)如果 D != null,而S == null,则该数据结构为集合结构。
(2)如果 D = {01, 02, 03, 04, 05},S = {<02,04>, <03,05>, <05,02>, <01,03>},则该数据结构是线性结构。
        在这些数据元素中有一个可以被称为“第一个”的数据元素;还有一个可以被称为“最后一个”的数据元素;除第一个元素以外每个数据元素有且仅有一个直接前驱元素,除最后一个元素以外每个数据元素有且仅有一个直接后续元素。这种数据结构的特点是数据元素之间是 1对 1 的联系,即线性关系。
(3)D = {01, 02, 03, 04, 05, 06},S = {<01,02>, <01,03>, <02,04>, <02,05>, <03,06>}
        除了一个数据元素(元素 01)以外每个数据元素有且仅有一个直接前驱元素,但是可以有多个直接后续元素。这种数据结构的特点是数据元素之间是 1 对 N 的联系,即树结构。
(4)D = {01, 02, 03, 04, 05},S = {<01,02>, <01,05>, <02,01>, <02,03>, <02,04>, <03,02>,<04,02>, <04,05>, <05,01>, <05,04>;
        每个数据元素可以有多个直接前驱元素,也可以有多个直接后续元素。这种数据结构的特点是数据元素之间是 M 对 N 的联系,即图结构。

       值得注意的是:  结构定义中的"关系"描述的是数据元素之间的逻辑关系,因此是数据的逻辑结构。而数据结构在计算机中的表示(又称为映像)称为数据的物理结构,又称为存储结构。

四、总结

        

        在IT界有句话叫做: 程序设计 = 数据结构 + 算法。   

     我们写的程序往往是用来解决生活中的实际问题,而很多生活中的场景就对应了相应数据结构。例如:去食堂打饭对应了队列这种线性结构;公司的组织架构对应了树状结构;地图上各个城市之间的关系对应网状结构。也就是说我们可以用数据结构来对生活中的场景进行数学建模。

        数据结构是计算机程序设计的基础,通过选择合适的数据结构和算法,可以高效地解决各种计算问题。程序设计中常常用数据结构来对生活中的场景进行数学建模,使得问题求解更加直观和高效。在计算机科学中,数据结构和算法被认为是程序设计的核心内容,这句话也体现了数据结构的重要性。

        更多C语言Linux系统ARM板实战数据结构相关文章,关注专栏:

   手撕C语言

            玩转linux

                    脚踢数据结构

                            6818(ARM)开发板实战

📢写在最后

  • 今天的分享就到这啦~
  • 觉得博主写的还不错的烦劳 一键三连喔~
  • 🎉感谢关注🎉

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

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

相关文章

Mybatis分页查询案例

前言 今天再写项目时刚好碰到Mybatis分页查询展示数据&#xff0c;现将实现过程整理出来以便后续再碰到类似需求回来瞅一眼。 数据准备 1、数据库表&#xff08;user_info&#xff09; 2、前端页面 代码实现 1、User实体类 package com.liming.pojo;import com.fasterxml.ja…

【积水成渊】CSS磨砂玻璃效果和渐变主题色文字

大家好&#xff0c;我是csdn的博主&#xff1a;lqj_本人 lqj_本人_python人工智能视觉&#xff08;opencv&#xff09;从入门到实战,前端,微信小程序-CSDN博客 最新的uniapp毕业设计专栏也放在下方了&#xff1a; https://blog.csdn.net/lbcyllqj/category_12346639.html?spm1…

ts给第3方库写类型声明文件

在vue3项目中&#xff0c;用到了jsencrypt这个第3方加密库 通过yarn add 后 在社区发现没有types/jsencrypt类型声明文件 但是node_module文件夹的jsencrypt文件夹中的lib文件夹中是有.d.ts文件的&#xff0c;这说明是有类型声明文件的 既然这个第3方库有类型声明文件&…

大数据指标体系-笔记

指标体系 1 总体流程图 1.1 2 模型‘ 2.1 OSM OSM(Object,Strategy,Measure) 「业务度量」涉及到以下两个概念:一个是KPI ,用来直 接衡量策略的有效性;一个是Target,是预先给出的值,用来判断是否达到预期 2.2 UJM User, Journey, Map 2.3 AARRR-海盗 AARRR(Acquisitio…

内网安全-隧道技术SSH实现通信DNS上线与通信CS上线Linux主机

内网安全-隧道技术&SSH实现通信&DNS上线与通信&CS上线Linux主机 一、DNS隧道技术 DNS简介&#xff1a;DNS协议为应用层协议&#xff0c;区域传输时用tcp协议&#xff0c;域名解析时用udp协议 ###通过DNS隧道绕过防火墙&#xff0c;实现CS上线 实验背景&#xff…

uniapp创建项目入门【详细】

大家在学习vue和微信小程序之后&#xff0c;就可以开始来学习uniapp了&#xff0c;在uniapp中&#xff0c;一套代码可以跨越所有的平台&#xff0c;可以很方便的维护。接下来我们先来学习如何创建uinapp的项目 一、uniapp的创建需求 大家只要会vue和微信小程序的基础来学习unia…

自定义类型——结构体

结构体 1. 结构体的基本知识 结构是一些值的集合&#xff0c;这些值被称之为成员变量。并且结构体的每个成员变量可以是不同类型的。 2.结构体的声明 声明模板&#xff1a; struct tag { member-list;(成员变量) }variable-list(结构体变量列表);假定我们声明一个学生类对象…

【代码解读】RRNet: A Hybrid Detector for Object Detection in Drone-captured Images

文章目录 1. train.py2. DistributedWrapper类2.1 init函数2.2 train函数2.3 dist_training_process函数 3. RRNetOperator类3.1 init函数3.1.1 make_dataloader函数 3.2 training_process函数3.2.1 criterion函数 4. RRNet类&#xff08;网络模型类&#xff09;4.1 init函数4.…

安卓:MMKV——键值存储库

目录 一、MMKV介绍 1.特点和优势&#xff1a; 2.使用指南&#xff1a; 3.依赖包&#xff1a; 二、MMKV的常用方法 1、初始化和获取实例&#xff1a; 2、存储数据&#xff1a; 3、读取数据 4、删除数据 5、其他操作&#xff1a; 三、MMKV的使用例子 MainActivity&#xff…

Netty:查看ChannelPipeline已经添加的ChannelHandler名称

说明 使用Netty框架开发&#xff0c;可以向ChannelPipeline中添加或者移除ChannelHandler&#xff0c;可以通过ChannelPipeline的names()函数查看ChannelPipeline中已经添加的ChannelHandler名称。 示例 代码片段 package com.thb.power.terminal;import java.io.BufferedR…

uni-app:实现点击按钮出现底部弹窗(uni.showActionSheet+自定义)

一、通过uni.showActionSheet实现底部选择 效果 代码 <template><view><button click"showActionsheet">点击打开弹窗</button></view> </template><script> export default {methods: {showActionsheet() {uni.showAct…

【雕爷学编程】Arduino动手做(193)---移远 BC20 NB+GNSS模块6

37款传感器与模块的提法&#xff0c;在网络上广泛流传&#xff0c;其实Arduino能够兼容的传感器模块肯定是不止37种的。鉴于本人手头积累了一些传感器和执行器模块&#xff0c;依照实践出真知&#xff08;一定要动手做&#xff09;的理念&#xff0c;以学习和交流为目的&#x…

10*1000【1】

7.20号 讲了蚂蚁的运行方式和关键技术&#xff1a; 数字技术实现了对金融的改革&#xff0c;让它更包容。当然也实现了消费方式的改变&#xff0c;是得以用户为中心。同时虚拟技术让个人也有了一个自己的小公司&#xff0c;在互联网上面的信息与信用都会被记录下来&#xff0…

如何构造一个安全的单例?

为什么要问这个问题&#xff1f; 我们知道&#xff0c;单例是一种很常用的设计模式&#xff0c;主要作用就是节省系统资源&#xff0c;让对象在服务器中只有一份。但是实际开发中可能有很多人压根没有写过单例这种模式&#xff0c;只是看过或者为了面试去写写demo熟悉一下。那…

springboot家政服务管理系统java家务保姆资源 jsp源代码mysql

本项目为前几天收费帮学妹做的一个项目&#xff0c;Java EE JSP项目&#xff0c;在工作环境中基本使用不到&#xff0c;但是很多学校把这个当作编程入门的项目来做&#xff0c;故分享出本项目供初学者参考。 一、项目描述 springboot家政服务管理系统 系统1权限&#xff1a;管…

Sentinel 2.0 微服务零信任的探索与实践

作者&#xff1a;涯客、十眠 从古典朴素的安全哲学谈起 网络安全现状 现在最常见的企业网络安全架构便是在企业网络边界处做安全防护&#xff0c;而在企业网络内部不做安全防范。这确实为企业的安全建设省了成本也为企业提供了一定的防护能力。但是这类比于现实情况的一个小…

解决Centos/Linux操作系统安装 uWSGI项目报错

解决linux 操作系统编译uWSGI源码报错 最近在学习在Linux操作系统中使用uWSGI项目部署django项目,在使用源码安装uWSGI项目的时候报错。 报错如下&#xff1a; In file included from plugins/python/python_plugin.c:1:0: plugins/python/uwsgi_python.h:4:20: 致命错误&…

Spring Boot整合ES的两种方式

使用Spring Data Elasticsearch Starter 在Spring Boot中整合Elasticsearch的方式之一是使用Elasticsearch的官方Spring Data Elasticsearch Starter。该Starter提供了对Elasticsearch的高级集成&#xff0c;简化了配置和管理Elasticsearch客户端。 下面是使用Spring Data E…

【SOP】最佳实践之 TiDB 业务写变慢分析

作者&#xff1a; 李文杰_Jellybean 原文来源&#xff1a; https://tidb.net/blog/d3d4465f 前言 在日常业务使用或运维管理 TiDB 的过程中&#xff0c;每个开发人员或数据库管理员都或多或少遇到过 SQL 变慢的问题。这类问题大部分情况下都具有一定的规律可循&#xff0c;…

不要在 foreach 循环里进行元素的 remove/add 操作

如果要进行remove操作&#xff0c;可以调用迭代器的 remove 方法而不是集合类的 remove 方法。因为如果列表在任何时间从结构上修改创建迭代器之后&#xff0c;以任何方式除非通过迭代器自身remove/add方法&#xff0c;迭代器都将抛出一个ConcurrentModificationException,这就…