LocateElem(L,e,compare())&ListTraverse(L,visit())1.00

来源:互联网 发布:读圣经软件下载 编辑:程序博客网 时间:2024/05/22 11:57

LocateElem(L,e,compare())&ListTraverse(L,visit())小组作业内容说明:

1LocateElem(L,e,compare())函数:

初始条件:线性表存在,compare()是数据元素判定函数;

操作结果:返回第一个与e满足关系compare()的数据元素的位序。若不存在,返回0.

由定义的结构体知:

typedef struct

{

    char Name[100];    //学生姓名

    char Number[100];  //学生的学号

} StudentRacord;

如何来比较每位学生的信息呢?及如何创建compare()函数?根据一般的学号特点,学号的前两位一般表示的是学生的入学年份。由此我们可以构造一个比较两位同学是否同一年入学的函数。部分代码如下:

  Status compare(StudentRacord Student_A, StudentRacord Student_B)

 {

    //学号前两位数表示该生的入学年份

    ///判断该生是否和比较的学生是否是同一年入学

if(Student_A.Number[0]==Student_B.Number[0]&&

                   Student_A.Number[1]==Student_B.Number[1])

       {

        return TRUE;

       }

    else

      {

        return FALSE;

      }

 }

Status LocateElem(SequentialList Record, StudentRacord Student,

                  int (*compare)(StudentRacord , StudentRacord))    // 算法2.6

 {

    // 在顺序线性表Record中查找第1个值与Student满足compare()的元素的位序。

    // 若找到,则返回其在Record中的位序,否则返回0

    int i,j;

    StudentRacord *p;

    i = 1;        // i的初值为第1个元素的位序

    p = Record.elem;   // p的初值为第1个元素的存储位置

    j (*compare)(*p++, Student);

    while (i <= Record.length&&j==0)

    {

        ++i;

        j = (*compare)(*p++, Student);

    }

    if (i <= Record.length)

    {

        return i;

    }

    else

    {

        return 0;

    }

} // LocateElem

2ListTraverse(L,visit())函数

   初始条件:线性表已存在.

操作结果:依次对线性表中的每个数据元素调用函数visit().一旦visit()失败,则操作失败。

注意操作失败的字眼,这就意味着线性表中的每个数据元素都存在一个共性,一旦缺乏这个共性,就代表学生信息内容有误,提示线性表构建失败。

为此我们认定每个学生的学号都是13位数,如果一个学生的学号不是13位即意味着操作失败。

部分代码:

bool visit(StudentRacord STUDENT)

{

    ///规定学号为13位,若非13位;则该同学的学号输入有误,操作失败

    if(strlen(STUDENT.Number)==13)

    {

        return true;

    }

    else

    {

        return false;

    }

}

Status ListTraverse(SequentialList Record,bool (*visit)(StudentRacord))

{

    StudentRacord *p;

    p Record.elem;

    int i=1,j = (*visit)(*p++);

    while (i <= Record.length&&j!=0)

    {

        ++i;

        j = (*visit)(*p++);

    }

    if (i <= Record.length)

    {

        printf("The number of student%d is Error!/n",i);

        return ERROR;

    }

    else

    {

        printf("The number of students is OK!/n");

        return 0;

    }

}

3总结

1)、由于此次小组作业时间紧促,且小组大部分成员大都还没有电脑;又由于小组刚刚建立还没到3天;队员之间的交流默契不好。以后小组成员间的交流培养是重点。

2)、在理解代码的过程中,体现本组各成员上学期C语言没学好。特别是指向函数的指针既不会用也不能理解。

                                                     Sunshine_Rainbow小组

                                           dabbysunshine@qq.com

原创粉丝点击