读《数据结构(c语言版)》(清华严蔚敏版)的问题(P24算法2.5)
第24页算法2.5
Status ListDelete_Sq(SqList &L,int i,ElemType &e){
// 在顺序线性表L中删除第i个元素,并用e返回其值
// i的合法值为1≤i≤ListLength_Sq(L)
if((i <1) || (i> L.length)) return ERROR; // i值不合法
p=&(L.elem[i-1]); // p为被删除元素的位置
e=*p; // 被删除元素的值赋给e
q=L.elem+L.length-1; //表尾元素的位置
for(++p;p <=q;++p) *(p-1)=*p; // 被删除元素之后的元素左移(问题出在这句)
--L.length; // 表长减1
return OK;
}// ListDelete_Sq
为什么不用for(;p <q;++p) *p=*(p+1);//比原来少了一个++p,用+运算代替了-运算
我觉得这样效率会高一点点(既然讨论算法,当然是越高越好).
[解决办法]
呵呵 干什么啊 :)
[解决办法]
节省了一条机器指令?
算法只考虑数量级上的区别,连O(2n)=O(n),一条机器指令更不在考虑范围内
[解决办法]
基本上没什么差别,循环次数没有减少
[解决办法]
都没问题