当前课程知识点:数据结构(上) > 第二章 向量(上) > (a)接口与实现 > 02A-2 向量ADT
所谓的向量
实际上是C++
等高级编程语言中
数组这种数据组织形式的
一个推广和泛化
我们都知道 实际上
在这些高级程序设计语言中
所谓的数组
实际上就是一段
连续的内存空间
它被均匀地划分为若干个单元
而每一个单元
都与0到n之间的
某一个整数编号
相互彼此对应
我们可以说
第0号单元或者元素
或者第1号元素、第2号元素
以及到最后的实质
第n-1个元素
这里我们也同样延用
我们此前已经约定的习惯
虽然最后这个第n个元素
实际上未必存在
我们还是把它虚拟地放在这儿
作为哨兵
以帮助我们对很多问题的思考
并且使得我们很多算法的实现
能够得以简化
既然每一个这样的元素
都与这些编号是一一对应的
所以反过来
我们通过合法区间内的编号
都可以唯一地来指代
并且访问对应的那个元素
确实如此
我们一旦知道
这个元素的下标i
就可以从A
也就是这段存储区域的
首地址出发
再向后
以s作为间隔 去数出i步
就可以得到某一个特定的单元
正因为所有这些元素的物理地址
可以按照这样一个
线性的方程来确定
所以我们也称之为
linear array
线性数组
那么向量呢
我们可以认为是
数组的抽象与泛化
它同样是由一组抽象的元素
按照刚才的线性次序封装而成的
具体来说 其中的每一个元素
依然与0到n之间的
一个合法的整数
是一一对应的
只不过在这里
我们更倾向于
把这种整数称作是
秩rank
所以原来通过下标i
进行访问的方式在这里
就可以被推广而成
是通过秩来访问
这种方式叫作
call-by-rank
也叫循秩访问
另外在向量中
元素的类型
已经得到了拓展
不限于是某一种
特定的基本类型
也因为如此
它的所有操作、管理
包括维护都更加的简化
可以通过统一的接口来完成
相应地 也会更加安全
避免一些非法和歧义的操作
同时呢 也正因为它本身
已经做了很好的封装
也可以便捷地
参与更加复杂的
一些数据结构的定制以及实现
按照抽象数据类型的规范
向量结构必须提供
一系列的操作接口
可以通过这些操作接口
对向量做各种操作
同时也只能通过这些操作接口
对向量进行操作
这里的接口功能非常的丰富
我们在后续分别介绍
它们的实现的时候
自然会介绍它们的具体含义
比如说 与其它的数据结构一样
向量也可以看作是
一组元素的集合
所以这个size
实际上返回的是
其中元素的总数
我们称之为
这个数据结构的规模
我们也可以从中取特定的元素
也可以修改其中特定的元素
甚至插入或者是删除某个元素
我们也可以判定一下
其中的元素
是否已经有序排列
如果没有有序排列
可以调用相应的接口
使之有序排列
我们也可以在它
尚未有序排列的时候
按某种算法
找到其中特定的元素
也可以在已经有序的前提下
按照某种方式
来找到其中的元素
当然为了展示一些算法的实现
我们也附加了一些其它的功能
比如说能够在
无序和有序的情况下
分别剔除
这个数据集中的重复元素
最后也是非常重要的一个接口
就是如何对这个数据集中的元素
逐一地进行枚举
并且访问一遍
我们称之为遍历
-选课之前
--写在选课之前
--宣传片
-考核方式
--考核方式
-OJ系统说明
--关于OJ
--1-注册与登录
--2-界面与选课
--3-提交测试
-关于课程教材与讲义
--课程教材与讲义
-关于讨论区
--关于讨论区
-微信平台
--html
-PA晋级申请
--PA晋级
-(a)计算
--演示
--(a)计算--作业
-(b)计算模型
-(b)计算模型--作业
-(c)大O记号
-(c)大O记号--作业
-(d)算法分析
-(d)算法分析--作业
-(e)迭代与递归
-(e)迭代与递归--作业
-(xc)动态规划
-- 演示
-(xc)动态规划--作业
-本章测验--作业
-(a)接口与实现
--02A-5 复制
-(a)接口与实现--作业
-(b)可扩充向量
-(b)可扩充向量--作业
-(c)无序向量
--02C-1 概述
--02C-3 插入
--02C-6 查找
--02C-8 遍历
-(c)无序向量--作业
-(d1)有序向量:唯一化
-(d1)有序向量:唯一化--作业
-(d2)有序向量:二分查找
-(d2)有序向量:二分查找--作业
-(d3)有序向量:Fibonacci查找
-(d3)有序向量:Fibonacci查找--作业
-(d4)有序向量:二分查找(改进)
-(d4)有序向量:二分查找(改进)--作业
-(d5)有序向量:插值查找
-第二章 向量(下)--(d5)有序向量:插值查找
-(e)起泡排序
--02E-2 改进
--02E-3 反例
-(e)起泡排序--作业
-(f)归并排序
-(f)归并排序--作业
-本章测验--作业
-(a)接口与实现
--03A-4 实现
-(a)接口与实现--作业
-(b)无序列表
--03B-2 查找
-(b)无序列表--作业
-(c)有序列表
--03C-3 查找
-(c)有序列表--作业
-(d)选择排序
--03D-1 构思
--03D-2 实例
--03D-3 实现
--03D-4 推敲
--03D-6 性能
-(d)选择排序--作业
-(e)插入排序
--03E-1 经验
--03E-2 构思
--03E-3 对比
--03E-4 实例
--03E-5 实现
-(e)插入排序--作业
-(xd)习题辅导:LightHouse
-本章测验--作业
- (a)栈接口与实现
--04A-1 栈
--04A-2 实例
--04A-3 实现
- (a)栈接口与实现--作业
-(c1)栈应用:进制转换
-第四章 栈与队列--(c1)栈应用:进制转换
-(c2)栈应用:括号匹配
-(c2)栈应用:括号匹配--作业
-(c3)栈应用:栈混洗
-第四章 栈与队列--(c3)栈应用:栈混洗
-(c4)栈应用:中缀表达式求值
-(c4)栈应用:中缀表达式求值--作业
-(c5)栈应用:逆波兰表达式
-第四章 栈与队列--(c5)栈应用:逆波兰表达式
-(d)队列接口与实现
--04D-1 接口
--04D-2 实例
--04D-3 实现
-第四章 栈与队列--本章测验
-(a)树
--05A-1 动机
--05A-2 应用
-(a)树--作业
-(b)树的表示
--05B-2 父亲
--05B-3 孩子
-第五章 二叉树--(b)树的表示
-(c)二叉树
-(c)二叉树--作业
-(d)二叉树实现
-(d)二叉树实现--作业
-(e1)先序遍历
-(e1)先序遍历--作业
-(e2)中序遍历
-第五章 二叉树--(e2)中序遍历
-(e4)层次遍历
-第五章 二叉树--(e4)层次遍历
-(e5)重构
-(e5)重构--作业
-本章测验--作业
-(a)概述
-(a)概述--作业
-(b1)邻接矩阵
-(b1)邻接矩阵--作业
-(c)广度优先搜索
--06C-2 策略
--06C-3 实现
--06C-5 实例
-(c)广度优先搜索--作业
-(d)深度优先搜索
--06D-1 算法
--06D-2 框架
--06D-3 细节
-(d)深度优先搜索--作业
-第六章 图--本章测验