数据结构与算法基础

1.2. 基本概念和术语1

1.2.1 数据、数据元素、数据项和数据对象

  • 数据(Data)
  • 数据元素(Data Element)
  • 数据项(Data Item)
  • 数据对象(Data Object)

1. 数据(Data)

  • 数据

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

      • 信息的载体
      • 是对客观事物符号化的表示
      • 能够被计算机识别、存储和加工
    • 包括:

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

2. 数据元素

  • 数据元素

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

3. 数据项

  • 数据项

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

    • 数据、数据元素、数据项三者之间的关系:数据>数据元素>数据项

      • 数据元素是一行记录

      • 数据项是一行记录中的一小块

      • 列:学生表>个人纪录>学号、姓名等…

4. 数据对象(Data Object)

  • 数据对象

    • 是__性质相同的数据元素的集合__,是数据的一个

      • 列如:

        • 整数数据对象集合N={0,±1,±2,…}
        • 字母字符数据对象是集合C={‘A’,‘B’,…,‘Z’}
        • 学籍表也可看作一个数据对象
  • 数据元素与数据对象

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

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

1.2.2 数据结构(Data Structure)

数据结构

  • 数据元素不是孤立存在的,他们之间存在着某种关系,数据元素相互之间的关系称为 结构(Structure)
  • 是指相互之间存在一种或多种特定的关系的数据元素集合
  • 或者说,数据结构是带结构的数据元素的集合

数据结构包括以下三个方面的内容:

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

数据结构两个层次:

​ - 逻辑结构、物理结、数据运算和实现

  • 逻辑结构

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

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

    • 是数据结构在计算机中的表示

  • 逻辑结构与存储结构的关系:

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

逻辑结构的种类

划分方法一

  1. 线性结构(一 一对应)

    有且仅有一个开始和一个终端节点,并且所有节点都最多只有一个直接前趋和一个直接后续。

    例如:线性表、栈、列队、串

  2. 非线性结构(一对多)

    一个节点可能又多个直接前趋和直接后续

    列如:树、图

划分方法二——四类基本逻辑结构

  1. 集合结构:结构中的数据元素之间除了 同属于一个集合的关系外,无任何其他关系
  2. 线性集合:结构中的数据元素之间存在一对一的线性关系
  3. 树形结构:结构中的数据元素之间存在着一对多的层次关系

存储结构的种类

四种基本的存储结构

  • 顺序存储结构

    • 用一组 连续的存储单元依次存储数据元素,数据元素之间的逻辑关系由元素的存储位子来表示
    • C语言中用数组来实现顺序存储结构
  • 链式存储结构

    • 用一组任意的存储单元存储数据元素,数据元素之间的逻辑关系用指针来表示。

    • C语言中用指针(地址)来实现链式存储结构

    • 列如:(bat,cat,eat,...,mat)
      130|cat|135|
      135|eat|160|
      160|mat|Null|
      
  • 索引存储结构

    • 在存储节点信息的同时,还建立附加的索引表(目录)
    • 索引表中的每一项称为一个索引项
    • 索引项一般形式是:(关键字、地址)
    • 关键字是能唯一标识一个节点的哪些数据项
    • 若每个节点在索引表中都由一个索引项,则该索引表称为稠密索引(Dense Index)。若一组节点在索引表中只对应一个索引项,则该索引表称为稀疏索引(Sparse Index)
  • 散列存储结构

    • 根据节点的关键字直接计算除该节点的存储地址

1.2.3 数据类型和抽象数据类型

  • 在使用高级程序设计语言编写程序时,必须对程序中出现的每个变量、常量或表达式,明确说明它所属的数据类型

    • 列如,c语言中:

      • 提供了int、char、float、double等基本数据类型
      • 素组、结构、共用体、枚举等构造数据类型
      • 还有指针、空(void)类型
      • 用户也可以typedef自己定义数据类型
  • 一些最基本数据结构可以用数据类型来实现,如数组、字符串等;

  • 而另一些常用的数据结构,如栈、队列、树、图等,不能直接用数据类型来表示。

在高级语言里面定义这一些数据类型有什么用呢?

  • 高级语言中的数据类型明显地或隐含地规定了在程序执行期间变量和表达式的所有可能的取值范围,以及在数值范围上所允许经行操作

    • 列如:C语言中定义变量i为int类型,就表示i时[-min,max](-32768,-32762)范围的整数,在这个整数集上可以进行+、-、*、\、%等操作
  • 数据类型的作用

    • 约束变量或常量的取值范围
    • 约束变量或常量的操作

数据类型(Data Type)

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

    • 数据类型= 值的集合+ 值集合上的一组操作

抽线数据类型(Abstract Data Type,简称:ADT)

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

1.3 抽象数据类型的表示与实现

1.4 算法和算法分析

数据结构与算法基本笔记相关推荐

  1. 数据结构与算法学习笔记之 从0编号的数组

    数据结构与算法学习笔记之 从0编号的数组 前言 数组看似简单,但掌握精髓的却没有多少:他既是编程语言中的数据类型,又是最基础的数据结构: 一个小问题: 为什么数据要从0开始编号,而不是 从1开始呢? ...

  2. 数据结构与算法学习笔记之 提高读取性能的链表(上)

    数据结构与算法学习笔记之 提高读取性能的链表(上) 前言 链表(Linked list)比数组稍微复杂一点,在我们生活中用到最常见的应该是缓存,它是一种提高数据读取性能的技术,常见的如cpu缓存,浏览 ...

  3. 数据结构与算法-java笔记一 更新中

    数据结构与算法-java笔记一 更新中 数据结构与算法 什么是数据结构.算法 数据结构学了有什么用: 线性结构 数组 特点 应用 链表 存储结构 链表类型 单链表 双向链表 双向循环链表 链表与数组的 ...

  4. 数据结构与算法学习笔记——链栈

    数据结构与算法学习笔记(C语言) 链栈 在开始链栈的学习之前,我们先实现一下上一篇文章中提到的检查括号匹配的小程序,鉴于水平有限,本人就随便写一下代码好了,目标仅限于对功能的实现. /*用顺序栈这种数 ...

  5. 数据结构与算法学习笔记4:递归+分治法

    数据结构与算法学习笔记4 递归 斐波那契数列 青蛙跳台阶问题 链表倒序打印 分治法 二分查找/折半查找 Binary Search 题目1:快速幂 题目2:如何判断一个数是否为2的次幂 递归 指在函数 ...

  6. 数据结构与算法学习笔记15:最大流问题 / 二分图 / 有权无权二分图的匹配 / 匈牙利算法 / 银行家算法 / 稳定婚配

    数据结构与算法学习笔记15:最大流问题 / 二分图 / 有权无权二分图的匹配 / 匈牙利算法 / 银行家算法 / 稳定婚配 引入小题:最短路径 最大流问题(maximum flow problem) ...

  7. 数据结构与算法 学习笔记(5):字符串

    数据结构与算法 学习笔记(5)- 字符串 本次笔记记录了LeetCode中关于字符串的一些问题,并给出了相应的思路说明和代码.题目编号与LeetCode对应,方便查找. 题目1:LeetCode 13 ...

  8. 数据结构与算法学习笔记——图 C++实现

    数据结构与算法学习笔记--图 C++实现 1 概念 2 图的表示方法 3 算法 3.1 拓扑排序 3.2 图的搜索算法 3.2.1 广度优先搜索(BFS) 3.2.2 深度优先搜索(DFS) 3.3 ...

  9. 数据结构与算法学习笔记之先进先出的队列

    前言 队列是一种非常实用的数据结构,类似于生活中发排队,可应用于生活,开发中各个方面,比如共享打印机(先请求先打印),消息队列.你想知道他们是怎么工作的么.那就来一起学习一下队列吧 正文 一.队列的定 ...

  10. 数据结构与算法 学习笔记(8):字典、集合、哈希表

    数据结构与算法 学习笔记(8):字典.集合.哈希表 本次文章记录的是和字典.集合.哈希表等数据结构相关的LeetCode算法题(题号与LeetCode对应),包括其构造和使用,针对每一题或一类题给出了 ...

最新文章

  1. 灰度直方图均衡化及其实现
  2. java中集合和数据库中_java中list集合的内容,如何使用像数据库中group by形式那样排序...
  3. erlang节点互相ping,一个能ping通,另外一个不行。
  4. 80. Leetcode 1642. 可以到达的最远建筑 (堆-技巧三-事后小诸葛)
  5. 干货 | 十年经验PM手机里都装了哪些app?
  6. 笔记本电脑键盘切换_全球首款折叠屏笔记本电脑ThinkPad X1 Fold:5G高速互联拥抱PC场景融合时代...
  7. Vue.js的基本使用 学习笔记
  8. mongodb模糊查询_AWS 回击了!推出兼容 MongoDB 的 DocumentDB
  9. 串行测试 并行测试_如何通过CircleCI测试并行性增加构建时间
  10. 第三章计算机网络,第三章-计算机网络及应用.ppt
  11. Python任务调度模块APScheduler
  12. 实例079RTF文件的保存
  13. 产品设计:axure的基本使用
  14. python编写年金终值函数_财码Python管理会计小实验—投融资管理之货币时间价值...
  15. python智能机器人原理_人工智能和Python是什么关系?详细分析!
  16. vim 常用指令与设置
  17. kafka安装及配置
  18. spring boot静态资源文件的访问以及自定义
  19. ZYNQ学习笔记_GPIO实例:通过EMIO实现按键控制LED
  20. AutoCAD如何创建图层?开关图层、冻结图层、锁定图层怎么运用?

热门文章

  1. 12套高大上的后台管理系统模板,总有一套适合你
  2. 英语六级口语备考指南
  3. 全角空格和半角空格的运用
  4. 书架:以书会友,以友博书,分享读书乐趣。
  5. matlab类间散度矩阵,协方差矩阵和散布矩阵(散度矩阵)的意义
  6. iVI 4 Video Converter for Mac(mac视频转换器)
  7. iOS PerformSelector 遗漏问题
  8. 物联网专科专业必修课程_物联网工程专业主要课程大纲
  9. CSS背景(background)篇
  10. 微信小程序--实时语音识别