书上的算法中,算法步骤大致是先增加表容量,然后修改基址,然后插入元素、后移元素,然后再最后一步时才增加表长
++L.length
这么做不要紧吗?先后移元素,然后再增加表长,是不是会影响到最后一个元素的地址啊?
还是说,其实表长只是一个整形变量而已,只是一个数值,并不代表其他什么?
【C语言·数据结构】关于线性表里的顺序表的插入算法
答案:3 悬赏:80
解决时间 2021-03-06 14:27
- 提问者网友:纹身骑士
- 2021-03-06 03:24
最佳答案
- 二级知识专家网友:不服输就别哭
- 2021-03-06 03:44
你的问题中 已经提到 第一步 是 增加表容量
只要容量增加了 可以 容纳 所有的元素 就不会有地址上的问题了
至于 表长度 正如你所说 他只是一个变量而已 什么时候增加都是可以的
而且 正确的表长增加时机 也应该是 在插入操作完成后
因为 这样 可以 在插入操作 发生不可预期的错误而中断时 用来辅助判断
是否 成功插入
只要容量增加了 可以 容纳 所有的元素 就不会有地址上的问题了
至于 表长度 正如你所说 他只是一个变量而已 什么时候增加都是可以的
而且 正确的表长增加时机 也应该是 在插入操作完成后
因为 这样 可以 在插入操作 发生不可预期的错误而中断时 用来辅助判断
是否 成功插入
全部回答
- 1楼网友:颜值超标
- 2021-03-06 05:27
你这里的线性表是特指链表吧?要不然是不会需要把长度加1的。
链表理论上是没有长度限制的(但实际上你不能无限地增长它,因为计算机的内存是有限的)
在插入一个元素后再把长度加1是没有任何问题的,反而这是一个较为妥当的做法,因为如果你一开始就把长度加一,但元素插入失败的话,那就会出现问题。
另外,你要明确一个观点,“后移元素”并不是真的把它在内存中的位置后移了,只是把它挂在了当前插入的这个结点后面,对任何的其他元素的地址都不会有影响的。
表长其实是一个方便你管理链表的东西,它可以记录当前链表的长度,让你较为容易地判断链表是否为空,也可以让你限定链表的长度(通过设置一个max值,当length达到max时,不准再插入元素)
- 2楼网友:恕我颓废
- 2021-03-06 04:18
好几处错误,帮你改了下,详见注释:
int main ()
{
linklist l;
int n,i,e,j,k;
cin>>n;
cout<>e;
inseart_ll(l,i,e); //主函数里面只输入了e,但没有加入到链表中去
}
cout<>j;
delete_ll(l,j,e); //此处参数应为 j, 与输入对应
print_ll(l);
cin>>j>>k;
inseart_ll(l,j,k); //此处参数应为 j,k 与输入对应
print_ll(l);
system ("pause");
return 0;
}
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯