• 领导讲话
  • 自我介绍
  • 党会党课
  • 文秘知识
  • 转正申请
  • 问题清单
  • 动员大会
  • 年终总结
  • 工作总结
  • 思想汇报
  • 实践报告
  • 工作汇报
  • 心得体会
  • 研讨交流
  • 述职报告
  • 工作方案
  • 政府报告
  • 调研报告
  • 自查报告
  • 实验报告
  • 计划规划
  • 申报材料
  • 当前位置: 勤学考试网 > 公文文档 > 党会党课 > 正文

    查询与排序实验报告x

    时间:2020-10-17 01:29:38 来源:勤学考试网 本文已影响 勤学考试网手机站

    学院 专业 班 学号

    姓名 协作者 师评定

    实验题目 查询与排序

    综合实验评分表

    指导教师评分标准

    序 号

    评分项目

    评分标准

    满分

    打分

    1

    完成度

    按要求独立完成实验准备、程序调试、实验报告撰写。

    20

    2

    实验内容

    (1) 完成功能需求分析、存储结构设计;

    (2) 程序功能完善、可正常运行;

    (3) 测试数据正确,分析正确,结论正确。

    30

    3

    实验报告

    内容齐全,符合要求,文理通顺,排版美观。

    40

    4

    总结

    对实验过程遇到的问题能初步独立分析,解决后能总结问题 原因及解决方法,有心得体会。

    10

    实验报告

    实验目的与要求

    1、 掌握散列表的构造及实现散列查找;

    2、 掌握堆排序的算法;

    3、 综合比较各类排序算法的性能。

    二、实验内容

    #include "stdio.h"

    #include "stdlib.h"

    #include "string.h"

    #include "windows.h"

    #define MAX 20

    typedef struct{

    unsigned long key;

    int result;

    char name[30]; }RNode;

    RNode t[MAX],r[MAX];

    int h( unsigned long k) /* 散列函数 */ {

    return ((k - 3109005700)%11);

    } void insert(RNode t[],RNode x) /*插入函数,以线性探查方法解决冲突 */

    {

    int i,j =0;

    i =h(x. key);

    while ((j <MAX&&t[(i+j)%MAX] . key!= x. key) &&t[(i+j)%MAX] . key>0))

    j ++;

    if (j ==MAX) printf( "full\n");

    i =(i +j) %/IAX;

    if (t[i] . key==0)

    {t[i] =x;}

    else

    {

    if (t[i] . key==x. key)

    printf( "记录已存在!\n");

    }

    }

    int search(RNode t[], unsigned long k) /*插入函数,以线性探查方法解决冲突 */

    {

    int i,j =0;

    .key!= 0))i =h(k);

    .key!= 0))

    while ((j <MAX&&t[(i+j)%MAX] . key!= k) &&t[(i+j)%MAX]

    j ++;

    i =(i +j) %/IAX;

    if (t[i] . key==k)

    return (i);

    if (j ==MAX)

    return MAX;

    else

    return (- i);

    }

    void sift(RNode r[], int v, int w)

    {

    int i,j;

    RNode a;

    i =v;

    a=r[i];

    j =2*i +1;

    while (j <=w)

    {

    if ((j <w)&&r[j] . result >r[j+1] . result))

    j ++;

    if (a. result >r[j] . result)

    {r[i] =r[j];i =j;j =2*j +1;}

    else break;

    }

    r[i] =a;

    }

    void sort(RNode r[], int n)

    {

    int i;

    RNode y;

    for (i =n/2-1;i >=0;i --)

    sift(r,i, n -1);

    for (i =n- 1;i >0;i --)

    {y=r[0];r[0] =r[i];r[i] =y;

    printf("学生姓名:%s\t学生学号:%u\t学生成 绩:%d\n",r[i] . name,r[i] . key,r[i] . result);

    sift(r,0,i -1);

    }

    printf("学生姓名:%s\t学生学号:%u\t学生成

    绩:%d\n",r[0] . name,r[0] . key,r[0] . result);

    }

    printf(

    "\n\n");

    printf(

    "\n");

    printf(

    "\t\t*************

    ^查找排序实^验 ******************\n"

    printf(

    "\t\t*\n" );

    printf(

    "\t\t*************

    ^欢迎进入系^统 ******************\n"

    printf(

    "\t\t* menu:

    *\n"

    printf(

    "\t\t* 1.

    查找

    *\n"

    printf(

    "\t\t* 2.

    排序

    *\n"

    printf(

    "\t\t* 0.

    退出

    *\n"

    printf(

    "\t\t*******************************************\n"

    printf(

    "\n");

    printf(

    "\t\t\t 请输入 0--2\n

    ");

    printf(

    "\n");

    printf(

    "请选择您所要的操作(选择(0)退出):

    :");

    scanf(

    "%d", &select);

    getchar();

    return

    (select);

    int menu() /* 菜单函数 */ {

    int select;

    );

    );

    ); ); ); );

    );

    }

    void main() /* 主函数 */

    {

    int i,s,n,select;

    int j =0,m=0;

    RNode y;

    for (i =0;i <MAX;i++)

    t[i] . key=0; /* 初始化 */

    for (i =0;i <10;i ++) /* 导入记录 */

    {

    switch (i) { case 0: {

    RNode x;

    x . key=310900*** ; strcpy(x . name," ***");

    x . result =90;

    in sert(t,x);

    break;} case 1: {

    RNode x;

    x . key=31090*** 1; strcpy(x . name," ***");

    x . result =95;

    in sert(t,x);

    break;}

    case 2: {

    RNode x;

    x . key=3109005*** ; strcpy(x . name," ***'' );

    x . result =92;

    in sert(t,x);

    break;}

    case 3: {

    RNode x;

    x . key=31090*** ; strcpy(x . name," ***");

    x . result =93;

    in sert(t,x);

    break;}

    case 4: {

    RNode x;

    x . key=3109005*** ; strcpy(x . name," ***");

    x . result =94;

    in sert(t,x);

    break;}

    case 5: {

    RNode x;

    x . key=310900*** ; strcpy(x . name," ***");

    x . result =91;

    in sert(t,x);

    break;}

    case 6: {

    RNode x;

    x . key=3109005*** ; strcpy(x . name," ***");

    x . result =96;

    in sert(t,x);

    break;}

    case 7: {

    RNode x;

    x . key=310900*** ; strcpy(x . name," ***");

    x . result =99;

    in sert(t,x);

    break;}

    case 8: {

    RNode x;

    x . key=310900*** ; strcpy(x . name," ***");

    x . result =98;

    in sert(t,x);

    break;}

    case 9: {

    RNode x;

    x . key=310900*** ;

    strcpy(x . name,"***");

    x . result =97;

    in sert(t,x);

    break;}

    }

    }

    printf( "\n\n\n\n\n\n\n" );

    system( "cls");

    loop: {

    printf( "\n\n\n");

    select =menu();

    switch (select) {

    case 1: {

    printf( "\n请输入要查找的学生学号:");

    scanf( "%u", &y. key);

    s =search(t,y . key);

    if (s ==MAX s<0) printf( "not find\n" );

    else

    { printf( "\n\n你要查找的学生信息\n");

    printf( "学生姓名:%s\t学生学号:%u"t[s] .name,t[s] . key); }

    break; } case 2: {

    for (i =0;i <MAX;i++)

    {if (t[i] . key!=0)

    {

    r[j ++] =t[i];

    m++;

    }

    }

    printf("排序之前:\n\n");

    for (i =0;i <m;i ++)

    printf("学生姓名:%s\t学生学号:%u\t学生成

    绩:%d\n",r[i] . name,r[i] . key,r[i] . result);

    printf( "\n 排序之后:\n");

    sort(r,m);

    break;

    }

    case 0:exit(0);

    getchar();

    goto loop;

    }

    }

    三、实验结果和数据处理

    (1)查找数据(310900**** )

    (2)排序

    四、 总结

    这次的课程实验完成了主控界面,录入,输出,排序,查找,结束界面等功能。在 程序调试过程之中,我还是个初学者,在编写程序的过程中不断出现不同状况的错误, 在修改中不断发现自己的问题和不足。通过编译调试,程序提示错误所在,然后我们根 据提示再进行修改。从这个过程之中,使我多多思考问题,不断摸索,尽量自己发现错 误所在并加以改正,以便在下次不再犯同类型的错误。也就是说在调试的过程中,不断 的学习,不断的改进,提高自身 C语言学习能力和算法设计能力。

    五、 问题与讨论

    1、 分析你所构造散列表的查找成功的平均查找长度?

    0

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    …33

    …34

    …35

    …36

    …37

    …38

    …39

    …40

    …41

    …32

    1

    1

    1

    1

    1

    1

    1

    1

    1

    1

    查找成功的平均查找长度:(1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1)/10=1

    2、 堆排序属于什么类型的排序?它适合于什么要求的排序, 其空间按复

    杂度和时间复杂度如何?

    答:堆排序属于树形选择排序方法,它适合于排序较大文件的排序方法, 是不稳定的。空间复杂度为 0( 1),时间复杂度为O (nIog2n).

    • 考试时间
    • 范文大全
    • 作文大全
    • 课程
    • 试题
    • 招聘
    • 文档大全

    推荐访问