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

    顺序表应用-数据结构实验报告x

    时间:2020-10-17 20:32:03 来源:勤学考试网 本文已影响 勤学考试网手机站

    大学数据结构实验报告

    课程名称 数据结构实验 第(三)次实验 实验名称 顺序表的应用

    学生姓名 于歌 专业班级 学号

    实验成绩 指导老师(签名) 日期2018年9月30日

    一、 实验目的

    学会定义线性表的顺序存储类型,实现C程序的基本结构,对线性 表的一些基本操作和具体的函数定义。

    掌握顺序表的基本操作,实现顺序表的插入、删除、查找以及求并 集等运算。

    掌握对多函数程序的输入、编辑、调试和运行过程。

    二、 实验要求

    预习C语言中结构体的定义与基本操作方法。

    对顺序表的每个基本操作用单独的函数实现。

    编写完整程序完成下面的实验内容并上机运行。

    整理并上交实验报告。

    三、 实验内容:

    定义一个包含学生信息(学号,姓名,成绩)的顺序表,使其具有 如下功能:

    (1) 根据指定学生个数,逐个输入学生信息

    (2) 逐个显示学生表中所有学生的相关信息

    (3) 根据姓名进行查找,返回此学生的学号和成绩

    (4) 根据指定的位置可返回相应的学生信息(学号,姓名,成绩)

    (5) 给定一个学生信息,插入到表中指定的位置

    (6) 删除指定位置的学生记录

    (7) 统计表中学生个数

    四、 实验设计

    1.定义一个包含学生信息(学号,姓名,成绩)的顺序表,使其具有如下功 能:

    (1)根据指定学生个数,逐个输入学生信息

    for (count=0; count<n; count++)

    {

    scanf (,/%s%s%d/z, e. no, e. name, &e. score);

    Input (&L, e);

    } —

    Status Input(SqList *L, ElemType e)

    if(!(*L). elem)

    return ERROR;

    (*L). elem[(*L). length++]=e;

    return OK;

    }

    逐个显示学生表中所有学生的相关信息

    Status Print (SqList L)

    {

    printff 学号 姓名 成绩 \n〃);

    int count;

    for(count^O; count〈L?length; count++)

    Pri (L. elem[count]);

    return OK;

    }

    void Pri (ElemType e)

    {

    printf (,z%8s Iz/, e. no);

    printf("%20s I”、e. name);

    printf (/z%8d \n \ e. score);

    }

    根据姓名进行查找,返回此学生的学号和成绩

    Status LocateElem(SqList L, ElemType e)

    {

    int count;

    for(count^O; count〈L?length; count++)

    if (strcmp (L? elem[count]? name, e. name)二二0)

    break;

    if (count<L?length)

    {

    printf r 学号 姓名 成绩 \n〃);

    Pri(L. elem[count]);

    }

    else

    printf ("%s在顺序表中查不到! \n", e. name);

    return OK;

    }

    根据指定的位置可返回相应的学生信息(学号,姓名,成绩)

    Status LocateNum(SqList L,int i)

    {

    i.f (i<l i>L. length+1)

    return OVERFLOW;

    printf C 学号 姓名 成绩 \n");

    Pri (L. elem[i-l]) ; 竺

    return OK;

    }

    给定一个学生信息,插入到表中指定的位置

    Status Listinsert (SqList *L, int i, ElemType e)

    {

    int count;

    if(i<l i>(*L). length+1)

    return OVERFLOW:

    if ((*L). length— (*L). MaxSize)

    (*L)? elem二(ElemType

    *)realloc((*L). elem, sizeof(ElemType)*((*L). MaxSize+LISTINCREMENT)); 辻(!(*L). elem)

    exit(OVERFLOW);

    for (count= (*L)? lengthT ; count〉二iT; count--)

    (*L)? elem[count+l]二(*L)? elem[count];

    (*L). elem[i-l]=e;

    (*L). length++;

    return OK;

    }

    删除指定位置的学生记录

    Status ListDelete (SqList 水L,int i)

    {

    int count;

    if(i<l i>(*L). length+1)

    return OVERFLOW;

    for (count=i; count< (*L)?length; count++)

    (*L)? elem[count一1]二(*L)? elemEcount]:

    (*L)?length一一;

    return OK;

    }

    统计表中学生个数

    printf C表中学生的个数为:%d\n,,) L. length);

    主函数

    int main()

    {

    SqList L;

    ElemType e;

    int i, count, n, number:

    InitList (&L);

    printf C请输入学生的个数:\n〃);

    scanf (〃%d: &n);

    printfC请输入学号、姓名、成绩:\n");

    for (count=0; count<n; count++)

    scanf (/z%s%s%d/z, e. no, e. name, &e. score);

    Input (&L, e);

    }

    printff学生信息生成成功! \rf);

    Pr();

    scanf (〃%d〃, &n);

    while (n>0&&n<7)

    {

    switch(n)

    {

    case 1:

    Print(L);

    break;

    case 2:

    printfC请输入要查找的学生的姓名:〃); scanf e. name);

    LocateElem(L, e); break;

    case 3: printff请输入要查找的学生的位置:〃); scanf (,/%d,,> &i); LocateNum(L, i);

    break;

    case 4: printff输入插入学生的位置、学号、姓名、成绩:〃); scanf (/z%d%s%s%d,z, &i, e. no, e. name, &e. score); if (Listlnsert (&L, i, e))

    printf C插入成功! \n"); break;

    case 5:

    printf r请输入要删除的学生的位置:\n〃); scanf (z/%d/z, &i);

    if(ListDelete(&L,i)) printf ("删除成功! \n");

    break;

    case 6:

    printf C表中学生的个数为:%d\nz/, L. length);

    )

    Pr();

    scanf (/z%dz/, &n);

    )

    辻(n 二二 7)

    printf C退出成功!

    :return 0;

    }

    五、实验测试

    定义一个包含学生信息(学号,姓名,成绩)的顺序表,使其具有如下功 能运行界面

    5 anCuo Zrvinij XuSb^n Zone Luo ZH? a Liu黔靛霜號sog用电 13 45 67890 0 津 2?:u 功为耋驛isB? 養swxs的的 sf^/l-*谒 聲SXSAA8硕s每牛 f is?i§

    5 an

    Cuo Zrvinij Xu

    Sb^n Zone Luo ZH? a Liu

    黔靛霜號sog

    电 13 45 67890 0 津 2

    ?:u 功为耋

    驛is

    B? 養sw

    xs的的 sf^/l-*谒 聲

    SXSAA

    8

    s

    每牛 f is

    ?i

    § S 義找;£-戡

    功位

    的的 银 事a- ?產星遜

    SAiA^ ¥卡

    I? 部鼠1'生

    T姓 旳?

    」81 8 心舊…送

    9 nirlduz巨 **OZG2XV£ 2L totUA

    1

    0111 574 &- G8-M-S 8 -5 L 7 C4 8<口>6,!2?

    ASUS'

    旺A.功

    8

    8

    ss.

    US

    六、总结 附录1:源代码 #mclude <stdio.li> ^include <stdlib.h> #mclude <strmg.h>

    ^define LIST_INIT_SIZE 100

    ^define LISTINCREMENT 10

    ^define OK 1

    ^define ERROR 0

    ^define OVERFLOW 2

    typedef mt Status;

    typedef struct

    {

    char no[8];

    char name[20];

    mt score;

    } Student;

    typedef Student EleinType;

    typedef struct

    {

    ElemType *elem:

    mt length;

    mt MaxSize;

    } SqList;

    Status IiiitList(SqList *L)

    {

    (*L).elem=(ElemType *)malloc(sizeof(ElemT>pe)*LIST_INIT_SIZE); if(?(*L).elem)

    exit(OVERFLOW):

    (*L).length=0;

    CL).MaxSize=LIST_INIT_SIZE;

    return OK:

    }

    Status Iiiput(SqList *L.EleinType e)

    {

    if(?(*L).elem)

    return ERROR;

    (*L).elem[(*L).leiigth-H-]=e;

    retuni OK:

    }

    Status ListInsert(SqList *L.int i.EleinType e)

    {

    mt count;

    if(i<l||i>(*L) .lengtli+1)

    renim OVERFLOW;

    if(( * L) .lengtli==(*L). MaxSize)

    (*L).elem=(ElemType

    *)realloc((*L).elein,sizeof(ElemType)*((*L).MaxSize+LISTINCREMENT));

    exit(OVTRFLOW);

    fbr(coiint=(*L).lengtli-l; count>=i-l; count—) (*L).elem[count+l]=(*L).elem[count];

    (*L).elem[i-l]=e;

    (*L).length++;

    return OK;

    }

    Status ListDelete(SqList *L.mt i)

    {

    mt count;

    if(Kl |i>(*L).lengtli+l)

    return OVERFLOW;

    for(coiuit=i; coimt<(*L).length: coiuit++) (*L).elem[count-l]=(*L).elem[count];

    (*L).length—;

    return OK:

    }

    Status LocateElem(SqList L,ElemType e)

    {

    mt count;

    for(coiint=0: count<L.length: coiuit++) if(strcmp(L.elem[coiint].name.e.name)==0) break;

    if(c ount<L length)

    成绩 W);成绩

    成绩 W);

    成绩 \nH);

    pnntf(H 学号 姓名

    Pn(L.elem[count]);

    }

    else

    pnntf(H%s在顺序表中查不到! \n",e.name);

    return OK:

    }

    Status LocateNum(SqList L.mt i)

    {

    if(i<l ||i>L.leiigtli+1)

    return OVERFLOW;

    pnntf(” 学号 姓名

    Pri(L.elem[i-l]);

    return OK;

    }

    Status Pnnt(SqList L)

    prmtf(H 学号

    mt count:

    姓洛

    成绩 W);

    fbr(coiuit=0: count<L.length; coiint++) Pn(L.elem[count]);

    return OK:

    }

    void Pri(ElemType e)

    {

    prmtf(H%8s |M,e.no); prmtf(H%20s ^^e.name); priiitf(H%8d \Qn,e.score);

    }

    void Pr()

    {

    prmtfC^l.输出全部的学生信息5“); prmtf("2.通过姓名査找学号和成绩5”); prmtfC 3通过位置査找学生的信息\n”); pnntf(' 4插入学生信息S");

    prmtf("5.删除学生信息S”);

    prmtf("6.统计学生个数S”); prmtf(H7.退岀 E);

    pnntfC请输入要使用的功能:”);

    }

    mt inain()

    {

    SqList L;

    ElemType e;

    int i^countji.number;

    IiiitList(&L);

    pnntf(”请输入学生的个数:\n”); scanf(H%d\&n);

    pnntf(”请输入学号、姓需、成绩恤”); for(coiuit=0: count<n: count++)

    {

    scaiif(H%s%s%d,\e.no.e.iiame,&e.score): Input(&L,e);

    }

    pnntfC学生信息生成成功!

    Pr():

    scanf(”%d"、&n);

    while(n>0&&nv7)

    {

    switch(n)

    {

    case 1:

    Prmt(L);

    break;

    case 2:

    prmtf("请输入要查找的学生的姓名:”); scanf(n%sH,e.name);

    LocateElein(L.e);

    break;

    case 3:

    prmtf("请输入要查找的学生的位置:”); scanf(H%d\&i);

    LocateNum(L,i); break;

    case 4:

    prmtfC输入插入学生的位置、学号、姓名、成绩:“); scanf(”%d%s%s%d",&i,e.no,e.name、&e.score); if(ListInsert(&L,i,e))

    pnntf("插入成功! S”);

    break;

    case 5:

    printfC请输入要删除的学生的位巻:S”); scanf(”%cT,&i);

    if(ListDelete(&L,i)) pnntf("删除成功! 5”); break;

    case 6:

    printfC表中学生的个数为:%d5” .L.length);

    }

    Pr();

    scanfC%d".&n);

    }

    if(n=7)

    pnntf(”退岀成功! ”);

    renini 0:

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

    推荐访问