当前课程知识点:数据结构(上) > 第二章 向量(上) > (c)无序向量 > 02C-3 插入
再来考察向量的插入算法
具体来说 也就是
如何将某一个特定的元素
插入到向量的特定位置
在原来向量中
因为所有的元素
都必须是紧邻排列的
所以为了能够插入新的元素
我们需要做一个调整
也就是将对应这个位置之后的
所有的那些元素
称作它的后继
整体的呢 构成一个后缀
进行一个整体的右移操作
这个right shift操作 效果就是
所有的后缀元素都向右
也就是向后 移动一个单元
从而空出一个单元
此时才可以将
指定的那个元素纳入其中
从而完成插入
整个算法
可以描述并且实现如下
具体来说
刚才我们所说的右移操作
可以通过这个for循环完成
每个元素确实都是后移一位
当所有的后移完成之后
我们再将新的那个元素
纳入到这个rank所指的位置上
当然同时还要更新
整个向量的规模
那么需要解释的有两个问题
第一个问题 大家注意到
在这个地方 for循环的方向
是从最后一直向前
不断地递减
也就是说
整个的移动的方向
虽然是向右
但是所有元素移动的
先后次序却是后优先的
我们用图来表示 也就是
最后这个元素先移动
接下来 是次后这个元素
再往前 这样一直一直
直到最前面的那个元素
我们说这是必要的
如果把这个次序颠倒过来
会怎么样?
会有危险
也就是说 会出现数据
在无意中被覆盖的问题
第二个需要解释的情况
就是大家注意到这一句
这里有一个expand()
也就是我们所说的扩容的操作
现在大家可能已经注意到
它的必要性了
因为确实在某些时候
这个向量可能已经是满载了的
所以为了插入新的这个元素
我们在后移的过程中
必然会出现
我们曾经讲过的上溢
在这种时候需要
对它进行扩容处理
比如说
按照前面推荐的方法
加倍处理
这样一件事情
完全由expand()完成
-选课之前
--写在选课之前
--宣传片
-考核方式
--考核方式
-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)深度优先搜索--作业
-第六章 图--本章测验