| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 3817 人关注过本帖
标题:请教数据结构中一个LocateElem的函数
只看楼主 加入收藏
kingonlive
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2011-2-13
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:6 
请教数据结构中一个LocateElem的函数
int LocateElem_Sq(SqList L, ElemType e,
        Status (*compare)(ElemType, ElemType)) {  // 算法2.6
  // 在顺序线性表L中查找第1个值与e满足compare()的元素的位序。
  // 若找到,则返回其在L中的位序,否则返回0。
  int i;
  ElemType *p;
  i = 1;        // i的初值为第1个元素的位序
  p = L.elem;   // p的初值为第1个元素的存储位置
  while (i <= L.length && !(*compare)(*p++, e))
    ++i;
  if (i <= L.length) return i;
  else return 0;
} // LocateElem_Sq
  
 这是书上的示例,原原本本没改过的。
我不理解的是这个地方Status (*compare)(ElemType, ElemType))   
请问这里应该怎么理解,我现在认为的是,这里是一个自定义的函数,但是如果自定义的话,那该如何定义?
我希望实现这个,希望前辈指点.
搜索更多相关主题的帖子: 线性表 元素 
2011-02-22 23:37
寒风中的细雨
Rank: 17Rank: 17Rank: 17Rank: 17Rank: 17
等 级:贵宾
威 望:66
帖 子:1710
专家分:8645
注 册:2009-9-15
收藏
得分:10 
程序代码:
#include <stdio.h>
#include <stdlib.h>

#define MAX 10

typedef int ElemType;
typedef int Status;

typedef struct node
{
    ElemType elem[MAX];
    int length;
}SqList;

SqList * init( SqList * L )
{
    L = (SqList*) malloc (sizeof(SqList));
    if( !L )
    {
        exit(0);
    }
    L->length = 0;

    int i = 1;
    while( i!=5 )
    {//elem 从第一号位置开始存储
        L->length++;
        L->elem[L->length] = i;
        ++i;
    }
    return L;
}

void show( SqList L )
{
    for( int i=1; i<=L.length; ++i )
    {
        printf( "%d ", L.elem[i] );
    }
    printf("\n");
}

Status compare( ElemType a, ElemType b )
{
    if( a == b )
    {
        return 1;
    }
    else
    {
        return 0;
    }
}

int LocateElem_Sq( SqList L, ElemType e, Status(*compare)(ElemType, ElemType))
{
    int i;
    ElemType *p;
    i = 1;
    p = L.elem+1;
    while( i<=L.length && !(*compare)(*p++, e))
    {
        ++i;
    }
    if( i<=L.length)
    {
        return i;
    }
    else
    {
        return 0;
    }
}

int main()
{
    SqList *L = NULL;
    L = init( L );
    show( *L );
    printf("%d \n", LocateElem_Sq( *L, 3, compare) );

    return 0;
}
2011-02-23 08:17
kingonlive
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2011-2-13
收藏
得分:0 
#include <stdio.h>
#include <stdlib.h>

#define MAX 10

typedef int ElemType;
typedef int Status;

typedef struct node
{
    ElemType elem[MAX];
    int length;
}SqList;

SqList * init( SqList * L )
{
    L = (SqList*) malloc (sizeof(SqList));
    if( !L )
    {
        exit(0);
    }
    L->length = 0;

    int i = 1;
    while( i!=5 )
    {//elem 从第一号位置开始存储
        L->length++;
        L->elem[L->length] = i;
        ++i;
    }
    return L;
}

void show( SqList L )
{
    for( int i=1; i<=L.length; ++i )
    {
        printf( "%d ", L.elem[i] );
    }
    printf("\n");
}

Status compare( ElemType a, ElemType b )
{
    if( a == b )
    {
        return 1;
    }
    else
    {
        return 0;
    }
}

int LocateElem_Sq( SqList L, ElemType e, Status(*compare)(ElemType, ElemType))
{
    int i;
    ElemType *p;
    i = 1;
    p = L.elem+1;
    while( i<=L.length && !(*compare)(*p++, e))
    {
        ++i;
    }
    if( i<=L.length)
    {
        return i;
    }
    else
    {
        return 0;
    }
}

int main()
{
    SqList *L = NULL;
    L = init( L );
    show( *L );
    printf("%d \n", LocateElem_Sq( *L, 3, compare) );

    return 0;
}


非常感谢,你可以解释下绿色字体的部分吗?
2011-02-23 23:20
寒风中的细雨
Rank: 17Rank: 17Rank: 17Rank: 17Rank: 17
等 级:贵宾
威 望:66
帖 子:1710
专家分:8645
注 册:2009-9-15
收藏
得分:0 
Status(*compare)(ElemType, ElemType) 函数指针作为形参
 (*compare)(*p++, e)  调用函数
2011-02-24 08:02
犬虫门心
Rank: 8Rank: 8
来 自:西安
等 级:蝙蝠侠
帖 子:209
专家分:753
注 册:2011-1-25
收藏
得分:10 
版主的回答是对滴!
不过,楼主先不要看这么复杂的例子了,下面我举一个更简单的例子,讲讲“指向函数的指针变量”的基本概念:
首先,形如:
类型名称 (*变量名称)(形式参数类型名称列表)
这就是“指向函数的指针变量”。见下面的例子:
假设先定义一个函数:
int fun(int x, int y)
{
    return x > y;
}//这是一个比较函数,返回int类型的值,很简单。
再给一个调用它的函数:
void pFun(int a, int b)
{
    int (*p)(int, int);//这里定义了一个能够指向返回值为int,有两个int类型的参数的函数
    int c;

    p = fun; //这个意思是:把fun函数的首地址赋值给p。注意,这里不是要调用fun函数。
    c = (*p)(a, b); //这个意思是,调用指针变量p所指向的函数fun()
}
可能你会觉得这样做简直就是“脱了XX放X”,从初学者角度说是这样,但等你的知识面进一步扩大后,你会知道这种方式的厉害!Linux中的C程序设计,很多地方涉及“指向函数的指针”的概念。

最后,如果你懂得形参与实参的关系问题,那这个问题就解决了。
强调一个问题:我个人认为,函数名称就是这个函数的首地址常量,所以可以执行p = fun;的操作。

当一名对得起学生学费的老师,一直是我的目标!我会更努力的!
2011-02-24 15:55
kingonlive
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2011-2-13
收藏
得分:0 
版主很厉害,他写的例子我看懂了.谢谢5楼耐心的解释
2011-02-24 18:58
democ123
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2018-12-26
收藏
得分:0 
111111111111111111111
111111111111
</><>

2018-12-26 19:47
快速回复:请教数据结构中一个LocateElem的函数
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.029030 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved