题目描述
在练习001的基础上,新建一个函数ListDelete(&L,i,&e)实现在L的位序i处删除并返回删除的元素赋值给e(i应在已有数据的范围内,否则反馈错误)
将下列代码补充完整
#include <stdio.h>
#include <stdlib.h>
#define MaxSize 10
typedef struct{
int data[MaxSize];
int length;
}SqList;
void InitList(SqList& L){
for(int i = 0;i<MaxSize;i++)
L.data[i] = 0;
L.length = 0;
}
//练习005
//BEGIN
bool ListDelete(SqList& L,int i,int &e){
}
int main(){
SqList L;
InitList(L);
//...省略一些代码,插入了几个元素
//在下面使用(ListDelete(L,3,e))并进行友好的交互
return 0;
}
//END
题目分析
删除步骤思路:
第一步:找到位序i删除
第二步:将后面的所有元素向前移动一位
第三步:修改L中的length变量
健壮性和友好交互分析:
1.当i不在正常范围内,反馈错误
2.使用完函数后,需反馈给用户已经删除的元素时什么
参考答案
#include <stdio.h>
#include <stdlib.h>
#define MaxSize 10
typedef struct{
int data[MaxSize];
int length;
}SqList;
void InitList(SqList& L){
for(int i = 0;i<MaxSize;i++)
L.data[i] = 0;
L.length = 0;
}
//练习005
//BEGIN
bool ListDelete(SqList& L,int i,int &e){
if(i<1||i>L.length+1)
return false;
e = L.data[i-1];
for(int j=i;j<L.length;j++)
L.data[j-1] = L.data[j];
L.length--;
return true;
}
int main(){
SqList L;
InitList(L);
//...省略一些代码,插入了几个元素
int e = -1;
if(ListDelete(L,3,e))
printf("已删除第3个元素,删除元素值为=%d\n",e);
else
printf("位序i不合法,删除失败\n");
return 0;
}
//END
小白集训
1.注意顺序,一定要在删除前把元素赋值给e带出函数
2.使用函数前初始化一个e并赋予初值,这里-1比0稍好
3.定义函数时一定要注意需要带出函数保留变化的量需要使用应用型变量int& e,否则无法带出函数
4.除了参考答案给出的实现友好交互的方法外,还有很多其他思路,可以把输出的反馈语句一起打包在函数里面,注意这样做的话函数类型也要发生改变