本文共 902 字,大约阅读时间需要 3 分钟。
题目:从顺序表中删除具有最小值的元素(假设唯一)并由函数返回被删元素的值。空出的位置由最后一个元素填补,若顺序表为空则显示出错信息并退出运行。
算法思想:搜索整个顺序表,查找最小值元素并记住其位置,搜索结束后用最后一个元素填补空出的最小值元素位置。
代码(伪代码):
bool Del_Min(sqList &L, ElemType &value) { if(L.length==0) return false; //表空,直接返回false,程序结束 value = L.data[0]; //将L存储的数据的第一个元素赋给value int pos=0;//初始位置为0 for(int i = 1; i
解析:
重点:
bool Del_Min(sqList &L, ElemType &value)
这里函数定义的时候要求传递两个地址。该函数可以访问储存在这些位置的值并改变它们。
为什么不传递值,而传递地址?
函数内部的都是局部变量,对这些变量的操作只在函数内部有效。细节一点儿,局部变量存放在计算机的寄存器中,不写入主存,也就不改变内存中的C代码(数据)。
这里如果函数调用传递的是顺序表L,L就相当于局部变量,相当于复制了L,并不会修改最初的L。而如果引用L的地址,可以直接操作内存,修改的就是L,修改后的内容也会被写入L对应的存储空间。
转载地址:http://ceeii.baihongyu.com/