中易网

【C语言·数据结构】关于线性表里的顺序表的插入算法

答案:3  悬赏:80  
解决时间 2021-03-06 14:27
书上的算法中,算法步骤大致是先增加表容量,然后修改基址,然后插入元素、后移元素,然后再最后一步时才增加表长

++L.length

这么做不要紧吗?先后移元素,然后再增加表长,是不是会影响到最后一个元素的地址啊?

还是说,其实表长只是一个整形变量而已,只是一个数值,并不代表其他什么?
最佳答案
你的问题中 已经提到 第一步 是 增加表容量
只要容量增加了 可以 容纳 所有的元素 就不会有地址上的问题了
至于 表长度 正如你所说 他只是一个变量而已 什么时候增加都是可以的
而且 正确的表长增加时机 也应该是 在插入操作完成后
因为 这样 可以 在插入操作 发生不可预期的错误而中断时 用来辅助判断
是否 成功插入
全部回答
你这里的线性表是特指链表吧?要不然是不会需要把长度加1的。 链表理论上是没有长度限制的(但实际上你不能无限地增长它,因为计算机的内存是有限的) 在插入一个元素后再把长度加1是没有任何问题的,反而这是一个较为妥当的做法,因为如果你一开始就把长度加一,但元素插入失败的话,那就会出现问题。 另外,你要明确一个观点,“后移元素”并不是真的把它在内存中的位置后移了,只是把它挂在了当前插入的这个结点后面,对任何的其他元素的地址都不会有影响的。 表长其实是一个方便你管理链表的东西,它可以记录当前链表的长度,让你较为容易地判断链表是否为空,也可以让你限定链表的长度(通过设置一个max值,当length达到max时,不准再插入元素)
好几处错误,帮你改了下,详见注释: 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; }
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
4399小游戏网 有哪些游戏是纯鼠标操作的呢?
红枣吃多了会怎么样 红枣吃多了的调理方法
林英村地址在什么地方,我要处理点事
庙岭头小学地址在哪,我要去那里办事
咨询广西甘蔗的收获时间
若你用心爱着我,怎么舍得我难过
计生委食堂我想知道这个在什么地方
乐盏鲜炖对青少年儿童有什么效果?
电脑运行时会突然黑屏是因为灰尘多的原因吗散
兰州电机股份有限公司怎么去啊,有知道地址的
爸爸妈妈和宝宝一起玩游戏怎么画
挂号信这个状态是什么意思?
有伤口应注意吃些什么食物
星光不锈钢地址在什么地方,想过去办事
子洲县一城四创工作领导小组办公室怎么去啊,
推荐资讯
健康100健身俱乐部(仙岳店)怎么去啊,有知道
盘锦理工与沈阳理工哪一个更好
个人去税务开普通发票,钱可以转入税务的账户
梦见死去了姑姑活过来还和我一起玩代表什么
美国惠乐Waiora真的有用吗?
电子科技大学北京龙凤航空公司毕业后有国家承
三和手机维修中心地址在什么地方,想过去办事
刑事拘留后的讯问与通知是怎样的
老式筒灯怎么安装图解
红丹桂地径32,米径20,18,高6米冠幅7米值多
海王星摩托车加油门感觉堵得慌是什么原因,,
怎样注册豆客
手机登qq时,显示手机磁盘不足,清理后重新登
刺客的套装怎么选啊?