一、数据结构基本概念

数据结构基本概念

  • 一、数据结构基本概念
    • 1.基本概念和术语
      • 1.1数据(Data)
      • 1.2 数据元素(Data element)
      • 1.3 数据项 (Data Item)
      • 1.4 数据对象 (Data Object)
      • 1.5 数据结构 (Data Structure)
        • 1.5.1逻辑结构
          • 1.5.1.1 线性结构
          • 1.5.1.2 非线性结构
          • 1.5.1.3 集合结构
          • 1.5.1.4 线性结构
          • 1.5.1.5 树形结构
          • 1.5.1.6 图状结构或网状结构
        • 1.5.2 存储结构
          • 1.5.2.1顺序存储结构:
          • 1.5.2.2 链式存储结构:
          • 1.5.2.3 索引存储结构;
          • 1.5.2.4 散列存储结构或哈希存储结构:
      • 1.6 数据类型和抽象数据类型
        • 1.6.1 数据类型(Data Type)
        • 1.6.2 抽象数据类型 (Abatract Data Type,ADT)

一、数据结构基本概念

1.基本概念和术语

1.1数据(Data)

  • 是能输入计算机且能被计算机处理的各种符号的集合。

  • 是信息的载体。

  • 是对客观事物符号化的表示。

  • 能够被计算机识别、存储和加工。

      包括:数值型数据:整数、实数等;非数值型的数据:文字、图像、图形、声音等;
    

1.2 数据元素(Data element)

  • 是数据的基本单位,在计算机程序中通常作为一个整体进行考虑和处理;
  • 也简称为元素,或称为记录、结点或者顶点;
  • 一个数据元素由若干个数据项组成;

表1.1 学生表
|学号|  姓名 |    性别    |     出生日期      |      政治面貌     |
0001	关羽	男	2001.2.3	团员
0002	刘备	男	1999.3.4	党员
0003	张飞	男	2002.6.18	群众

1.3 数据项 (Data Item)

  • 构成数据元素的不可分割的最小单位。

表1.1 学生表
学号	姓名	性别	出生日期	政治面貌
0001	关羽	男	2001.2.3	团员
0002	刘备	男	1999.3.4	党员
0003	张飞	男	2002.6.18	群众

【注】数据、数据元素、数据项三者之间的关系:数据 > 数据元素 > 数据项

1.4 数据对象 (Data Object)

  • 是性质相同的数据元素的集合,是数据的一个子集
    【注】数据元素与数据对象:

  • 数据元素——组成数据的基本单位

      与数据的关系:是集合的个体。
    
  • 数据对象——性质相同的数据元素的集合

      与数据的关系:集合的子集。
    

1.5 数据结构 (Data Structure)

数据结构这门课着重关注的是数据元素之间的关系,和对这些数据元素的操作,而不是关心集体的数据项的内容。
  • 数据元素不是孤立存在的,它们之间存在着某种关系,数据元素相互之间的关系称为结构(Strcture)。
  • 是指相互之间存在一种或多种特定关系的数据元素集合。
  • 或者说,数据结构是带结构的数据元素的集合。

【注】

  • 同样的数据元素,可以组成不同的数据结构;

  • 不同的数据元素,可以组成相同的数据结构。

      数据结构包括以下三个方面的内容:1. 数据元素之间的逻辑关系,也称为逻辑结构2. 数据元素及其关系在计算机内存中的表示(又称为映像),成为数据的物理结构或者数据的存储结构3. 数据的运算和实现,即对数据元素可以施加的操作以及这些操作在相应的存储结构上的实现
    

数据结构的两个层次

1.逻辑结构

  • 描述数据元素之间的逻辑关系
  • 与数据的存储无关,独立于计算机
  • 是从具体问题抽象出来的数据模型

2.物理结构(存储结构)

  • 数据元素及其关系在计算机存储器中的结构(存储方式)
  • 是数据结构在计算机中的表示

3.逻辑结构与存储结构的关系:

  • 存储关系是逻辑关系的映像与元素本身的映像
  • 逻辑结构是数据结构的抽象,存储结构是数据结构的实现
  • 两者综合起来建立了数据元素之间的结构关系
1.5.1逻辑结构

逻辑结构的种类:

划分方式一:

  • 线性结构
  • 非线性结构

划分方式二:

  • 集合结构
  • 线性结构
  • 树形结构
  • 图状结构或者网状结构
1.5.1.1 线性结构

有且只有一个开始和一个终端结点,并且所有节点都最多只有一个直接前驱和一个直接后继。

例如:线性表、栈、队列、串
1.5.1.2 非线性结构

一个结点可能有多个直接前驱和直接后继

例如:树、图
1.5.1.3 集合结构

结构中的数据元素之间除了同属于一个集合的关系外,无任何其他关系

集合结构:由若干个元素组成,没有前驱后继关系,也没有父子关系。通常用于处理不同的数据类型,如包含整数、字符或者任意对象的集合。

在这里插入图片描述

1.5.1.4 线性结构

结构中的数据元素之间存在着一对一的线性关系

线性结构:由若干个数据元素组成,有明显的前驱后继关系,例如数组、链表、栈和队列。其中,数组是连续的内存空间,链表是离散的内存空间。
  • 除了第一个元素,所有元素都有唯一前驱
  • 除了最后一个元素,所有元素都有唯一后继
    在这里插入图片描述
1.5.1.5 树形结构

结构中的数据元素之间存在着一对多的层次关系

树状结构:由若干个节点组成,节点之间有明显的父子关系,根节点是整棵树的入口,叶子节点是没有子节点的节点。常见的树状结构有二叉树、堆、红黑树等等。

在这里插入图片描述

1.5.1.6 图状结构或网状结构

结构中的数据元素之间存在着多对多的任意关系

图结构:由若干个顶点和边组成,边可以是有向或无向的。每个顶点可以有一些相关的属性信息。图结构包括稠密图和稀疏图。稠密图指边数接近于节点数平方,而稀疏图指边数远小于节点数平方。

在这里插入图片描述

1.5.2 存储结构
1.5.2.1顺序存储结构:
  • 用一组连续的存储单元依次存储数据元素,数据元素之间的逻辑关系有元素的存储位置来表示

      C语言中用数组来实现顺序存储结构
    

顺序存储:顺序存储是将数据元素按照其逻辑顺序连续地存储在一块连续的内存空间中。

	常见的顺序存储结构包括数组和顺序表。数组的元素在内存中是连续存储的,通过索引访问元素速度较快,但插入和删除操作需要移动元素,效率较低。

在这里插入图片描述

1.5.2.2 链式存储结构:
  • 用一组任意的存储单元存储数据元素,数据元素之间的逻辑关系用指针来表示

      C语音中用指针来实现链式存储结构
    

链式存储:链式存储是通过使用指针或引用来连接数据元素,每个元素保存着指向下一个元素的指针。

常见的链式存储结构包括单链表、双链表和循环链表。链式存储结构能够动态地分配内存,插入和删除元素效率较高,但访问元素需要遍历链表从头到尾,效率较低。

在这里插入图片描述

1.5.2.3 索引存储结构;
	1.在存储节点信息的同时,还建立附加的索引表2索引表中的每一项成为一个索引项3.索引项的一般形式为:(关键字,地址)4.关键字是能唯一标识一个结点的那些数据项
  • 若每个节点在索引表中都有一个索引项,则该索引表称之为稠密索引(Dense Index)。
  • 若一组结点在索引表中只对应一个索引项,则该索引表称之为稀疏索引(Sparse Index)。

索引存储:索引存储是在数据记录外部建立附加的索引表,索引表中的每个记录包含两部分:索引项和数据地址。通过索引项可以快速定位到对应的数据。

	常见的索引存储结构包括有序索引、散列索引和倒排索引。索引存储结构通过维护索引表来提高数据的检索速度。

在这里插入图片描述

1.5.2.4 散列存储结构或哈希存储结构:
  • 根据结点的关键字直接计算出该节点的存储地址。

散列存储:散列存储是根据关键字直接计算出数据元素的存储位置,通过查找关键字和对应存储位置进行快速访问。

常见的散列存储结构包括散列表和哈希表。散列存储结构通过散列函数将关键字映射到存储位置,可以实现快速的插入、删除和查找操作。

在这里插入图片描述

1.6 数据类型和抽象数据类型

1.在使用高级程序设计语言编写程序时,必须对程序中出现的每个变量、常量或表达式,明确说明他们所属的数据类型2.一些最基础的数据结构可以用户数据类型来实现,如数组、字符串等3.而另一些常用的数据结构,如栈、队列、树、图等,不能直接用数据类型来表示4.高级语言中的数据类型明显的或隐含的规定了在程序执行期间变量和表达的所有可能得取值范围,以及在这些数值范围上所允许进行的操作

数据类型的作用:

  • 约束变量或常量的取值范围
  • 约束变量或常量的操作
1.6.1 数据类型(Data Type)

定义:数据类型是一组性质相同的值的集合以及定义于这个值集合上的一组操作的总称

数据类型=值的集合+值集合上的一组操作
  • 原子类型:其值不可再分的数据类型

     例如:int类型、bool类型等
    
  • 结构类型:其值可以在分解为若干个成分(分量)的数据类型

    例如:

    // 定义一个具体的结构类型,表示一个坐标信息                                                                                                        
    struct Coordinate{int x;   //横坐标int y;   //纵坐标
    

}

1.6.2 抽象数据类型 (Abatract Data Type,ADT)

定义:是指一个数学模型以及定义在此数学模型上的一组操作

  • 由用户定义,从问题抽象出数据模型(逻辑结构)

  • 还包括定义在数据模型上的一组抽象运算(相关操作)

  • 不考虑计算机内的具体存储结构与运算的具体实现算法

      抽象数据类型的形式定义:抽象数据类型可用(D,S,P)三元组表示其中:D是数据对象;S是D上的关系集;P是对D的基本操作集
    

一个抽象数据类型的定义格式如下:

ADT   抽象数据类型名{
数据对象:<数据对象的定义>
数据关系:<数据关系的定义>
基本操作:<基本操作的定义>
}ADT  抽象数据类型名
其中:数据对象、数据关系的定义用伪代码描述

基本操作的定义格式为:

  • 基本操作名(参数表)
  • 初始条件:<初始条件描述>
  • 操作结果:<操作结果描述>

基本操作定义格式说明:

  • 参数表: 赋值参数只为操作提供输入值

      引用参数以&打头,除可提供输入之外,还将返回操作结果
    
  • 初始条件:描述操作执行之前数据结构和参数应满足的条件

      若不满足,则操作失败,并返回相对应出错信息。若初始条件为空,则省略之。
    
  • 操作结果:说明操作正常完成之后,数据结构的变化状况和应返回的结果。

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

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

相关文章

基于 Validator 类实现 ParamValidator,用于校验函数参数

目录 一、前置说明1、总体目录2、相关回顾3、本节目标 二、操作步骤1、项目目录2、代码实现3、测试代码4、日志输出 三、后置说明1、要点小结2、下节准备 一、前置说明 1、总体目录 《 pyparamvalidate 参数校验器&#xff0c;从编码到发布全过程》 2、相关回顾 使用 TypeV…

Every Nobody Is Somebody 「每小人物都能成大事」

周星驰 NFT Nobody即将发售&#xff0c;Nobody共创平台 Every Nobody Is Somebody Nobody 关于Nobody&#xff1a;Nobody是一款Web3共创平台&#xff0c;旨在为创作者提供一个交流和合作的场所&#xff0c;促进创意的产生和共享。通过该平台&#xff0c;创作者可以展示自己的作…

git秘钥过期 ERROR: Your SSH key has expired

文章目录 1、错误提示Your SSH key has expired2、登录Github确认3、重新设置秘钥 1、错误提示Your SSH key has expired 使用git命令时遇到Github 的 SSH Key秘钥过期&#xff0c;提示错误ERROR: Your SSH key has expired 2、登录Github确认 首先登录Github查看&#xff…

L1-015 跟奥巴马一起画方块(Java)

美国总统奥巴马不仅呼吁所有人都学习编程&#xff0c;甚至以身作则编写代码&#xff0c;成为美国历史上首位编写计算机代码的总统。2014年底&#xff0c;为庆祝“计算机科学教育周”正式启动&#xff0c;奥巴马编写了很简单的计算机代码&#xff1a;在屏幕上画一个正方形。现在…

某查查请求头参数加密分析(含JS加密算法与Python爬虫源码)

文章目录 1. 写在前面2. 请求分析3. 断点分析4. 扣加密JS5. Python爬虫代码实现 【作者主页】&#xff1a;吴秋霖 【作者介绍】&#xff1a;Python领域优质创作者、阿里云博客专家、华为云享专家。长期致力于Python与爬虫领域研究与开发工作&#xff01; 【作者推荐】&#xff…

基于SELinux三权分立配置方法

1.系统安装 系统安装完成后,系统当前的SELinux配置为: # cat /etc/selinux/config SELINUX=enforcing SELINUXTYPE=targeted 2.SELinux环境准备 # yum install setools policycoreutils.x86_64 selinux-policy-mls.noarch setroubleshoot.x86_64 setools-console -y 3.SELin…

嵌入式c语言学习笔记:可重入函数与不可重入函数

什么是可重入函数与不可重入函数&#xff1f; 在一个多任务环境中&#xff0c;一个函数如果可以被多次重复调用&#xff0c;或者被多个任务并发调用&#xff0c;函数在运行过程中可以随时随地被打断&#xff0c;并不影响该函数的运行结果&#xff0c;我们称这样的函数为可重入…

Redis 常用的数据类型及用法

1. 字符串&#xff08;Strings&#xff09; 字符串是最基本的 Redis 数据类型。它可以包含任何形式的数据&#xff0c;比如文本、数字或二进制数据。 基本用法&#xff1a; 设置值: SET key value获取值: GET key删除键: DEL key自增: INCR key追加值: APPEND key value 示…

vue element plus TimePicker 时间选择器

用于选择或输入日期 TIP 在 SSR 场景下&#xff0c;您需要将组件包裹在 <client-only></client-only> 之中 (如: Nuxt) 和 SSG (e.g: VitePress). 任意时间点# 可以选择任意时间 提供了两种交互方式&#xff1a;默认情况下通过鼠标滚轮进行选择&#xff0c;打开…

三、java线性表(顺序表、链表、栈、队列)

java线性表 三、线性表1.1 顺序表1.2 链表1.2.1 单向链表&#xff08;Singly Linked List&#xff09;1.2.2 双向链表&#xff08;Doubly Linked List&#xff09; 1.3 LinkedList VS ArrayList1.3.7 使用 LinkedList 的场景 1.4 栈1.5 队列 三、线性表 线性表是一种经典的数据…

LeetCode2696. Minimum String Length After Removing Substrings

文章目录 一、题目二、题解 一、题目 You are given a string s consisting only of uppercase English letters. You can apply some operations to this string where, in one operation, you can remove any occurrence of one of the substrings “AB” or “CD” from s…

手撕单链表(单向,不循环,不带头结点)的基本操作

&#x1d649;&#x1d65e;&#x1d658;&#x1d65a;!!&#x1f44f;&#x1f3fb;‧✧̣̥̇‧✦&#x1f44f;&#x1f3fb;‧✧̣̥̇‧✦ &#x1f44f;&#x1f3fb;‧✧̣̥̇:Solitary-walk ⸝⋆ ━━━┓ - 个性标签 - &#xff1a;来于“云”的“羽球人”。…

mercury靶机

文章妙语 不与伪君子争名&#xff0c;不与真小人争利&#xff0c;不与执拗人争理&#xff0c;不与匹夫争勇&#xff0c;不与酸儒争才。不与蠢人施恩 一、信息收集 主机探测 端口探测 探测主机详细版本信息 8080开了http服务 目录扫描 robots.txt目录下什么也没有 二&#xff0…

Python | Iter/genartor | 一文了解迭代器、生成器的含义\区别\优缺点

前提 一种技术的出现&#xff0c;需要考虑&#xff1a; 为了实现什么样的需求&#xff1b;遇到了什么样的问题&#xff1b;采用了什么样的方案&#xff1b;最终接近或达到了预期的效果。 概念 提前理解几个概念&#xff1a; 迭代 我们经常听到产品迭代、技术迭代、功能迭代…

oracle常用内部表和视图

Oracle数据库中存在大量内部表和视图&#xff0c;主要用于系统管理和维护。这里列出一些常用的内部视图&#xff08;数据字典视图&#xff09;和内部表&#xff1a; **常用内部视图&#xff08;Data Dictionary Views&#xff09;&#xff1a;** 1. **用户权限相关视图&#…

零基础学习数学建模——(二)数学建模的步骤

本篇博客将详细介绍数学建模的步骤。 文章目录 引例&#xff1a;年夜饭的准备第一步&#xff1a;模型准备第二步&#xff1a;模型假设第三步&#xff1a;模型建立第四步&#xff1a;模型求解第五步&#xff1a;结果分析第六步&#xff1a;模型检验第七步&#xff1a;模型应用及…

爬虫案例—抓取小米商店应用

爬虫案例—抓取小米商店应用 代码如下&#xff1a; # 抓取第一页的内容 import requests from lxml import etree url ‘https://app.mi.com/catTopList/0?page1’ headers { ‘User-Agent’: ‘Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (K…

go中for range的坑以及解决方案

一、for range的坑 相信小伙伴都遇到过以下的循环变量的问题&#xff0c;那是因为循环的val变量是重复使用的&#xff0c;即仅有一份。也就是说&#xff0c;每次循环后赋给val的值就会把前面循环赋给val的值替换掉&#xff0c;所以打印出来的值都是最后一次循环赋给val的值。 …

openeuler的安装和两台linux主机配置ssh实现互相免密登陆

一、openeuler的安装 下载OpenEuler - 网址&#xff1a;https://www.openeuler.org/zh/download/archive/ - 版本选择&#xff1a;openEuler 22.03 LTS SP2 &#xff08;镜像文件&#xff09; &#xff0c;即长期更新版 设置自定义硬件 内存&#xff1a;推荐2GB 处理器&…

oracle基本用户管理和权限分配

1.用户与模式的关系&#xff0c;一一对应的关系 2.创建与管理用户 2.1创建用户语法 CREATE user wdf IDENTIFIED by tiger--创建用户wdf,密码tiger DEFAULT tablespace users--用户的默认表空间 quota 10M on users;--在表空间的占用最大空间 注意&#xff1a;用户创建以后…