先获取到这个最后的元素然后在remove它
m_pList[i]=m_pList[i+1]的话,一定不行, 因为for循环不会改变i值。
但如果是 m_pList[k]=m_pList[k+1] 需要修改for循环里面对k的赋值和判断,然后可以运行。
如果不改k的话,是不能实现想要的效果的(会删掉从这个元素 后一个元素的值)。
严格来讲是没有用的,之所以这样写是为了在测试的时候,看一下我们删除的对不对,通过*e就可以看出来
因为这个表的下标是从0开始的。
这里代指线性表里的存储空间,实际上就是一维数组。因为顺序表的存储方式跟数组是一样的
我理解这个demo就是个最基本的例子,正常是要判断m_iSize,但是判断这个就太复杂了,还要重新申请内存,还有拷贝和清除之前的数据啥的,和vector一样。做为一个教学案例应该就暂不考虑这个了
需要,否则当顺序表已满的时候再插入元素会报错,顺序表中最后一位元素做后移时没有多的内存空间保存
按道理来说是这样的。但是你在实际用的时候要输入一个下标的,在选择下标的时候就已经在大脑里判断是否符合了(吧)
假如后面部分超出,之后把插入的元素再删除,超出的部分会再回来吗?还是就当初释放掉了?
直接把值放在i的位置上就可以了
是的,我也有这个问题,请问你解决了吗
一开始都写不出来,是需要背的,后面就好了,熟能生巧
是的,m_iLength是顺序表的总长,m_length是顺序表的最后一个数据元素的位序,所以 m_length = m_iLength -1.
理论上是应该-1的,可以自己改一下。
线性表是从0开始的,并不是从1开始的。所以最后一个数是长度-1 ,也就是m_iLenght-1
值操作操作不了变量本身,用指针可以,视频中参数表中&e1,这样写相当于隐含的初始化了*e。建议你学习下值传递和引用传递的区别会对你有帮助。
其实我也觉得应该这样,删除函数应该有判空操作,线性表为空的话,直接返回false;插入函数应该有判满操作,线性表已满时也直接返回false,这样应该更严谨一些。
插入前要先判断线性表空间是否已经满,老师疏忽了
不知道你问的是顺序表还是链表,如果是顺序表的话就是要删除元素后一位元素开始,依次往前移动一位即可。然后Length--就可以了。
链表的话,这样应该说不通!
这么写是会存在一个下标越界问题,就是当数组已满的情况下。其他情况是不会出现越界的,老师应该是故意留下了这个bug,方便后面讲课的时候重点申明。
插入和删除有成功失败两种情况,bool类型用于表示这两种情况,然后返回给函数调用者。