数据结构简介:结构创造效率

news2024/12/18 17:41:51

一、数据结构的本质

数据结构是组织大量数据的方法(data structures:methods of organizing large amounts of data

)。

根据这个定义,一条数据,就不能构成数据结构。

因为结构是数据与数据之间的关联,没有关联就形不成结构。

所以数据类型(比如int、char型)不是数据结构,普通变量也不是数据结构。

像数组(Array)、链表(Linked List)、队列(Queue)等都是能组织大量数据的,数据之间是有一定关系,这才能称为数据结构。

二、数据结构的常规操作

数据结构在操作上是具有一定的共通性的,常规操作有以下几种:

1.一般操作

(1)创建:建立一个数据结构。这是使用数据结构的第一步,例如创建一个新的数组、链表、栈、队列、集合或字典等。

(2)访问:指读取数据的值。不同数据结构的访问方式不同,如顺序访问(如链表,要通过遍历访问)、随机访问、索引访问(数组)等。

(3)清除:清除一个数据结构中的所有元素或数据。这个操作通常用于重置数据结构(比如数组)或释放其占用的内存资源(比如链表)。

2.关联性操作

普通变量也有创建和访问操作,但数据结构因为有多条数据,增加了一些关联性操作。

(1)四大操作:即插入、删除、更新、查找(即增删改查)。严格来说更新这个操作普通变量也是有的,但是这里的更新特指在一堆数据中找到要更新数据,再更改它的值。

(2)排序:对数据结构中各个元素按指定数据项的值进行排序。

需要说明的是,这里面没有列出“存储或赋值”操作,因为这一操作实际上已经隐含在创建建、插入、更新操作中。

三、数据结构的分类

1.线性数据结构

数据元素之间是一对一的关系,也就是元素一个接一个形成一条线,数据间是有前后顺序的。

(1)数组(Array):一组具有相同类型的元素,按顺序排列。每个元素都有一个对应的位置编号(从0开始递增,被称为“索引”),通过这个编号可快速访问数据。数组的优点是访问快,缺点是插入、删除数据需要整体移动数组内部分元素,效率较低。

(2)链表(Linked List):元素通过指针(地址)相连:每个元素都附带一个地址,这个地址就是下一个元素的地址。就好像我们出门时拿着要去的地址就能找到目的地一样。链表的优点是插入、删除数据不需要移动数据,只要改变附带的地址即可。

(3)栈(Stack):后进先出(LIFO, Last In First Out)的数据结构。就像一摞盘子,先摞的(也就是摞在下面的)最后拿出来用。

(4)队列(Queue):先进先出(FIFO, First In First Out)的数据结构。队列就和生活中的排队一样,排在前面的优先服务,服务完离开队伍;入队得从最后排队。

2.非线性数据结构

数据元素之间是一对多或多对多的关系。

(1)树(Tree):数据元素之间存在一对多的层次关系,如二叉树、堆、B树、红黑树、哈夫曼树等。树就是树嘛,一个根分出树枝、树杈,最后是树叶,层次分明。金字塔结构和思维导图都是树。

(2)图(Graph):图是网状结构,节点之间随意连接,适合表示任意关系。图由节点(顶点)和边(连接)组成,数据元素之间存在多对多的复杂关系,如有向图、无向图、邻接矩阵等。

3.特殊数据结构

(1)哈希表(Hash Table):又称散列表。它通过一个函数(哈希函数),把数据映射到特定的位置,查找速度几乎接近O(1)。

(2)集合(Set):和数学中的集合概念一样,集合中的元素是唯一的,不存在重复的元素。集合底层一般是用二叉树实现的。

(3)映射(Map):键值对存储的数据结构,支持快速查找和更新。在python中称之为“字典(Dictionary)” 映射底层在C++中是用红黑树实现的,在python中是用哈希表实现的。

四、数据结构的重要性

数据结构是算法的灵魂伴侣,有着重要的意义。

(1)提高算法效率:选用合适的数据结构可以显著提高算法的效率。

(2)增加代码可读性:使用标准的数据结构可以使代码更加清晰和易于维护。

(3)利于模块化设计:数据结构有助于将问题分解为更小的、更易于管理的部分。

五、数据结构的选用依据

选择适当的数据结构取决于具体的应用场景和需求,包括:

(1)数据访问模式:如频繁插入、删除、查找等。

(2)数据规模:数据量的大小。

(3)内存使用:对内存的限制。

(4)性能要求:如时间复杂度和空间复杂度。

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

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

相关文章

【经验分享】容器云运维的知识点

最近忙于备考没关注,有次点进某小黄鱼发现首页出现了我的笔记还被人收费了 虽然我也卖了一些资源,但我以交流、交换为主,笔记都是免费给别人看的 由于当时刚刚接触写的并不成熟,为了避免更多人花没必要的钱,所以决定公…

Linux系列之如何更换Centos yum源?

环境 Centos7Xshell7 问题描述 最近安装了一个虚拟机,准备用来学习,不过使用yum命令安装一些软件,不过使用这个命令时候,提示 Cannot find a valid baseurl for repo: base/7/x86_64,Could not retrieve mirrorlis…

RabbitMQ如何构建集群?

大家好,我是锋哥。今天分享关于【RabbitMQ如何构建集群?】面试题。希望对大家有帮助; RabbitMQ如何构建集群? 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 在RabbitMQ中,集群(Cluster&#x…

负载均衡oj项目:介绍

目录 项目介绍 项目演示 项目介绍 负载均衡oj是一个基于bs模式的项目。 用户使用浏览器向oj模块提交代码,oj模块会在所有在线的后端主机中选择一个负载情况最低的主机,将用户的代码提交给该主机,该主机进行编译运行,将结果返回…

第8章 搬移特性

8.1 搬移函数 模块化是优秀软件设计的核心所在,好的模块化能够让我在修改程序时只需理解程序的一小部分。为了设计出高度模块化的程序,我得保证互相关联的软件要素都能集中到一块,并确保块与块之间的联系易于查找、直观易懂。同时&#xff0c…

rust的axux框架开启负载均衡和重启自身的方法-会议签到的调优

开启负载均衡和重启自身 更换axum后台的意外解决的尝试在caddy反代,使用负载均衡,加多一个节点axum主程序 ip映射信息做全局共享axum重启自身刷新全局共享配置 前期刚实现了rust的后台关键业务.结果出现了两类大问题停止服务.在正用着的时候,出现很多意外,真是刺激… 更换axum…

Spring源码分析之BeanFactory接口的解析

前言: 在我们的前两篇文章当中我们看完之后其实我们都会发现当我们进行相关的重要的行为的时候如我们看到的GetBean或者在Register方法的时候会出现BeanFactroy进行调用那么这个时候我们就会产生一个疑惑这个到底是什么为什么这么重要,在我没有说的时候我们从字面上进行一个简单…

【zlm】 webrtc源码讲解三(总结)

目录 setsdp onwrite ​编辑 play 参考 setsdp onwrite play 参考 【zlm】 webrtc源码讲解_zlm webrtc-CSDN博客 【zlm】 webrtc源码讲解(二)_webrtc 源码-CSDN博客

电子应用设计方案-56:智能书柜系统方案设计

智能书柜系统方案设计 一、引言 随着数字化时代的发展和人们对知识获取的需求增加,智能书柜作为一种创新的图书管理和存储解决方案,能够提供更高效、便捷和个性化的服务。本方案旨在设计一款功能齐全、智能化程度高的智能书柜系统。 二、系统概述 1. 系…

Spring Boot 性能提升的核武器,速度提升 500%!

虚拟线程是 Java 21 引入的一个新特性,用于简化并发编程。它与传统的操作系统线程相比,具有显著的优势: 轻量级:虚拟线程由 JVM 管理,而非操作系统,因此它们的内存占用和创建成本远低于传统线程。理论上&am…

【5G】5G 无线协议 Radio Protocols(一)

长期演进(LTE)无线电协议主要设计用于通过扁平架构提供PS服务,相比之前的代际,这代表了一个重大改进,它消除了支持电路交换(CS)服务和复杂架构中固有的复杂性。许多原始的LTE原则自第8版以来一直…

实现按键按下(低电平)检测到下降沿

按照流程进行编程 步骤1: 初始化函数 包括时基工作参数配置 输入通道配置 更新中断使能 使能捕获、捕获中断及计数器 HAL_TIM_IC_Init(&ic_handle) //时基参数配置 HAL_TIM_IC_ConfigChannel(&ic_handle,&ic_config,TIM_CHANNEL_2) //输…

2024广东省职业技能大赛云计算——私有云(OpenStack)平台搭建

OpenStack搭建 前言 搭建采用双节点安装,即controller控制节点和compute计算节点。 CentOS7 系统选择 2009 版本:CentOS-7-x86_64-DVD-2009.iso 可从阿里镜像站下载:https://mirrors.aliyun.com/centos/7/isos/x86_64/ OpenStack使用竞赛培…

使用ENSP实现NAT(2)

一、NAT的类型 二、静态NAT 1.项目拓扑 2.项目实现 路由器AR1配置: 进入系统视图 sys将路由器命名为AR1 sysname AR1关闭信息中心 undo info-center enable 进入g0/0/0接口 int g0/0/0将g0/0/0接口IP地址配置为192.168.10.254/24 ip address 192.168.10.254 24进…

RNN LSTM Seq2Seq Attention

非端到端: data -》 cleaning -》 feature Engining (70%-80%工作 设计特征)-》 分类器 -》预测 端到端 End-to-End: data -》 cleaning -》Deep learning(表示学习,从数据中学习特征) -》…

PHP排序算法:数组内有A~E,A移到C或者C移到B后排序,还按原顺序排序,循环

效果 PHP代码 public function demo($params){function moveNext($arr){$length count($arr);$lastElement $arr[$length - 1];for ($i $length - 1; $i > 0; $i--) {$arr[$i] $arr[$i - 1];}$arr[0] $lastElement;return $arr;}function moveAndReplace($array, $from…

Nginx主要知识点总结

1下载nginx 到nginx官网nginx: download下载nginx,然后解压压缩包 然后双击nginx.exe就可以启动nginx 2启动nginx 然后在浏览器的网址处输入localhost,进入如下页面说明nginx启动成功 3了解nginx的配置文件 4熟悉nginx的基本配置和常用操作 Nginx 常…

如何跟进项目

在跟进项目的过程中,我们需要通过清晰的沟通和高效的执行来确保目标按时达成。简单来说,“如何跟进项目”可归纳为:明确目标和交付物、建立高效沟通机制、持续监控进度与风险、灵活应对变更。尤其是“明确目标和交付物”这一点:当…

获取微信用户openid

附上开发文档:https://developers.weixin.qq.com/doc/offiaccount/OA_Web_Apps/Wechat_webpage_authorization.html 开发之前,准备事项 一个已认证过的服务号|基本信息配置js域名和网站授权域名配置最后确认当前账号网页授权功能是否开通,没有开通的无法获取到用户授权开发人…

【WRF工具】WRF 模型评估MET(Model Evaluation Tools)

WRF 模型评估MET(Model Evaluation Tools) METplus 简介WRF 模型评估工具 MET 的安装与使用步骤安装步骤使用步骤 参考 METplus 简介 METplus 是一个增强型的模型评估和验证框架,支持从短期预报(如实时警报)到长期气候…