数据结构中有关顺序表的问题:为何判断插入位置是否合法时if语句中用length+1,而移动元素的for语句中只用length?
2024-08-23 21:56:46
bool ListInsert(SqList &L,int i, ElemType e){
if(i<||i>L.length+) //判断i的范围是否有效
return false;
if(L.length>=MaxSize) //当前存储空间已满,不能插入
return false;
for(int j=L.length;j>=i;j--) //将第i个元素及之后的元素后移
L.data[j] = L.data[j-];
L.data[i-] = e;
L.length++;
return true;
}
(有关顺序表)
第一个问题回答:
1.首先明确length的含义?
——length表示当前表中拥有元素的个数,也就是顺序表的表长
2.为什么if语句中用length+1
——要判断当前插入的 i 的位置是否合法,也就是必须存在可以包含 i 这个位置的表长(在确定数组长度是可以包含的之后,是表长不是数组长度),在其中很容易理解(因为数数是从1开始,顺序表中的也是从 1 开始数数)所以不能输入 i 小于 1。如果我们不是限定为 i>L.length+1 而是限定为 i>L.length+2 ,此时我们就会发现(当给表中添加一个新的元素后的表的长度只增加 1 ,而我们规定判别i>L.length+2,就会导致表中在1到 i>L.length+2 中出现一个断空,从而违背了顺序表的定义(一组地址连续的存储单元逻辑上相邻的两个元素的物理位置上也相邻),而如果我们是规定i>L.length时我们就会将最后一个元素丢失。
第二个问题回答:
在for循环中时,此时我们就要考虑数组下标和位序的关系了。虽然for循环中定义 j=L.length,但是它映射到数组时候对应为数量的L.length+1(注:数组的开始下标为0)
最新文章
- Taylor定理证明
- Xamarin安装和跳坑指南
- Linux系统启动过程分析
- 【原创】Java实现手机号码归属地查询
- codevs1500 后缀排序
- C# 面向对象之概念理解(3)
- bootstrap实现手风琴功能(树形列表)
- Linux内核监控模块-1-驱动模块(LKM)开发(以一个简单的hello world程序为例)
- web前端学习(2):开始编写HTML
- java.text.ParseException: Unparseable date: ";2015-06-09 hh:56:19";
- NestedScrollView嵌套ViewPager
- c# 操作Word总结(车)
- 在Java中,关于.Class()与.getCalss与.getClass().getName()的区别
- Educational Codeforces Round 50
- 51Nod - 1384
- GO linux LiteIDE
- zookeeper 启动显示started,jps查看进程却没有,解决方法
- 怎样用纯HTML和CSS更改默认的上传文件按钮样式
- 9 并发编程-(线程)-守护线程&;互斥锁
- 计算F1Score
热门文章
- c常用函数-strcpy和strncpy
- Laravel模板引擎Blade中section的一些标签的区别介绍
- cb02a_c++_数据结构_顺序容器_STL_list类_双向链表
- selenium(9)- Xpath的详细使用
- Java并发编程-深入Java同步器AQS原理与应用-线程锁必备知识点
- Java WebService学习笔记 - Axis(一)
- .NET Core请求控制器Action方法正确匹配,但为何404?
- NFC芯片选型及基本电路框架
- 入门大数据---Hbase搭建
- Digix2019华为算法精英挑战赛代码