当前课程知识点:数据结构(上) > 第二章 向量(上) > (a)接口与实现 > 02A-1 接口与实现
欢迎回到数据结构的课堂
我们今天开始进入到第二章向量
与下一章将要介绍的
列表结构一样
向量同属于最最基本的线性结构
我们笼统地称之为线性序列
在这一章我们主要围绕
这种基本的数据结构
展示和讨论
两个方面的问题
首先如何根据统一的接口规范
来定制并且实现一个数据结构
这种定制的方法和实现的形式
将会被我们后续的
数据结构所延用
另外 我们也会围绕
这种最基本的数据结构
展示如何通过更加有效的算法
使得我们对外的接口
能够更加高效率地工作
在这里讨论的
查找以及排序等算法
都将成为后续章节
相关数据结构
高效实现的重要基础
我们首先需要
辨析一组非常相关
但是又非常容易弄混的概念
也就是抽象数据类型
以及我们这里所说的数据结构
那么什么是Abstract Data Type呢?
以及什么是Data Structure呢?
可以从字面上给出定义
不妨来读一下
所谓的抽象数据类型
其实就是在一组数据的模型上
定义的一组操作
那么什么叫作数据结构呢?
是基于某种特定的语言
真正实现的一套完整的算法
听懂了吗?
我想你现在的感觉
肯定跟我当初学习
这两个概念一样
一头雾水
所以不妨把镜头拉回到
我们此前比较熟悉的程序语言
先不要考虑什么抽象数据类型
我们先来看看
什么叫作Data Type
数据类型
比如在高级程序设计语言中
int 也就是整型
这就是一个数据类型
而float也是
还有呢 char
诸如此类地
那么这种数据类型能做什么呢?
没错 我们能定义其中的一个成员
比如n是一个整数
从此以后我们就可以使用它了
我们也可以说x是一个浮点数
c是一个字符
没错 我们凡是这样指定了某一个元素
是来自于某一个数据类型
或者说属于某一个数据类型
那么它就自然地具有了
这种数据类型的特点
包括什么呢?
支持相应地处理方法
比如说运算
那么这里那些操作的运算
具体是如何实现的
我们并不知道
我们也并不需要知道
没错 这是最重要的
把这样的一个概念抽象出来
施加到我们所将要实现的
那些数据结构上
比如马上就要实现的Vector
我们希望在使用的时候
能够参照数据类型的这种形式
把它等同地当作是
一个数据类型
比如说我可以来定义
我的一个Vector结构
包括下一章将要介绍的List
我们也可以类似地来定义它
这种使用方法
使得我们可以将数据结构
与数据类型等同起来
我们只需要知道它
所提供的那些操作
比如说向量的查找、排序
而不需要去关心它其中的细节
比如说这些操作是如何实现的
那么从这个意义上讲
它就是一个经过了
抽象以后的数据类型
所以我们称之为
Abstract Data Type
经过以上的解释
我相信你可能对这两个概念
稍微理解的深入一点了
为了获得更形象的认识
我们不妨来举个例子
在这里
我们可以将数据结构
比喻成某种产品
比如说汽车
那么相关的呢 有两类人
首先是用户
我们笼统地称之为
应用Application
另一类人呢
是汽车这种产品的
设计和制造者
称这个为
实现Implementation
这两类人所关心的
以及他们的职责是不同的
作为用户而言
他只关心这种产品的外在特性
能够提供的功能
而实现者呢
则需要对这些功能
以及特性具体如何落实负责
我们说在这二者之间
实际上是有某种形式的一个协议
没错 也就是使用说明书
产品手册
而这种手册或者说明
在数据结构的使用者
与数据结构内部算法的
设计者之间
达成了这么样一个协议
两类人可能互不见面
互不相识
但是他们通过这样一个规范
可以很好地彼此沟通
并且有效地合作
我们接下来就来看看
向量这种结构
是如何按照
这种ADT的规范
加以定制并且实现的
-选课之前
--写在选课之前
--宣传片
-考核方式
--考核方式
-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)深度优先搜索--作业
-第六章 图--本章测验