严蔚敏教材中有一个很简单的问题看不懂,求帮忙求指导
数据结构吧
全部回复
仅看楼主
level 3
第一个程序中的LocateElem中第三个参数是一个数equal,然后第二个程序中是详解LocateElem,其中LocateElem的第三个参数怎么是两个数呀(ElemType,ElemType)
这是怎么回事呀,求高手帮忙,好人一生平安
2018年04月02日 19点04分 1
level 11
学习严蔚敏数据结构的时候,要知道一点,严蔚敏的代码叫做伪代码,虽然形式上很像C语言,但实际上严老也只是把简单的用c语言写了,比较复杂的地方都用伪代码代替了,这些伪代码大部分是缺少了一些头文件,定义之类的,往前翻翻能找到。
接下来要说的就是这个具体问题:equal这个参数,其实是一个函数指针,它期待传入一个比较函数,用来比较e和list中的元素是否相等,相等则返回。其实在简化版里的数据结构实现中是没必要实现这个locate函数的,因为正常来写我们都会这么写
if (e == L.elem[i])
我们默认为找到元素就是两个值相等。但是对于复杂的线性表,它存储的不简简单单是整数那么简单,为了做到通用性,线性表在设计的时候会让用户自己设计比较函数,来定义这个相等的行为。举个例子,你线性表存的是字符串。但是你希望找到字符串中第一个字母等于e的第一个字母的就可以了。所以这个时候你就可以写
compare(char *a, char *b)
{
if (a[0] == b[0])
.....
}
所以你的迷茫在于参数问题。
总结起来无非两点:
1、equal是一个函数,不是一个具体的值
2、compare函数有两个参数,具体调用的时候一个传入e一个传入列表中的某个值,用来判断是否相等
2018年04月04日 03点04分 2
哦,就是说这个equal放进去,那个里面的compare就直接按equal的方式比较前两个参数,所以只放equal就行,compare的两个参数就不用放了?
2018年04月10日 16点04分
@反正你也没办法 equal是实参,compare是形参,你看看下边的函数里,自动给compare形参传了两个参数,也就相当于给equal传了两个参数
2018年04月11日 01点04分
@丛中之歌 但实际编程中有没有这种方式的调用
2018年04月11日 07点04分
@丛中之歌 那实际编程中有这种调用方式吗?
2018年04月11日 07点04分
level 11
你看一下这个例子就知道了
2018年04月11日 08点04分 3
啊,我明白了,谢谢了哈
2018年04月11日 08点04分
1