C语言,顺序表插入元素操作。判断i是否在范围内时,i>L->length+1,为什么要加1?

不加不也表示插入位置大于当前顺序表的长度吗

首先,这里的i应该是位置,而不是下标。当i的值是[1,L->length+1]时,都是有效的插入位置。1表示用待插入元素取代第1个元素,L->length+1表示插入到最后一个元素的后面,实际上就是追加一个元素。只有当i<1 || i>L->length+1时插入位置才无效。如果改成i<1 || i>L->length,则会不允许在位置L->length+1进行插入,即不允许追加,当然不行。追问

可以再问你一个问题吗? list *L和list &L有什么不一样

追答

*L中L是指针变量,系统会为指针变量分配存储空间,这个空间用来保存其它list类型的变量的地址。对于指针变量L,保存的是哪个list类型的变量的地址,一般是可以改变的。

而&L中L是引用,是某个list类型的变量li的一个别名,所有对L的操作,就等同于是在li上进行的。对于引用L,一旦成了li的一个别名,就永远是li的一个别名,不能再改变成其它list类型的变量的一个别名。

记得采纳哦。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2020-05-25
因为这个i是从1开始,即i等于1就是把数据插入在下标0的位置,看看后面的L->data[i-1]=e;这里就说明了1对应0下标,2对应1下标,类推。。。
知道这一点后,我们来假设一下,假设顺序表里有3个元素,即L->length=3,我们要把一个元素插入到最后,那么i是多少,插入最后下标是3,根据上面所说那么i=3+1(因为插入的时候下标会减1);则i=4,说明i的范围是1到4,所以i>L->length+1转化一下就是4>3+1是不成立的,说明i值在范围内可以插入,如果L->length后面不加1,则4>3语句成立,就不能插入数据返回ERROR了,所以这里必须要+1,要不然元素就不能插入到最后。追问

可以再问你一个问题吗? list *L和list &L有什么不一样

追答

*L是指针 &L是引用
改成&L,则函数里的L->要改成L.
比如L.length

第2个回答  2020-06-07
这就好比你去插队,假如这个队有3个人,队伍的长度(表长)等于3对吧,但此时你可选择插队的位置一共有4个,分别是:1.第一个人前面 2.第一个人后面 3.第二个人后面 4.第三个人后面,这样说哥们你理解了么
相似回答