按元素值查找LocateElement(L,e):该运算顺序查找第一个值域与相等的元素的逻辑序号(找到后返回一个大于0的值),若这样的元素不存在,则返回值为0。
int LocateElem(SqList *L,ElemType) //1
{ //2
int i=0; //3
while(i<L->length&&L->data[i]!=e) //4
i++; //5
if(i>=L->length) //6
return0; //7
else //8
return i+1; //9
} //10
为什么第9行是返回·i+1,这里面是不是有数组的意思,逻辑序号是指data[0]这个值的逻辑序号是1吗?
我对代码的分析:
初始化 i 为0;应该是数组data[0]的意思吧;while里面的条件是让 i 小于链表L的长度,类似于i小于n的意思;还有个条件是链表里的值不等于e,应该是随着i的增加,链表指针往下跑一一与e相比较;所以一旦 i 的值大于链表长度后,符合return 0的条件,也就说明未找到与元素e相等的值域;若是因为找到与e相等的值域,就返回i+1。可是与e相等的不是data[i]吗,是说逻辑序号就往后加一位吗?
删除数据元素ListDelete(&L,i,&e):该运算删除顺序表L的第 i (1<=i<=n)个元素。如果 i 值不正确,返回false;否则将线性表第 i 个元素以后的元素均向前移动了一个位置,并从元素a(i+1)开始移动起,这样覆盖了原来的第 i 个元素,达到了删除该元素的目的,最后顺序表的长度减1并返回ture。
bool ListDelete(SqList *&L,int i,ElemType &e) //1
{ //2
int j; //3
if(i<1||i>L->length) //4
return false; //5
i--; //6
e=L->data[i]; //7
for(j=i;j<L->length-1;j++) //8
L->data[j]=L->data[j+1]; //9
L->length--; //10
return ture; //11
} //12
为什么第4行的 i 是小于1;而不是小于0;第一个不应该是data[0]吗?第6行为什么是i--?第7行是什么意思,要表示什么作用?
我对代码的分析:
如果 i 的值小于1,或者 i 的值大于链表的长度就返回false;如果输入正确的 i ,就进行删除,中间那段有些不懂,而for循环里面的就是使前一个值等于后一个值,使 i 后面的值往前移一位,然后成功删除后,长度减1;
原文:https://www.cnblogs.com/fighting---/p/10597401.html