任务描述
本关任务:编写顺序表按照值查找序号操作的函数。
相关知识
在顺序表L
找第一个值为e
的元素,找到后返回其逻辑序号,否则返回0
。
注意:由于线性表的逻辑序号从1
开始,这里用0
表示没有找到值为e
的元素。
在算法实现时,应根据顺序表数据元素的类型ElemType
编写判断两个数据元素是否相等的比较函数equals()
。举例说明: (1)数据元素的类型ElemType
为int
类型
typedef int ElemType;
int equals(ElemType a,ElemType b)
{ // 根据两个整数a,b是否相等,分别返回1或0
if (a == b)
return 1;
else
return 0;
}
(2)数据元素的类型ElemType
为char [20]
类型
typedef char ElemType[20];
int equals (ElemType a,ElemType b)
{ // 根据两个字符串a、b是否相等,分别返回1或0
if ( strcmp(a,b) == 0 )
return 1;
else
return 0;
}
(3)数据元素的类型ElemType
为自定义结构体变量类型,判断两个数据元素是否相等,就需要比较所有结构体变量成员。
struct student
{
char num[20];
char name[16];
int year;
float score;
};
typedef struct student ElemType;
int equals (ElemType a,ElemType b)
{ // 如果a,b的所有成员值相等,返回1,否则返回0
if ( ( strcmp( a.num, b.num ) != 0 )
return 0;
else if ( strcmp( a.name, b.name ) != 0 )
return 0;
else if ( a.year != b.year )
return 0;
else if ( a.score != b. score ) )
return 0;
else
return 1;
}
编程要求
根据提示,在右侧编辑器 Begin-End 区间补充代码,完成顺序表的按照值查找序号操作函数的定义,具体要求如下:
int LocateElem(SqList L,ElemType e,int (*equal) (ElemType , ElemType) );// 返回顺序表L中第1个与e满足相等关系equal()的数据元素的位序,若这样的数据元素不存在,则返回值为0。
测试说明
平台会对你编写的代码进行测试:
测试输入: 10
12 47 5 8 6 92 45 63 75 38
92
预期输出: 查找成功!
92 是顺序表第6个元素
测试输入: 10
12 47 5 8 6 92 45 63 75 38
93
预期输出: 查找失败!
输入说明 第一行输入顺序表的长度M; 第二行输入顺序表的M个整数; 第三行输入要查找的数据元素的值。
输出说明 第一行输出按照值查找是否成功的提示信息; 如果查找成功,第二行输出查找元素的逻辑序号;如果查找失败,则不输出。
int LocateElem(SqList L,ElemType e,int (*compare) (ElemType , ElemType))
{
// 初始条件:顺序表L已存在,compare()是数据元素判定函数(满足为1,否则为0)
// 操作结果:返回L中第1个与e满足关系compare()的数据元素的位序。
// 若这样的数据元素不存在,则返回值为0。
/********** Begin **********/
for(int i=0;i<L.length;i++)
{
if(L.elem[i]==e) return i+1;
}
return 0;
/********** End **********/
}