当前课程知识点:数据结构 > 第4章 数组 > 4.1 数组的定义 > 讲解
同学们好,本章
我们来学习
数组
可能有些同学之前学习过C语言、Java语言这样的高级语言
在使用这些高级语言,编写程序的时候
应该说
数组是经常使用到的一类语法
既然编程语言已经提供了数组的语法
我们为什么还要在数据结构这门课程当中,专门去学习数组
这种数据结构呢
这是因为,在使用编程语言提供的数组语法的时候
我们要清楚地知道
数组在内存当中的存储实质
尤其是多维数组的存储实质
除此之外
我们还要理解随机存取它的本质
在本章当中
我们还会学习到特殊矩阵以及稀疏矩阵的压缩存储
还有相关的算法
现在,我们进入第一节:数组
数组是若干相同类型元素构成的有限序列
数组当中每一个元素的类型,都是相同的
比如,数学上的向量
这里为了方便描述
我将这样一个向量,写成了列向量的形式
这个向量包含m个元素
我们用编程语言来描述这个项链,自然而然地
就想到用一维数组来描述
前面我们讲过,数组
实际上是一种复合的数据类型
或者说结构的数据类型
结构化的数据类型
它里面的元素,又可以是结构化的数据类型
也就是说
数组里面的元素,又可以是数组
从而就引申出了多维数组的概念
比如,上面这样一个包含m个元素的
一维数组,假设它里面的每一个元素又是一个包含n个元素的一维数组
现在,A这个一维数组
我们把它的每一个元素都写出来
实际上,它就是一个包含
m*n个元素的二维数组
利用二维数组,就可以用来描述数学上的矩阵
如果这个二维数组当中每一个元素又是一个一维数组
这时候的A就会变成一个三维数组
可以用来描述数学上的张量
如此下去
A就可以变成一个理论上无限维的多维数组
我们再来看数组的操作
事实上
对于二维数组来说
除了能够将每一行,当作一个整体之外
我们也能将每一列当作一个整体
也就是说
这样一个m行n列的二维数组
既可以认为是由m个元素构成的一维数组
也就是每一行当作一个整体
也可以把它看成由n个元素组成的一维数组
也就是把每一列当作一个整体
对于数组这种数据结构来说
我们可能要做初始化
也就是在内存当中,为数组分配存储空间
也可能销毁一个数组已占的存储空间
可能去获得指定位置的某一个数组元素的值
也有可能去修改这个值
不像我们前面学习的数据结构
对于数组来说
一旦建立,数组当中的元素
它们之间的关系,是不会再发生变动的
也就是说
我们从来不会对数组进行增加元素
删除元素这样的操作
我们顶多
是获得里面的某一个值,或修改里面的某一个值,数组的结构
我们是不会去变动的
也就是说
元素之间的逻辑关系,我们是不会去变动的
既然我们不会去修改数组的结构、增删元素
等操作
所以,数组
我们只采用顺序存储结构
而不像我们前面介绍的数据结构
通常都会提及顺序和链式两种结构
事实上
对于所有的高级语言,数组
都是以顺序结构来实现的
-讲解
-作业
-讨论1
-讨论2
-1.1 数据结构是什么
--讲解
--作业
-1.2 概念和术语
--讲解
--作业1
--作业2
-1.3 抽象数据类型
--讲解(上)
--讲解(下)
--作业
-1.4 算法及其设计要求
--讲解
--作业
-1.5 算法分析与度量
--讲解(上)
--讲解(下)
--作业1
--作业2
--讨论
-2.1 概念及ADT
--讲解
--作业
-2.2 线性表的顺序实现——顺序表
--讲解(上)
--讲解(中)
--讲解(下)
--作业1
--作业2
-2.3 线性表的链式实现——链表
--讲解(上)
--讲解(中)
--讲解(下)
--作业1
--作业2
-2.4 线性表的应用——多项式
--讲解
--作业
-讨论
-3.1 栈的定义及ADT
--讲解
--作业
-3.2 栈的顺序实现——顺序栈
--讲解
--作业
-3.3 栈的应用
--讲解
--作业
-3.4 栈与递归
--讲解(上)
--讲解(下)
--作业
-3.5 队列的定义及ADT
--讲解
--作业
-3.6 队列的顺序实现——循环队列
--讲解(上)
--讲解(下)
--作业
-讨论
-4.1 数组的定义
--讲解
--作业
-4.2 数组的顺序实现
--讲解
--作业1
--作业2
-4.3 特殊矩阵的压缩存储
--讲解
--作业
-4.4 稀疏矩阵的压缩存储
--讲解(上)
--讲解(下)
--作业
-讨论
-5.1 概念及术语
--讲解
--作业
-5.2 二叉树及其性质
--讲解
--作业1
--作业2
-5.3 二叉树的存储
--讲解
--作业
-5.4 二叉树的遍历及创建
--讲解(上)
--讲解(下)
--作业
-5.5 线索二叉树
--讲解
--作业
-5.6 树与森林
--讲解
--作业
-5.7 Huffman树
--讲解(上)
--讲解(下)
--作业
-讨论
-6.1 概念和术语
--讲解
--作业
-6.2 存储与实现
--讲解(上)
--讲解(下)
--作业
-6.3 遍历
--讲解(上)
--讲解(下)
--作业
-6.4 最小生成树
--讲解(上)
--讲解(下)
--作业1
--作业2
-6.5 拓扑排序
--讲解
--作业
-6.6 最短路径
--讲解
--作业
-讨论
-7.1 概念和术语
--讲解
--作业
-7.2 静态查找表
--讲解(上)
--讲解(下)
--作业
-7.3 二叉排序树
--讲解(上)
--讲解(下)
--作业
-7.4 平衡二叉树
--讲解
--作业
-7.5 哈希表
--讲解(上)
--讲解(下)
--作业
-讨论
-8.1 概念
--讲解
--作业
-8.2 插入排序
--讲解(上)
--讲解(下)
--作业
-8.3 交换排序
--讲解(上)
--讲解(下)
--作业
-8.4 选择排序
--讲解(上)
--讲解(中)
--讲解(下)
--作业
-8.5 归并排序
--讲解
--作业
-讨论