数据结构的一个题。

本过程从顺序存储结构的线性表a中删除第i个元素起的k个元素

我想知道这样的算法用 j<=k 循环,岂不是只把 i+k 后的 k 个元素往前移了吗,剩下的元素与 i+k+k 个元素间岂不是有k个元素大小的缝隙??
求指示。。。

第1个回答  推荐于2016-09-02
分析:
用你上面图中的十个格子举例子,编号1-10,要删除第3,4个元素。此时,i = 2(从0开始算,第三个元素就是i = 2), k = 2(要删除2个元素)
这里for循环循环了三次,循环第一次,将第3个元素的值替换为第5个元素的值,循环第二次就是将第4个元素的值替换为第6个元素的值。循环第三次,将第5个元素的值替换为第7个元素的值。
for循环后面一条语句的意思是a列表的长度减2。
结论:
这个逻辑是有问题的,的确是有你所说的空隙存在。正确的写法应该是for(j = 0; j < a.length -i - k; j++)这个for循环才是把后面的元素全部往前覆盖2个元素的位置。本回答被提问者和网友采纳
第2个回答  2014-09-22
中间不会有缝隙,因为a.elem[j+i]是一位一位的移动,不会出现间歇.但是表的长度会减少,末端出现空档.追问

那移走的那两个是怎么回事,后面的又没有补上来啊

追答

如果a.length-i-k大于k的话会有少量补上,但是还是没有缝隙.我给你画个图.但是此程序有误,应该把for循环改掉,改为for(j=0;j<a.length-i-k;j++),不然真的有大空档,出现K个空档.

第3个回答  2014-09-22
要是题目就这个的话,我感觉这个程序写的确是有问题的。
相似回答