第一章:绪论
1. 概述
1.1 推开数据结构的大门
算法+数据结构 = 程序
- 程序:是计算机指令的组合,用来控制计算机的工作流程,以及完成一定的逻辑功能任务。
- 算法:是程序的逻辑抽象,是解决某类客观问题的策略。
- 数据结构:是数据及其之间关系的反映,从逻辑结构和存储(物理)结构两个层面进行刻画
1.2 利用计算机实现问题求解:一个从问题到程序的实现过程
目的:为了能够快速解决实际的应用问题!
主要步骤:
确定问题求解的数学模型(或逻辑结构) : 深入分析问题,确定处理对象,根据逻辑关系给出数学模型。
确定存储结构:根据对象的逻辑结构及其所需功能,选择合适的组织形式并将对象映射到存储器中。
设计算法:讨论设计算法的具体步骤。
编程并测试结果:上机测试。
总结: 程序设计的本质,在于解决两个主要问题。
一是根据实际问题选择一种好的数据结构。
二是设计一个好的算法。
后者的好坏在很大程度上取决于前者。
1.3 认识了一个大佬:数据结构
- 数据结构与数学、计算机硬件和软件有着十分密切的关系
- 它是介于数学、计算机硬件和软件之间的一门计算机类电子信息类相关专业的核心课程之一
- 是高级程序设计语言、编程原理、操作系统、数据库、人工智能等课程的基础。
- 也广泛应用于信息科学、系统工程、应用数学以及各种工程技术领域。
- 数据结构解决具体问题:
- 数据的逻辑结构(数学模型)
- 数据的存储结构
- 数据操作与运算
2. 基本概念与术语学习
2.1 数据与数据结构
数据(Data):数据是信息的载体,是对客观事物的符号表示。能够被计算机程序识别、存储、加工和处理。数据还包括图像、声音等非数值数据。
数据元素(Data Element):是数据的基本单位,是一个个体。相当于表的一行。数据元素又可称为结点、顶点和记录。在树和图中,一个数据元素用一个圆圈表示。
数据项(Data Item):是数据元素的组成部分。相当于表的列。数据项又可分为两种:一种是简单数据项;另一种是组合数据项,例如:出生年月,可进一步划分为"年","月"和"日"等更小的数据项。
数据对象(Data Object):性质相同的数据元素的集合。相当于表。数据对象中的数据元素不会是孤立的,而是彼此相关的,这种彼此之间的关系称之为“结构”。
数据结构(Data Structure):相互之间存在一种或多种特定关系的数据元素的集合。
- 逻辑结构
- 逻辑结构:数据元素之间的逻辑关系,与数据存储无关,独立与计算机之外。
- 数据元素之间存在开始结点,终端结点,以及前驱和后继。除了开始和终端结点,其他结点由有一个前驱和一个后继。开始结点有一个后继,终端结点有一个前驱。
- 数据元素之间按照逻辑关系的特性来分,可将数据结构归纳为4类:
- 集合:元素之间没有关系,比较松散。
- 线性结构:元素之间存在==一对一==关系。
- 树形结构:元素之间存在==一对多==关系。
- 图形结构:元素之间存在==多对多==关系。
—— 有时也将逻辑结构分为两大类,一类是线性结构,另一类是非线性结构。其中树、图和集合都属于非线性结构。
—— 数据的逻辑结构需要2部分:数据元素(data)、数据元素之间的关系(relationship)
- 从形式上可采用一个二元组来定义,定义形式为:
- 存储结构
- 存储结构:数据的存储结构,也称为物理结构,是数据的逻辑结构在计算机的实现。
- 它包括数据元素在计算机中的值存储表示和逻辑关系的存储表示
- 在计算机在最小的数据表示单位是二进制数的一位(bit)。
- 存储结构的4种方式:
- 顺序存储:在一片连续的存储空间中进行存储,数据元素的逻辑位置和物理位置关系保持一致。例如:数组
2. 链式存储:数据元素可以存储在任意的物理位置上,需要额外的部分存放在逻辑关系的指针来表示。例如:链表
3. 索引存储:存储数据的同时,额外的存储一个索引表。在查询时可以提高效率。
4. 散列存储:一般情况物理上可以将数据元素存储在一片连续的区域内,需要通过散列函数hash(哈希)
来确定存储位置。在查询时可以提高效率。
- 数据的操作
- 初始化:创建、销毁:
- 数据操作:插入/添加、删除、修改
- 数据使用:查找、遍历
—— 数据的逻辑结构、存储结构和运算是数据结讨论中不可分割的3个方面。他们中任何一个不同都将导致不同的数据结构。例如: