第一章 数据结构绪论

基本概念和术语

数据

描述客观事物的符号,计算机中可以操作的对象,能被计算机识别并输入给计算机处理的符号的集合。包括整型、实型等数值类型和字符、声音、图像、视频等非数值类型。

数据元素

组成数据的、有一定意义的基本单位,在计算机中通常作为整体处理。也被称为记录。

  • 例如:禽类的数据元素为鸡、鸭、鹅等。

数据项

一个数据元素可以由若干个数据项组成,数据项是数据不可分割的最小单位。

  • 例如:对于人这个数据元素,可以有眼、耳、嘴、鼻等数据项,也可以有姓名、年龄、性别等数据项,具体选取哪些数据项视所构建的系统决定。

数据对象

是性质相同的数据元素的集合,是数据的子集。其中“性质相同”指数据元素具有相同数量和类型的数据项。通常将数据对象简称为数据。

数据结构

是相互之间存在一种或多种特定关系的数据元素的集合。计算机中的数据元素并不是孤立、杂乱无序的,而是具有内在联系的数据集合。

逻辑结构与物理结构

逻辑结构

是指数据对象中数据元素之间的相互关系。

用示意图表示数据的逻辑结构时:

  • 将每一个数据元素看作一个节点,用圆圈表示;
  • 元素之间的逻辑关系用节点之间的连线表示,如果这个关系是有方向的,那么用带箭头的连线表示。
集合结构

集合结构中的数据元素除了同属于一个集合外,互相之间没有其他关系。

线性结构

线性结构中数据元素之间是一对一的关系。

树形结构

树形结构中数据元素之间存在一种一对多的层次关系。

图形结构

图形结构的数据元素是多对多的关系

物理结构(存储结构)

物理结构是指数据的逻辑结构在计算机中的存储形式。数据的存储结构应正确反映数据元素之间的逻辑关系,如何存储数据元素之间的逻辑关系是实现物理结构的重点和难点。

顺序存储结构

把数据元素存放在地址连续的存储单元里,其数据间的逻辑关系和物理关系是一致的。如数组。

数据结构中经常会需要添加新的数据元素、去掉旧的数据元素,面对这种时刻变化的情况,顺序结构不够科学。

链式存储结构

链式存储结构把数据元素存放在任意的存储单元里,这组存储单元可以是连续的,也可以是不连续的。数据元素的存储关系并不能反应其逻辑关系,需要用一个指针存放数据元素的地址,这样通过地址就可以找到相关联的数据元素的位置。

逻辑结构是面向问题的,物理结构则是面向计算机的,其基本目标就是将数据及其逻辑关系存储到计算机的内存中。

抽象数据类型

数据类型

数据类型是指一组性质相同的值的集合及定义在此集合上的一些操作的总称。例如在高级语言中,每个变量、常量和表达式都有各自的取值范围,类型就用来说明变量或表达式的取值范围和所能进行的操作。

在C语言中,按照取值的不同,数据类型可以分成两类:

  • 原子类型:是不可以再分解的基本类型,包括整型、实型、字符型等;
  • 结构类型:由若干个类型组合而成,是可以再分解的。例如。整型数组是由若干整型数据组成的。

抽象数据类型

对已有数据类型进行抽样,就得到了抽象数据类型。

抽象数据类型(Abstract Data Type, ADT)是指一个数学模型及定义在该模型上的一组操作。抽象数据类型的定义仅取决于它的一组逻辑特性,与其在计算机内部如何表示和实现无关。

例如各种计算机,无论是超算、PC、平板、智能手机等,都拥有“整数”类型,也需要整数间的运算,那么整型就是一个抽象数据类型,尽管它在上面提到的各种计算机中的实现方法可能不一样,但由于其定义的数学特征相同,在编程者看来,它们就是相同的。因此,抽象的意义在于数据类型的数学抽象特性。

抽象数据类型体现了程序设计中问题分解、抽象和信息隐藏的特性。抽象数据类型把实际生活中的问题分解为多个规模小且容易处理的问题,然后建立一个计算机能处理的数据模型,并把每个功能模块的实现细节作为一个独立的单元,从而使具体实现过程隐藏起来。

这里给出描述抽象数据类型的标准格式:

ADT 抽象数据类型名
Data数据元素之间逻辑关系的定义
Operation   操作1初始条件操作结果描述操作2......操作n......
endADT

总结回顾

数据结构相关概念

数据结构定义

数据结构是相互之间存在一种或多种特定关系的数据元素的集合。

数据结构分类

抽象数据类型及其描述方法

ADT 抽象数据类型名
Data数据元素之间逻辑关系的定义
Operation   操作1初始条件操作结果描述操作2......操作n......
endADT

转载于:https://www.cnblogs.com/communedefence/p/8513152.html

数据结构学习笔记(一)——《大话数据结构》相关推荐

  1. 数据结构学习笔记(七):哈希表(Hash Table)

    目录 1 哈希表的含义与结构特点 1.1 哈希(Hash)即无序 1.2 从数组看哈希表的结构特点 2 哈希函数(Hash Function)与哈希冲突(Hash Collision) 2.1 哈希函 ...

  2. 数据结构学习笔记(六):二叉树(Binary Tree)

    目录 1 背景知识:树(Tree) 2 何为二叉树(Binray Tree) 2.1 二叉树的概念与结构 2.2 满二叉树与完全二叉树 2.3 二叉树的三种遍历方式 3 二叉树及其遍历的简单实现(Ja ...

  3. 数据结构学习笔记(五):重识字符串(String)

    目录 1 字符串与数组的关系 1.1 字符串与数组的联系 1.2 字符串与数组的区别 2 实现字符串的链式存储(Java) 3 子串查找的简单实现 1 字符串与数组的关系 1.1 字符串与数组的联系 ...

  4. 数据结构学习笔记(四):重识数组(Array)

    目录 1 数组通过索引访问元素的原理 1.1 内存空间的连续性 1.2 数据类型的同一性 2 数组与链表增删查操作特性的对比 2.1 数组与链表的共性与差异 2.2 数组与链表增删查特性差异的原理 3 ...

  5. 数据结构学习笔记——顺序表的基本操作(超详细最终版+++)建议反复看看ヾ(≧▽≦*)o

    目录 前言 一.顺序表的定义 二.顺序表的初始化 三.顺序表的建立 四.顺序表的输出 五.顺序表的逆序输出 六.顺序表的插入操作 七.顺序表的删除操作 八.顺序表的按位和按值查找 基本操作的完整代码 ...

  6. Python数据结构学习笔记——链表:无序链表和有序链表

    目录 一.链表 二.无序链表 实现步骤分析 三.无序链表的Python实现代码 四.有序链表 实现步骤分析 五.有序链表的Python实现代码 结语 一.链表 链表中每一个元素都由为两部分构成:一是该 ...

  7. Python数据结构学习笔记——队列和双端队列

    目录 一.队列的定义 二.队列 实现步骤分析 三.队列的Python实现代码 四.队列的应用 六人传土豆游戏 五.双端队列的定义 六.双端队列 实现步骤分析 七.双端队列的Python实现代码 八.双 ...

  8. Python数据结构学习笔记——栈

    目录 一.栈的定义和特性 (一)栈的定义 (二)栈的反转特性 二.实现分析步骤 三.栈的Python实现代码 四.栈的应用 (一)匹配圆括号 (二)匹配符号 (三)模2除法(十进制转二进制) (四)进 ...

  9. 数据结构学习笔记:利用栈实现进制转换

    数据结构学习笔记:利用栈实现进制转换 一.除基倒取余法示意图 二.编写十进制转换成二进制Python程序 1.源代码 2.运行结果 其实Python提供了一

  10. 数据结构学习笔记:利用Python列表实现栈结构

    数据结构学习笔记:利用Python列表实现栈结构 利用Python列表实现栈结构.有两种实现方式: 1.将列表的末尾(rear)作为栈顶(top) 2.将列表的前端(front)作为栈顶(top) 一 ...

最新文章

  1. Java设计模式(学习整理)---单例模式
  2. select 统计数量_leetcode题库-sql练习精讲系列--十三、简单分组统计类问题
  3. android string拼接字符串_为什么阿里巴巴不建议在循环体中使用+进行字符串拼接?...
  4. jquery中ajax应用中的通用ajax()函数
  5. python 今日头条 控制手机_你知道Python脚本控制安卓手机可以用来做什么吗?
  6. plsql查询无结果集_何恺明一作,刷新7项检测分割任务,无监督预训练完胜有监督...
  7. 基于web的电影院订票系统(毕设系统,到手可用)
  8. 3d Max如何移除和取消网格显示
  9. FlexSim仿真软件入门笔记:基本操作、快捷键
  10. PTAM + OpenCV3.4.1 + Ubuntu16.04
  11. Saltstack入门到精通教程(五):Jinja详解
  12. 百词斩不认识单词例句导出
  13. SQL:with as用法
  14. 如何确定网站的关键词呢
  15. 安卓机自动肝手游脚本
  16. 总结了一些微信小程序推广方法
  17. 过年了教你自己动手写一个小游戏给表弟玩-猜数字小游戏
  18. algorithm java_Java KeyPairGenerator getAlgorithm()用法及代码示例
  19. 磁盘阵列柜性能介绍(一)
  20. UDS诊断系列之三 ISO14229协议介绍(下)

热门文章

  1. mysql text字段导出_Mysql数据库的各种命令:
  2. 硬件信息修改大师_零成本学习之单片机硬件开发(1)
  3. Linux装ntfs后内存不够,Linux_安装Ubuntu后无法使用NTFS硬盘或移动硬盘,  在安装Ubuntu系统后,存在 - phpStudy...
  4. 模糊推理机制 matlab,基于模糊综合评判推理机制的学生素质评价系统设计与实现...
  5. java 李刚 pdf_Java数据库技术详解(李刚) PDF_源雷技术空间
  6. zemax光学设计超级学习手册_穿越十年的一个ZEMAX光学设计案例
  7. 波纹扩散_C4D_动画amp;RS波纹扩散效果J_014
  8. C++中const关键字的使用总结
  9. duilib设置滚动条自动滚动到底
  10. CUL8R的完整形式是什么?