首页 > 其他分享 >什么是数据结构

什么是数据结构

时间:2023-01-12 21:45:04浏览次数:47  
标签:存储 什么 元素 集合 数据结构 数据 结构

  • 数据结构是一门研究非数值计算的程序设计问题中的操作对象,以及它们之间的关系和操作等相关问题的学科。
  • 什么是数据
    • 数据是描述客观事物的符号,是计算机中可以操作的对象,是能被计算机识别,并输入给计算机处理的符号集合。
    • 需要明确:数据不仅仅包括整型、实型等数值类型,还包括字符及声音、图像、视频等非数值类型。
      • 对于整型、实型等数值类 ,可以进行数值计算。对于字符数据类型,就需要进行非数值的处理。而声音、图像、视频等可以通过编码的手段变成字符数据来处理。
    • 也就是说,我们这里说的数据,其实就是符号,而且这些符号必须具备两个前提:
      • ① 可以输入到计算机中
      • ② 能被计算机程序处理
    • 数据元素是组成数据的,有一定意义的基本单位,在计算机中通常作为整体处理,也简称元素,或被称为【一条】记录、结点、顶点。
      • 比如人类这个整体,数据元素就是张三李四王麻子;
      • 动物类这个整体,数据元素就是老虎狮子狗等。
    • 一个数据元素可以由若干个数据项组成。
      • 比如单拉出来一个人,可以由“眼、耳、鼻、口、手、脚”这些数据项组成;也可以由“姓名、年龄、性别、电话、地址”等数据项组成,具体由系统需求决定。
      • 数据项是数据不可分割的最小单位。
        • 在数据结构这门课程中,我们把数据项定义为最小单位,是为了帮助我们更好地解决问题。所以需要明确,数据项是数据的最小单位。
        • 但真正讨论问题时,数据元素才是数据结构中建立数据模型的着眼点。就像我们讨论一部电影,是讨论这部电影中角色(数据元素),而不是针对这个角色的姓名或者年龄(数据项)研究分析。
      • 数据、数据元素、数据项三者的关系:
        • 数据 > 数据元素 > 数据项
        • eg:学生表 > 个人记录 > 学号、姓名...
    • 数据对象是性质相同的数据元素的集合,是数据的子集。
      • 什么叫性质相同呢,就是指数据元素具有相同数量和类型的数据项。
        • eg:整数数据对象是集合N={0,±1,±2,...}
        • eg:字母字符数据对象是集合C={'A','B',...,'Z'}
        • eg:学籍表也可看作一个数据对象(由若干条记录构成)
      • 数据元素与数据对象
        • 数据元素是组成数据的基本单位,与数据的关系:是集合的个体。
        • 数据对象是性质相同的数据元素的集合,与数据的关系:是集合的子集。
      • 因为数据对象是数据的子集,在实际应用中,处理的数据元素通常具有相同性质,在不产生混淆的情况下,我们都将数据对象简称为数据。
  • 什么是数据结构
    • 结构,简单来说就是关系;严格来说,结构是指各个组成部分相互搭配和排列的方式;在现实世界中,不同数据元素之间并非独立的,而是存在特定关系,将这种关系称为结构。
    • 因此,数据结构是相互之间存在一种或多种特定关系的数据元素的集合。
      • 在计算机中,数据元素并不是孤立、杂乱无序的,而是具有内在联系的数据集合。
      • 数据元素之间存在一种或多种特定关系,也就是数据的组织形式。
      • 因此,编写程序时,必须分析待处理对象的特性及其之间存在的关系——这也就是研究数结构的意义所在。
    • 数据结构包含以下三个方面
      • 逻辑结构
      • 物理结构(或存储结构)
      • 数据的运算和实现,即对数据元素可以施加的操作以及这些操作在相应的存储结构上的实现。
  • 逻辑结构与物理结构
    • 按照视点的不同可以把数据结构分为逻辑结构和物理结构。
    • 逻辑结构。
      • 逻辑结构是指数据对象中数据元素之间的相互关系,这也是今后最需要关注的问题。有两种划分方式:
      • 方式一:
        • 线性结构:有且仅有一个开始和一个终端结点,并且所有结点都最多只有一个直接前驱和一个直接后继。如:线性表、栈、队列、串。
        • 非线性结构:一个结点可能有多个直接前驱和直接后继。如:树、图。
      • 方式二,分以下4种:
        • 集合结构
          • 集合结构中的数据元素除了同属于一个集合外,它们之间没有其他关系。数据结构中的集合关系就类似数学中的集合:
        • 线性结构
          • 即线性结构中的数据元素之间是一对一的关系。
        • 树形结构
          • 树形结构中的数据元素之间存在一对多的层次关系。
        • 图形结构
          • 图形结构的数据元素是多对多的关系。
        • 在用示意图表示数据的逻辑结构时,要注意两点:
          • ① 将每一个数据元素看做一个结点,用圆圈表示。
          • ②元素之间的逻辑关系用结点之间的连线表示,如果这个关系有方向,就用带箭头的连线表示。
      • 由上可知,逻辑结构是针对具体问题的。是为了解决某个问题,对问题理解的基础上,选择一个合适的数据结构表示数据元素之间的逻辑关系。
    • 物理结构/存储结构。
      • 物理结构是指数据的逻辑结构在计算机中的存储形式。实际上就是如何把数据元素及其关系存储到计算机的存储器中(又称为映像)。存储器主要是针对内存而言,像硬盘、软盘、光盘等外部存储器的数据组织通常用文件结构来描述。
      • 数据的存储结构应正确反映数据元素之间的逻辑关系(important!)如何存储数据元素之间的逻辑关系,是实现物理结构的重点和难点。存储形式有两种(后两种自己了解):
        • 顺序存储
          • 顺序存储结构是把数据元素依次存放在地址连续的存储单元里。其数据间的逻辑关系和物理关系是一致的,即数据元素之间的逻辑关系由元素的存储位置来表示。如数组。
        • 链式存储
          • 如果把顺序存储结构比作排排坐,总会有人不守规矩,插队,或者中间离队,此时整个结构时刻都会处于变化状态,顺序存储显然是无法应付这种频繁变化的结构。因此使用到叫号系统,来了领一个号,爱去哪呆着去哪,只要能及时响应即可,此时你关注的只是前一个号有没有被叫,下一个是不是你。——引出链式结构
          • 链式存储结构是把数据元素存放在任意的存储单元里,这组存储单元可以是连续的,也可以是不连续的。数据元素的存储关系无法反映其逻辑关系,因此需要指针存放数据元素的地址,以找到对应数据的位置。
          • 相比之下,链式存储就灵活许多,数据存在哪里不重要,只要有一个指针存放了相应的地址就能找到。但是链式结构的中间一环意外断开,就无法找到被断开的数据。
        • 索引存储
          • 在存储结点信息的同时,还建立附加的索引表
        • 散列存储
          • 根据结点的关键码直接计算出该结点的存储地址
    • 逻辑结构与存储结构的关系:
      • 存储结构是逻辑关系的映像与元素本身的映像。
      • 逻辑结构是数据结构的抽象,存储结构是数据结构的实现。
      • 逻辑结构是面向问题;物理结构是面向计算机,其基本的目标就是将数据及其逻辑关系存储到计算机的内存中。
      • 两者综合起来即建立了数据元素之间的结构关系。
  • 什么是数据类型
    • 指一组性质相同的值的集合,及定义在此集合上的一些操作的总称。
    • C语言中的数据类型(了解)
      • C语言中按取值不同,数据类型可以分为:原子类型、结构类型
        • 原子类型:是不可再分解的基本类型,包括整形、实数型、字符型...
        • 结构类型:由若干个类型组合而成,可再分解。如整型数组是由若干整型数据组成的。
  • 什么是抽象?什么是抽象数据类型?
    • 抽象,指抽取出事物中带有普遍性的本质。忽略掉非本质的细节,只保留解决问题所需要的信息。
    • 抽象数据类型,指一个数学模型及定义在该模型上的一组操作。包含:
      • 由用户定义,从问题中抽象出数据模型(逻辑结构)。
      • 定义在数据模型上的一组抽象运算(相关操作)。
      • 不考虑计算机内的具体存储结构与运算的具体实现算法。
    • 抽象数据类型的形式定义
      • 可用(D,S,P)三元组表示
        • D是数据对象
        • S是D上的关系集
        • P是对D的基本操作集
    • 抽象数据类型不仅指语言中已经定义并实现的数据类型,还有编程者在设计软件程序时自己定义的数据类型。抽象数据类型体现了程序设计中问题分解、抽象和信息隐藏的特性。
  •  

标签:存储,什么,元素,集合,数据结构,数据,结构
From: https://www.cnblogs.com/GanSinba/p/17048011.html

相关文章

  • Pytorch的cross_entropy为什么等于log_softmax加nll_loss
    首先我们要知道nll_loss是怎么算的,看下面的代码label1=torch.tensor([0,3])pred1=torch.tensor([[0.2,0.7,0.8,0.1],[0.1,0.3,0.5,0.7]])lo......
  • 为什么我放弃Java,选择Kotlin(靠特灵)?
    今天查了一下,竟然发现Oracle的JDK听说是收费了。也就是说,你要用于生产环境的话,Oracle一旦查到你,你就要交钱的。我本身是个穷光蛋,哪还有钱交给Oracle。为了避免繁琐的法律制......
  • 为什么使用消息队列?
    理解:但是比较核心的有3个:解耦、异步、削峰解耦:A把数据放到MQ中,BCD需要就取,不需要就不取。A不用管BCD的需求异步:BCD会把数据存入对应的MQ,A可以直接取,可达到异步缩减时......
  • Linux内核为什么会发生soft lockup?【转】
    转自:https://blog.csdn.net/21cnbao/article/details/108250786提到softlockup,大家都不会陌生:BUG: soft lockup - CPU#3 stuck for 23s! [kworker/3:0:32]......
  • vue data为什么是函数
    vuedata是函数的原因:1、防止data复用;2、data独立性;3、作用域;4、js的特性。总结来说,如果data是一个函数的话,这样每复用一次组件,就会返回一份新的data(类似于给每个组......
  • 揭开 TLS 握手的神秘面纱:它是什么以及它是如何工作的
    传输层安全性(TLS)旨在为网络通信增加安全性。就是浏览互联网时HTTP和HTTPS的区别。使用TLS为客户端和服务器增加了额外的工作,但它有其好处,包括:机密性:TLS将流量包装......
  • 揭开 TLS 握手的神秘面纱:它是什么以及它是如何工作的
    传输层安全性(TLS)旨在为网络通信增加安全性。就是浏览互联网时HTTP和HTTPS的区别。使用TLS为客户端和服务器增加了额外的工作,但它有其好处,包括:机密性:TLS将流量包......
  • 什么是动物解剖教学虚拟仿真实训软件?
    动物解剖学是众多高职院校畜牧兽医专业的重要基础课程,学生需要掌握大量的专业词汇,同时需要有较强的实践操作能力,一些抽象的知识点学生往往难以理解,导致学生对这门课程的学......
  • 当你输入网址,小手一点,然后发生了什么?
    摘要:输入网址并点回车,后台到底发生了什么。透析HTTP协议与TCP连接之间的千丝万缕的关系。掌握为何是三次握手四次挥手?time_wait存在的意义是什么?全面图解重点问题,再也......
  • 题目:该代码将会输出什么
    A.10B.9C.8D.7#include<stdio.h>intmain(){inta,b;for(a=1,b=1;a<=200;a++){if(b>=20)break;if(b%3==1){b+=3;continue;}b=......