数据结构-绪论

目录

  • 前言
  • 一、从问题到程序
  • 二、数据结构的研究内容
  • 三、理解数据结构
    • 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)** 顾名思义是 自举聚合 自举…

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

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

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

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

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

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

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

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

「网络原理」IP 协议

🎇个人主页:Ice_Sugar_7 🎇所属专栏:计网 🎇欢迎点赞收藏加关注哦! IP 协议 🍉报头结构🍉地址管理🍌动态分配 IP 地址🍌NAT 机制(网络地址映射&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;第一时间进行了升级。 自定义应用图标位置和颜色、应用锁、隐藏图标、全新控制中心、新增密码应用以及照片重新排版等新功能都表现出色。这些明面上的新功能大…

网络安全等级保护制度详解,一文掌握核心要点!

一、等级保护制度发展情况 等级保护制度的法律依据 《计算机信息系统安全保护条例》&#xff08;1994年General Office of the State Council第147号令&#xff09; 公安部主管全国计算机信息系统安全保护工作。 计算机信息系统实行安全等级保护&#xff0c;安全等级的划分…

目录文件管理

文章目录 Linux目录结构树形目录结构根目录常见的子目录子目录的作用 查看及检索文件查看文件内容cat格式 more格式操作方法 less格式操作方法 head格式 tail格式 统计文件内容wc格式选项 检索和过滤文件内容grep格式选项查找条件 备份及恢复文档压缩命令gzip bzip2格式压缩解压…

Redis 网络模型

一、用户空间和内核空间 1.1 linux 简介 服务器大多采用 Linux 系统&#xff0c;这里我们以 Linux 为例来讲解&#xff0c;下面有两个不同的 linux 发行版&#xff0c;分别位 ubuntu 和 centos&#xff0c;其实发行版就是在 Linux 系统上包了一层壳。 任何 Linux 发行版&#…

详细图文手把手教你阿里云注册域名如何托管到CloudFlare DNS服务

1.第一步&#xff1a;注册并登录Cloudflare账号&#xff0c;点击右上角“添加站点”&#xff0c;进入下图页面填写域名&#xff0c;点击继续。 2.第二步&#xff1a;进入页面滑动到最下方&#xff0c;选择Free免费套餐&#xff0c;再次点击继续。 3.第三步&#xff1a;这个页面…

c# 二维图形绘制实践

1.等边三角形 1.1 概述 1.2 代码 using System; using System.Drawing; using System.Windows.Forms;public partial class TriangleForm : Form {public TriangleForm(){//InitializeComponent();// 确保窗体大小足够大&#xff0c;以容纳三角形 this.ClientSize new Siz…

AbMole带你探索细胞的“铁”门:Piezo1通道在椎间盘退变中的关键角色

在生物医学领域&#xff0c;铁是细胞功能不可或缺的元素&#xff0c;但铁的异常积累却可能成为细胞的“隐形杀手”。最近&#xff0c;一项发表在《Bone Research》上的研究&#xff0c;为我们揭开了铁代谢与椎间盘退变之间神秘联系的一角。这项研究不仅深化了我们对铁离子通道P…

5个超实用1688选品技巧!轻松出单999+

1、研究市场需求 通过市场调查和分析&#xff0c;了解目标市场的消费者喜好和趋势。选择具有市场需求且竞争相对较小的产品类别。 用店雷达热销商 品榜和飙升商 品榜。比如做女装类目&#xff0c;选择“女士T恤”我们可以根据日、周、月为时间维度下商品的销售笔数、件数、销…

Browserslist: caniuse-lite is outdated。浏览器列表:caniuse lite已经过时???

一、最近运行项目启动时提示 Browserslist: caniuse-lite is outdated. Please run: npx update-browserslist-dblatest Why you should do it regularly: https://github.com/browserslist/update-db#readme 这要是这一句&#xff0c;Browserslist: caniuse-lite is outdated.…

大神出新品,吴恩达开源机器翻译智能体项目

节前&#xff0c;我们星球组织了一场算法岗技术&面试讨论会&#xff0c;邀请了一些互联网大厂朋友、参加社招和校招面试的同学。 针对算法岗技术趋势、大模型落地项目经验分享、新手如何入门算法岗、该如何准备、面试常考点分享等热门话题进行了深入的讨论。 合集&#x…

走近科学之《netty 的秘密》

Approaching science《the secret of netty》 IO 相关概念、五种 IO 模型、BIO NIO AIO 特点及区别、NIO 设计原理及核心组件、netty 简介及应用场景、netty 线程模型&#xff08;Reactor 线程模型&#xff09;、netty 设计原理及核心组件、netty 常用技巧实现&#xff08;心跳…

Django REST framework序列化器详解:普通序列化器与模型序列化器的选择与运用

系列文章目录 Django入门全攻略&#xff1a;从零搭建你的第一个Web项目Django ORM入门指南&#xff1a;从概念到实践&#xff0c;掌握模型创建、迁移与视图操作Django ORM实战&#xff1a;模型字段与元选项配置&#xff0c;以及链式过滤与QF查询详解Django ORM深度游&#xff…