问答题 利用顺序表的操作,实现以下函数:1)从顺序表中删除具有最小值的元素并由函数返回被删除元素的值。空出的位置由最后一个元素填补,若顺序表为空则显示出错信息并退出运行。2)从顺序表中删除第i个元素并由函数返回被删除元素的值。如果j不合理或顺序表为空则显示出错信息并退出运行。3)向顺序表中第i个位置插入一个新的元素x。如果i不合理则显示出错信息并退出运行。4)从顺序表中删除具有给定值x的所有元素。5)从顺序表删除其值在给定值s与t之间(要求s小于t)的所有元素。如果s或t不合理或者顺序表为空,则显示错误信息并退出。6)从有序顺序表中删除其值在给定值s与t之间(要求s小于t)的所有元素。如果s或t不合理或顺序表为空,则显示错误信息并退出。7)将两个有序顺序表合并成一个新的有序顺序表并由函数返回结果顺序表。8)从有序顺序表中删除所有其值重复的元素,使表中所有元素的值均不同。
【正确答案】正确答案:考查顺序表各种操作的实现。线性表这一章出综合题的概率很大,且出题灵活。但是不论出什么样的题目,同学们应扎实掌握线性表的基础操作,以不变应万变。1)实现删除具有最小值元素的函数。算法的基本设计思想:从前向后遍历线性表,用~个变量记录最小值,同时用另一个变量记录最小值位置。遍历之后将最小值删除。算法的代码: DataType deleteMin(SeqL 5.st &L,DataType &Value) { if(L.n==0) return false; //表空,终止操作返回 value=L.data[0]; //假定0号元素的值最小 int i,pos=0; for(i=1;iL.n) return false; //表空或者i不合理,终止操作 value=L.data[i]; for(int j=i+1;jL.n) return false; //表空或者i不合理,终止操作 value=L.data[i]; for(int j=i+1;jL.n) return falSe; //表满或者参数不合理,终止操作 for(int J=L.n; J>i;J一一) L.data[J]=L.data[J一1]j L.data[i]=value, //从第i个位置插入 L.n++; retUrn true ; //insertnoi 4)从顺序表中删除具有给定值X的所有元素。 算法的基本设计思想:从后向前遍历,一直找到具有x值的元素,然后依次将此后的元素前移。 算法的代码: void deleteValue(SeqLiSt&L,DataType value)} int i,J; for(i=L.n一1;i>=0ji一一) { //循环,寻找具有X值的元素并删除 if(L.data[i]==value) //删除具有x值的元素 { for(J=i+1;J=t) retu.rn false; int i,j, for(i=L.n一1;i>=0;i一一) { //循环,寻找在给定范围内的元素并删除它 if(L.data[i]>=s&&L.data[i]<=t) //删除 { for(J=i+1;J=t) return false; int i,J,k,u; for(i=0j i=L.n) return false; for(J=i;JL.n) return false, for(k=j,u=i;k
【答案解析】