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

    技术2022-05-20  56

    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


    最新回复(0)