第4关:顺序表的按照值查找序号操作

任务描述

本关任务:编写顺序表按照值查找序号操作的函数。

相关知识

在顺序表L找第一个值为e的元素,找到后返回其逻辑序号,否则返回0

注意:由于线性表的逻辑序号从1开始,这里用0表示没有找到值为e的元素。

在算法实现时,应根据顺序表数据元素的类型ElemType编写判断两个数据元素是否相等的比较函数equals()。举例说明: (1)数据元素的类型ElemTypeint类型

 
  1. typedef int ElemType;
  2. int equals(ElemType a,ElemType b)
  3. { // 根据两个整数a,b是否相等,分别返回1或0
  4. if (a == b)
  5. return 1;
  6. else
  7. return 0;
  8. }

(2)数据元素的类型ElemTypechar [20] 类型

 
  1. typedef char ElemType[20];
  2. int equals (ElemType a,ElemType b)
  3. { // 根据两个字符串a、b是否相等,分别返回1或0
  4. if ( strcmp(a,b) == 0 )
  5. return 1;
  6. else
  7. return 0;
  8. }

(3)数据元素的类型ElemType为自定义结构体变量类型,判断两个数据元素是否相等,就需要比较所有结构体变量成员。

 
  1. struct student
  2. {
  3. char num[20];
  4. char name[16];
  5. int year;
  6. float score;
  7. };
  8. typedef struct student ElemType;
  9. int equals (ElemType a,ElemType b)
  10. { // 如果a,b的所有成员值相等,返回1,否则返回0
  11. if ( ( strcmp( a.num, b.num ) != 0 )
  12. return 0;
  13. else if ( strcmp( a.name, b.name ) != 0 )
  14. return 0;
  15. else if ( a.year != b.year )
  16. return 0;
  17. else if ( a.score != b. score ) )
  18. return 0;
  19. else
  20. return 1;
  21. }

编程要求

根据提示,在右侧编辑器 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 **********/
	
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值