数据结构-绪论

目录

  • 前言
  • 一、从问题到程序
  • 二、数据结构的研究内容
  • 三、理解数据结构
    • 3.1 数据
    • 3.2 结构
      • 3.2.1 逻辑结构的分类
      • 3.2.2 存储结构的分类
    • 3.3 数据结构
  • 总结

前言

本篇文章先介绍数据结构的研究内容,然后再介绍如何去理解数据结构,着重介绍表示数据结构关系的逻辑结构和存储结构(物理结构)。

一、从问题到程序

用计算机实现问题求解,实质上就是在计算机中建立一个解决问题的模型。
为一个问题建立一个正确的求解程序,一般经历以下四个阶段:

  1. 分析阶段
    该阶段的任务是,首先是理解用户的需求是什么;然后设计者对用户的需求进行深入分析,使用规范说明语言,给出问题的需求模型
    又或者是通过分析问题,提取操作对象并找出操作对象之间的关系,然后用数学语言描述操作对象之间的关系,最后给出问题的数学模型
  2. 设计阶段
    该阶段的任务是,设计者建立求解问题的实现模型,重点是数据结构的设计和算法的设计
    一般而言,设计过程需要从粗到细,经过多次精化才能完成。
  3. 编码阶段
    该阶段的任务是,编码人员选择适当的程序设计语言把设计阶段的结果编写成可执行程序。
  4. 调试和维护阶段
    该阶段的任务是,测试人员使用足够的例子调试编写的程序,发现和排除程序代码中的错误;
    最后,在计算机上执行程序,获得问题的解。
    程序投入使用后,需要解决在使用过程中发现的隐含错误和根据使用中提出的要求进行必要的维护和完善。

使用计算机为实际问题构建求解程序的流程图如图1.1所示。
在这里插入图片描述

图1.1 构建求解程序流程图

数据结构的设计处于设计阶段,那数据结构的研究内容是什么呢?

二、数据结构的研究内容

数据结构是一门主要研究非数值计算,然后用计算机表示数据元素以及数据元素之间的关系,最后用计算机实现对数据元素的各种操作的学科。
描述非数值计算问题的数学模型不是数学方程,而是诸如表、树、图等具有逻辑关系的结构。

例子1,学生信息管理系统的一个学生信息表
在这里插入图片描述

数据元素:一个学生的信息
数据元素之间的关系:线性结构(逻辑结构)
操作:对一个学生的信息进行查询、修改、增加、删除等操作

例子2,文件系统的目录结构
在这里插入图片描述
在这里插入图片描述

数据元素:目录
数据元素之间的关系:树形结构(逻辑结构)
操作:对一个目录进行删除、修改、查看、新增等操作

例子3,地图导航
在这里插入图片描述
数据元素:地点和边
数据元素之间的关系:图结构(逻辑结构)
操作:寻求两点之间最短路径、寻求两点之间的最短耗时等

以上这些问题,都是无法使用数学公式或数学方程描述的问题,是一些非数值计算的程序设计问题。
再了解数据结构的研究内容后,请问什么是数据结构?

三、理解数据结构

为了更好的理解数据结构,可以先将其拆分为两部分:数据和结构,最后再进行总体理解。

3.1 数据

  • 数据
    概念:能够输入计算机且能够被计算机处理的各种符号的集合
    在这里插入图片描述
    例如,在一个学生信息管理系统中,学生信息表就是数据。
  • 数据元素
    概念:是数据的基本单位,在计算机程序中通常被作为一个整体进行考虑和处理
    数据元素简称为元素,也可以称为记录或结点
    例如,在一个学生信息管理系统中,学生信息表的一个学生信息就是一个数据元素。
  • 数据项
    概念:构成数据元素的不可分割的最小单位
    例如,在一个学生信息管理系统中,学生信息表的学号字段就是一个数据项。
  • 数据对象
    概念:是性质相同的数据元素的集合,是数据的一个子集
    例如,在一个学生信息管理系统中,学生信息表的同一个专业的学生信息就是一个数据对象。

数据元素与数据对象的关系:
从集合的角度看,把数据当成一个集合
数据元素是数据的一个元素
数据对象是数据的一个子集

3.2 结构

结构可以分为逻辑结构存储结构(物理结构)

  • 逻辑结构:它定义了数学模型中的元素和元素之间的相互关系。
    描述数据元素之间的逻辑关系
    与数据的存储无关,独立与计算机
    是从具体问题抽象出来的数学模型
  • 存储结构:它给出了数学模型的具体表示方式,包括元素的表示,元素与元素之间的关系表示。存储结构也可以理解为数据元素、数据元素之间的关系在计算机内存中的表示。
    数据元素及其关系在计算机存储器中的结构
    是数据结构在计算机中的表示

逻辑结构与存储结构的关系:
逻辑结构是数据结构的抽象
存储结构是数据结构的实现

两者综合起来建立了数据元素之间的结构关系。

3.2.1 逻辑结构的分类

  • 集合结构
    概念:结构中的数据元素之间除了同属于一个集合的关系外,无任何其他关系
    在这里插入图片描述

  • 线性结构
    概念:结构中的数据元素之间存在着一对一的关系
    在这里插入图片描述

  • 树形结构(非线性结构)
    概念:结构中的数据元素之间存在着一对多的层次关系
    在这里插入图片描述

  • 图结构(非线性结构)
    概念:结构中的数据元素之间存在着多对多的任意关系
    在这里插入图片描述

各种逻辑结构之间具有以下包含关系:
集合结构 ⊆ 线性结构 ⊆ 树形结构 ⊆ 图结构

3.2.2 存储结构的分类

  • 顺序存储结构
    用一组连续的存储单元依次存储数据元素,数据元素之间的逻辑关系由元素的存储位置表示
  • 链接存储结构
    用一组任意的存储单元存储数据元素,数据元素之间的逻辑关系用指针(或引用)表示
  • 散列存储结构
    又称为关键码-地址转换法
    选择适当的散列(杂凑)函数,根据关键码的值将数据元素映射到给定的存储空间(散列表)中
  • 索引存储结构
    存储结点信息的同时,建立附加的索引表。索引是由索引项组成的结构,每个索引项包含一个结点的关键码和该结点的存储位置

3.3 数据结构

数据结构包含以下三个内容:
1. 数据元素
2. 数据元素之间的关系(包含逻辑结构关系和存储结构关系)
3. 数据元素的运算和操作,即对数据元素可以施加的操作以及这些操作在相应的存储结构上的实现

总结

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

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

相关文章

springboot与flowable(5):任务分配(表达式)

在做流程定义时我们需要给相关的用户节点指派对应的处理人。在flowable中提供了三种分配的方式。 一、固定分配 在分配用户时选择固定值选项确认即可。 二、表达式 1、值表达式 2、方法表达式 三、表达式流程图测试 1、导出并部署 导出流程图,复制到项目中 部署流…

机器学习——集成学习和梯度提升决策树

集成学习 不同的算法都可以对解决同一个问题,但是可能准确率不同,集成学习就是不同算法按照某种组合来解决问题,使得准确率提升。 那怎么组合算法呢? 自举聚合算法**(bagging)** 顾名思义是 自举聚合 自举…

解决虚拟机中 Ubuntu 网卡丢失连接图标消失

1.停止网络服务 service NetworkManager stop 2.删除网络配置文件 rm /var/lib/NetworkManager/NetworkManager.state 3.重启网络 service NetworkManager start

删除有重复数组的重复项1-2

文章目录 1、描述2、关键字3、思路4、notes5、复杂度6、code 1、描述 给你一个 非严格递增排列 的数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。元素的 相对顺序 应该保持 一致 。然后返回 num…

怎么做成的文件二维码?扫阅览文件的制作方法

现在用二维码来分享或者查看文件是一种很常用的方式,比如常见的文件内容有简历、资料、作品、压缩包等等。通过将文件生成二维码能够在提升文件传输速度的同时还有利于用户体验的提升,那么如何制作可以长期提供文件预览或者下载的二维码呢? …

国家域名后缀有哪些?

国家域名后缀,也称为国家顶级域名(ccTLDs),是互联网域名系统(DNS)中代表特定国家或地区的顶级域名。每个国家或地区都有自己的国家域名后缀,如.US代表美国,.CN代表中国,.UK代表英国等。这些域名后缀不仅有助于用户识别…

你好rust

第一次安装rust,记录一下笔记。 几年前就听说过rust,自己一直是个c爱好者,所以比较抵触rust,早年还有什么rust向上突破群。一直比较抵触,直到这几年rust已经渐渐深入到linux内核、云原生可观测以及zend社区当中&#x…

SAR复数图像

本篇文章讲讲SAR图像的一些特征: SAR图像是由行列像素组成的二维矩阵,其中每一个像素代表了地球表面上的一小块区域,其尺寸仅依赖于SAR系统的指标。每个像素点包含一个复数(幅度及相位),该数值与SAR分辨单元内全部散射提的反射率总…

【Redis实战篇】redis的擅长实现的功能

🔥作者主页:小林同学的学习笔录 🔥小林同学的专栏:JAVA之基础专栏 【Redis实战篇】Redis有可能出现的问题以及如何解决问题_redis实现用户登录可能造成哪些问题-CSDN博客 本文接上面的文章 目录 2.优惠券秒杀 2.1 全局唯一ID 2.…

Java Streams API:8个高效处理集合的实用技巧

引言 在日常的Java编程中,处理集合数据是一项常见任务。Java Streams API 提供了一系列强大的工具,可以帮助我们以声明式的方式处理集合,提高代码的可读性和效率。以下是8个你应该掌握的实用Java Streams API技巧,让你的代码更加…

C++ 强制类型转换总结

C 强制类型转换总结 简介static_cast介绍场景示例 dynamic_cast介绍场景示例 const_cast介绍示例 reinterpret_cast介绍特点示例 简介 在开发时候,对强制类型转换经常感觉很迷糊,什么场景用哪个没有一个确切的认识,因此借着这个机会好好总结…

新办理北京广播电视节目制作许可证需要什么条件

在北京想要从事广播电视节目制作,那就需要企业拥有广播电视节目制作经营许可证。此许可证不仅是企业合法经营的基础,同时也是保障节目制作质量和内容合规的标志。如何办理,详情致电咨询我或者来公司面谈。 北京广播电视节目制作经营许可证申请…

<tbody>出现滚动条后,同<thead>对不齐的解决方案

需求是需要表格滚动&#xff0c;并且表头不动 <table classtable-style><thead>表头部分</thead><tbody>表体部分</tbody> </table><style>.table-style {width: 100%;border: 1px solid silver; /* 有边框 */border-collapse: col…

Web前端精通教程:深入探索与实战指南

Web前端精通教程&#xff1a;深入探索与实战指南 在数字化时代&#xff0c;Web前端技术已经成为构建优秀用户体验的基石。想要精通Web前端&#xff0c;不仅需要掌握扎实的基础知识&#xff0c;还需要具备丰富的实战经验和深入的思考。本文将从四个方面、五个方面、六个方面和七…

访问jlesage/firefox镜像创建的容器中文乱码问题

目录 介绍总结 介绍 最近在使用jlesage/firefox镜像创建容器的时候&#xff0c;发现远程管理家里网络的时候中文会出现乱码&#xff0c;导致整个体验非常的不好&#xff0c;网上查找资料说只要设置环境变量ENABLE_CJK_FONT1 就可以解决问题&#xff0c;抱着试一试的态度还真的成…

「网络原理」IP 协议

&#x1f387;个人主页&#xff1a;Ice_Sugar_7 &#x1f387;所属专栏&#xff1a;计网 &#x1f387;欢迎点赞收藏加关注哦&#xff01; IP 协议 &#x1f349;报头结构&#x1f349;地址管理&#x1f34c;动态分配 IP 地址&#x1f34c;NAT 机制&#xff08;网络地址映射&am…

示例:WPF中应用DataGrid读取实体DisplayAttribute特性自动自动生成列名

一、目的&#xff1a;通过重写DataGrid的OnAutoGeneratingColumn方法实现根据定义特性自动生成列头信息功能 二、实现 <DataGrid ItemsSource"{local:GetStudents Count50}"/>实体定义如下 public class Student{[DataGridColumn("*")][Display(Na…

iOS18那些隐藏有趣的新功能分享!

WWDC 2024开幕式结束后&#xff0c;苹果迅速向开发者推送了iOS 18的首个测试版更新。很多果粉和小编一样&#xff0c;第一时间进行了升级。 自定义应用图标位置和颜色、应用锁、隐藏图标、全新控制中心、新增密码应用以及照片重新排版等新功能都表现出色。这些明面上的新功能大…

java.lang.ClassCastException的java类型转换异常解决方案

一、问题描述 在系统中应用了spring的Cacheable注解功能&#xff0c;首次请求方法没问题&#xff0c;但在二次加载中&#xff0c;会抛出类转换异常&#xff0c;根本原因是&#xff1a;同一个类的加载类不同&#xff0c;既&#xff1a;applicationClassLoader 和 RestartClassL…

ncnn 和 rknn 自定义算子对比实现

你提供了两种实现自定义 Sigmoid 算子的代码。第一种是使用NCNN 并行化的实现,第二种是一个自定义算子函数用于 RKNN(Rockchip Neural Network)的实现。下面我将详细解释这两种实现,并提供一些优化建议。 实现 1:使用NCNN 并行化实现的 Sigmoid 算子 int Sigmoid::forwa…