标题:LocateElem_Sq中的compare怎么引用
只看楼主
yyf8421bcd
Rank: 1
等 级:新手上路
帖 子:11
专家分:0
注 册:2017-1-22
结帖率:100%
已结贴  问题点数:10 回复次数:6 
LocateElem_Sq中的compare怎么引用
在数据结构C语言版中,定义了线性表SqList,
线性表如的动态分配顺序存储结构如下:

//------ 线性表的动态分配顺序存储结构--------
#define LIST_INIT_SIZE 100
                           //线性表存储空间的初始分配量,
                           //指的是长度,不是基础数据类型占内存大小
#define LISTINCREMENT 10
                          //线性表存储空间的分配增量
                          //指的是长度,不是基础数据类型占内存大小
                        
typedef struct{
    ElemType_Sq * elem;//存储空间基地址
    int length;        //当前长度
    int listsize;       //当前分配的存储容量(以sizeof(ElemType_SQ)为单位)
}SqList;


对线性表的一个操作是LocateElem_Sq
函数定义如下:
LocateElem_Sq(SqList L,ElemType_Sq e,status (*compare)(ElemType_Sq,Elemtype_Sq));
我定义了一个函数:
status equal(ElemType_Sq a,ElemType_Sq b){
 if(a==b){return 1;}
 else    {return 0;}
}

又编写了如下主函数:
int main()
{
    status (*compare)(ElemType_Sq,ElemType_Sq)=equal;
    SqList SL;
    ElemType_Sq a;
    int i;
    if(InitList_Sq(&SL))
    {
        printf("Init Finished,Please Input The String:");
        scanf("%s",SL.elem);
        getchar();
        printf("String is :\"%s\"。",SL.elem);
        //该部分测试结果不正确!
        printf("Input a:");
        scanf("%c",&a);
        i=LocateElem_Sq(SL,a,*equal);
        printf("\n 位序是 %d\n",i);
     }
}

编译运行后,输入"hello,world"作为数组SL.Elem的内容,
然后输入'o',作为倒数第三行的参数之一
然而输出的位序是0,这是为什么呢?是作为参数的equal()的定义或者调用有问题吗?

此外,希望各位学习过数据结构的大神,给个指导,告诉我LocateElem_Sq这个函数怎么调用
搜索更多相关主题的帖子: compare 线性表 C语言 动态 空间 
2017-02-05 17:52
ICU
Rank: 4
等 级:业余侠客
威 望:2
帖 子:92
专家分:268
注 册:2017-1-14
得分:10 
猜想LocateElem_Sq是已经定义好的,你只管调用,第三个参数表示要针对元素的哪个属性进行比较
2017-02-05 18:52
yyf8421bcd
Rank: 1
等 级:新手上路
帖 子:11
专家分:0
注 册:2017-1-22
得分:0 
回复 2楼 ICU
status LocateElem_Sq(SqList L,ElemType_Sq e,
                        status (*compare)(ElemType_Sq,ElemType_Sq) ){
                        
//在线性表L中查找第一个与e满足compare()的元素的位序
//若找到,则返回其在L中的位序,否则返回0
     //compare 的类型应该怎么定?
      ElemType_Sq *p;
      int i;
      i=1;//i的初值为第一个元素的位序
      p=L.elem;//p的初值为第一个元素的存储位置
      while(
           i<=L.length&&!(*compare)(*p++,e)){
      ++i;
      printf("i IS %d \n");
      }
      if(i<=L.length)return i;
      else return 0;
}//LocateElem_Sq

2017-02-06 07:30
yyf8421bcd
Rank: 1
等 级:新手上路
帖 子:11
专家分:0
注 册:2017-1-22
得分:0 
回复 2楼 ICU
结果 输出位序是0 显然不对 所以我想问一下为什么 怎么调用  
尤其是那个函数做参数的地方该怎么写
2017-02-06 07:31
yyf8421bcd
Rank: 1
等 级:新手上路
帖 子:11
专家分:0
注 册:2017-1-22
得分:0 
回复 4楼 yyf8421bcd
问题已经解决
虽然在主函数中,用scanf输入了字符串给SL.elem  
但是SL.length没有被更改,依旧是0
所以一进入while就退出
所以,i不增加
在初始化线性表后,输入一个长度,也就是SL.length
就可以解决问题


此外,在向线性表输入元素时,最好使用数据结构中定义的InsertElem_Sq函数,而不是scanf

2017-02-06 07:51
ICU
Rank: 4
等 级:业余侠客
威 望:2
帖 子:92
专家分:268
注 册:2017-1-14
得分:0 
回复 5楼 yyf8421bcd
自己找到答案是最好的。

PS:使用其他来源的库,一定要仔细阅读库的说明文档
2017-02-06 08:01
yyf8421bcd
Rank: 1
等 级:新手上路
帖 子:11
专家分:0
注 册:2017-1-22
得分:0 
回复 6楼 ICU
谢谢您的关注
2017-02-06 08:39



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-473998-1-1.html




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

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