什么是数据结构

news2024/11/27 8:27:37

一、什么是数据结构

1、数据结构的定义

  1. 数据:从计算机的角度来看,数据是所有能被输入到计算机中且能被计算机处理的符号的集合。它是计算机操作的对象的总称,也是计算机处理信息的某种特定的符号表示形式(二进制码的抽象表示?)。
  2. 数据元素:数据元素是数据中的一个个体,是数据的基本单位,在计算机中通常作为一个整体来进行考虑和处理。
  3. 数据项:一个数据元素可以由多个数据项组成。数据项是具有独立含义的数据最小单位。

数据、数据元素、数据项这三个的关系类似表、元组、属性之间的关系,不过表、元组、属性之间具有确定的关系,而数据、数据元素、数据项之间只有层次关系而没有具体的关系。

  1. 数据结构:数据结构是指数据以及数据相互之间的联系,可以看成是相互之间具有某种特定关系的数据元素的集合,因此,可以把数据结构看成是带结构的数据元素的集合。

数据结构包含以下几个方面:

  • 数据元素之间的逻辑关系,即数据的逻辑结构。
  • 数据元素及其关系在计算机存储器中的存储方式,即数据的存储结构,也称为数据的物理结构。
  • 施加在该数据上的操作,即数据的运算。

所以数据结构由三个部分组成:逻辑结构、物理结构、运算。

数据的逻辑结构是从逻辑关系上描述数据(主要是相邻关系,比如栈、队列、链表等),它与数据的存储无关,是独立于计算机的。因此,数据结构可以看作从具体问题中抽象出来的数学模型。

数据的存储结构是逻辑结构用计算机语言的实现(逻辑结构在计算机存储中的映像),它是依赖于计算机语言的。

数据的运算是定义在数据的逻辑结构上的,每种逻辑结构都有一组相应的运算。最常用的运算有:检索(查找)、插入、删除、更新、排序等。

对于一种数据结构,其逻辑结构总是唯一的,但它可以对应多种存储结构,并且在不同的存储结构中,同一运算的实现过程可能不同。

2、逻辑结构类型

在不产生混淆的情况下,通常将逻辑结构简称为数据结构。

数据的逻辑结构主要有以下几类:

  1. 集合:集合中的元素相互独立,除了同属于一个集合之外,别无其他关系。(集合中的元素不能重复)
  2. 线性结构:线性结构中的节点具有一对一的关系,其特点是开始节点和终端节点都是唯一的,除开始节点和终端节点之外,其余节点有且仅有一个前驱,有且仅有一个后继。
  3. 树形结构:树形结构中的节点具有一对多的关系,其特点是每个节点最多只有一个前驱,但可以有多个后继,可以有多个终端节点。
  4. 图形结构:图形结构中的节点具有多对多的关系,其特点是每个节点的前驱和后继的数量都可以是任意的。

图示

3、存储结构类型

  1. 顺序存储方法:把逻辑上相邻的节点存储在物理上相邻的存储单元里,节点之间的逻辑关系由存储单元的邻接关系来体现。

优点:节省存储空间,可以实现节点的随机存取(每个节点对应一个序号,由该序号可直接确定节点的存储地址)

缺点:不便于修改(在对节点进行插入、删除的操作时,可能要移动一系列的节点)。

  1. 链式存储方法:该方法不需要逻辑上相邻的节点在物理位置上也相邻,节点之间的逻辑关系由附加的指针字段表示。

优点:便于修改(在进行插入、删除操作时,只需要修改对应节点的指针域,不必移动节点)。

缺点:存储空间利用率较低(有一部分空间用来存储节点之间的逻辑关系了),不能进行随机存取(因为逻辑上相邻的节点在物理位置上不一定相邻)。

  1. 索引存储方法:该方法通常在存储节点信息的同时,还建立附加的索引表。索引表中的每一项称为索引项,索引项的一般形式是:(关键字,地址),其中关键字唯一标识一个节点,地址则是指向该节点的指针。

优点:支持随机访问(因为索引表是顺序存储的,类似于 C语言中的指针数组),具有较高的数据修改运算效率。

缺点:索引存储的方法增加了索引表,降低了存储空间的利用率。

  1. 哈希(或散列)存储方法:该方法根据节点的关键字通过哈希(或散列)函数直接计算出一个值,并将这个值作为该节点的存储地址。

优点:哈希存储方法的优点就是查找数据快,只要给出要查找节点的关键字,就可以立即计算出对应节点的存储地址。

缺点:哈希存储方法只存储节点的数据,不存储节点之间的逻辑关系。所以哈希存储方法一般只适合要求能够快速查找和插入的场合。

上面 4种基本的存储方法,既可以单独使用,也可以组合起来使用。同一种逻辑结构采用不同的存储方法,可以得到不同的存储结构。选择何种存储结构,主要根据运算方便和算法的时空要求来决定。

 

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

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

相关文章

【高级篇】服务异步通信

服务异步通信-高级篇 消息队列在使用过程中,面临着很多实际问题需要思考: 1.消息可靠性 消息从发送,到消费者接收,会经理多个过程: 其中的每一步都可能导致消息丢失,常见的丢失原因包括: 发送…

030 JavaWeb Html CSS

目录 JavaWeb概述1.访问web的原理2.C/S软件和B/S软件区别3.静态网站和动态网站 HTMLHTML的概述Table表格详细用法见W3CSchool.chm合并单元格课程表 img标签table和img标签组合使用a标签表单表单Get提交和post提交 div和span CSS1.CSS概述2.CSS语法3.CSS三种写法行内样式内部样式…

VueX使用简明笔记

1、作用: vuex是使用vue中必不可少的一部分,基于父子、兄弟组件,我们传值可能会很方便,但是如果是没有关联的组件之间要使用同一组数据,就显得很无能为力,那么vuex就很好的解决了我们这种问题,…

Knife4j的使用、SpringFox和SpringDoc介绍

knife4j是一个Swagger的增强工具,能够完善项目的接口文档。 官网: Knife4j 集Swagger2及OpenAPI3为一体的增强解决方案. | Knife4j Swagger的生成的默认文档确实不好用(不美观、不支持搜索、不能导出) 在Swagger2中使用 想一想…

Android 12.0 原生SystemUI下拉通知栏每条通知默认展开

1.前言 在12.0的系统rom原生开发中,在在对SystemUI下拉通知栏做定制的时候,在下拉状态栏的时候,通知栏中 最后一条通知默认是收缩的 点击按钮 就会展开 原生系统systemui就是如此,为了更美观 所以要求最后一条通知也默认展开,显得更美观 最终效果图: 2.原生SystemUI下拉通…

C++/C按照时间命名保存bin文件

背景 在Linux应用编程过程中,使用C或者C语言保存、读取bin文件是比较常见的需求。这里详细记录一下使用C保存bin文件,也可以使用C语言实现。 代码 C/C语言保存bin文件函数,C中也能使用 正确写入返回0,错误返回-1 // C 保存bi…

双重检查锁定与延迟初始化

双重检查锁定的由来 在Java程序中,有时候可能需要推迟一些高开销的对象初始化操作,并且只有在使用这些对象时才进行初始化。此时,程序员可能会采用延迟初始化。但要正确实现线程安全的延迟初始化需要一些技巧,否则很容易出现问题…

51单片机操作系统——RTX51 Tiny

简介 RTX51 是keil公司开发的一款实时操作系统,其有两个版本: 1.Tiny 2.Full,区别如下: RTX51 Full :使用四个任务优先权完成同时存在时间片轮转调度和抢先的任务切换 RTX51工作与中断功能相似的状态下 &#xff0c…

华为OD机试真题 JavaScript 实现【最远足迹】【2022Q4 100分】,附详细解题思路

一、题目描述 某探险队负责对地下洞穴进行探险。探险队成员在进行探险任务时,随身携带的记录器会不定期地记录自身的坐标,但在记录的间隙中也会记录其他数据。探索工作结束后,探险队需要获取到某成员在探险过程中相对于探险队总部的最远的足…

【打卡】苹果叶片病害分类和建筑物变化检测数据挖掘竞赛

【打卡】苹果叶片病害分类和建筑物变化检测数据挖掘竞赛 文章目录 【打卡】苹果叶片病害分类和建筑物变化检测数据挖掘竞赛Task 1两个赛题数据可视化任务2 苹果病害数据加载与数据增强任务三 Task 1两个赛题数据可视化 在这个任务中,参赛选手需要对两个赛题的数据进…

卡奥斯开源社区六月创作之星挑战赛开始啦!

活动须知 发布优质文章争榜,获取专属勋章、流量扶持及奖励! 活动时间:6 月 1 日- 6 月 30 日 奖品发放:7月10日 参与方式 完成认证发布优质文章,选中相关活动标签,文章默认参与活动 文章要求 文章符合…

宠物行业传统“夫妻店”,如何向“线下 线上”模式转型?

据研究,目前我国宠物店以单体店为主,占比高达85%。      这些单体店规模较小,以夫妻店为主,并且服务区域有限,较少涉及到大规模连锁运营。      同时,在我国宠物店形态中,区域性小规模的…

YOLOV5 训练

YOLOV5训练过程 CUDA 和cuDnnan 安装教程 windows上安装可以参考这篇知乎文章 数据集准备 自己准备数据集 可以使用 labelImg 工具,直接 pip install labelimg 就可以安装了。 命令行中输入 labelImg 就可以运行 标注数据的输出结果有多种过格式,V…

【数据结构与算法】掌握顺序栈:从入门到实践

🌱博客主页:青竹雾色间. 🌱系列专栏:数据结构与算法 😘博客制作不易欢迎各位👍点赞⭐收藏➕关注 目录 前言 顺序栈的实现 初始化栈 判断栈空 判断栈满 入(进)栈 出栈 获取栈…

【算法系列 | 3】深入解析排序算法之插入排序

序言 你只管努力,其他交给时间,时间会证明一切。 文章标记颜色说明: 黄色:重要标题红色:用来标记结论绿色:用来标记一级论点蓝色:用来标记二级论点 决定开一个算法专栏,希望能帮助大…

冒泡排序、插入排序、希尔排序、选择排序

一、排序协议的定义 在博客的开头的,我们先给出排序协议的定义。因为我们本篇博客含有多种排序方式,为了使每种排序方法对外调用方式一致,我们需要定义一个排序的相关协议。所有排序的相关类都必须遵循该协议,让此协议来定义具体…

Aiohttp异步爬取小说排行榜

Aiohttp异步爬取小说排行榜 *** Aiohttp简介及使用 *** ​ Aiohttp是Python的一个第三方网络编程模块, 它可以开发服务端和客户端,服务端也就是我们常说的网站服务器;客户端是访问网站的API接口,常用于接口测试,也可用…

Vue基础第七篇

一、vuex的使用 1.概念 在Vue中实现集中式状态(数据)管理的一个Vue插件,对vue应用中多个组件的共享状态进行集中式的管理(读/写),也是一种组件间通信的方式,且适用于任意组件间通信。 2.何时…

MyBatis操作数据库实现

说明:MyBatis是作用于三层架构开发,数据访问层(Data Access Object)的框架,用于访问数据库,对数据进行操作。 一、环境搭建 首先,创建一个SpringBoot模块,然后把MyBatis的环境搭建…

华为OD机试真题 JavaScript 实现【获取字符串中连续出现次数第k多的字母的次数】【2023Q1 100分】,附详细解题思路

一、题目描述 给定一个字符串&#xff0c;只包含大写字母&#xff0c;求在包含同一字母的子串中&#xff0c;长度第 k 长的子串的长度&#xff0c;相同字母只取最长的那个子串。 二、输入描述 第一行有一个子串(1<长度<100)&#xff0c;只包含大写字母&#xff1b;第二…