视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
顺序表的应用 数据结构实验报告
2025-09-24 08:27:07 责编:小OO
文档
大学数据结构实验报告

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

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

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

一、实验目的

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

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

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

二、实验要求

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

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

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

4.整理并上交实验报告。 

三、实验内容:

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

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

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

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

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

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

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

(7)统计表中学生个数

四、实验设计

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

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

for(count=0; count{

    scanf("%s%s%d",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;

}

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

Status Print(SqList L)

{

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

    int count;

for(count=0; count        Pri(L.elem[count]);

    return OK;

}

void Pri(ElemType e)

{

            printf("%8s  |",e.no);

        printf("%20s  |",e.name);

        printf("%8d  \\n",e.score);

}

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

Status LocateElem(SqList L,ElemType e)

{

    int count;

for(count=0; count        if(strcmp(L.elem[count].name,e.name)==0)

            break;

if(count    {

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

                Pri(L.elem[count]);

    }

    else

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

    return OK;

}

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

Status LocateNum(SqList L,int i)

{

if(i<1||i>L.length+1)

        return OVERFLOW;

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

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

    return OK;

}

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

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

{

    int count;

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

        return OVERFLOW;

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

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

    if(!(*L).elem)

        exit(OVERFLOW);

for(count=(*L).length-1; count>=i-1; count--)

        (*L).elem[count+1]=(*L).elem[count];

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

    (*L).length++;

    return OK;

}

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

Status ListDelete(SqList *L,int i)

{

    int count;

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

        return OVERFLOW;

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

        (*L).elem[count-1]=(*L).elem[count];

    (*L).length--;

    return OK;

}

(7)统计表中学生个数

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

(8)主函数

int main()

{

    SqList L;

    ElemType e;

    int i,count,n,number;

    InitList(&L);

    printf("请输入学生的个数:\\n");

    scanf("%d",&n);

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

for(count=0; count    {

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

        Input(&L,e);

    }

    printf("学生信息生成成功!\\n");

    Pr();

    scanf("%d",&n);

while(n>0&&n<7)

    {

        switch(n)

        {

        case 1:

            Print(L);

            break;

        case 2:

            printf("请输入要查找的学生的姓名:");

            scanf("%s",e.name);

            LocateElem(L,e);

            break;

        case 3:

            printf("请输入要查找的学生的位置:");

            scanf("%d",&i);

            LocateNum(L,i);

            break;

        case 4:

            printf("输入插入学生的位置、学号、姓名、成绩:");

            scanf("%d%s%s%d",&i,e.no,e.name,&e.score);

            if(ListInsert(&L,i,e))

                printf("插入成功!\\n");

            break;

        case 5:

            printf("请输入要删除的学生的位置:\\n");

            scanf("%d",&i);

            if(ListDelete(&L,i))

                printf("删除成功!\\n");

            break;

        case 6:

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

        }

        Pr();

        scanf("%d",&n);

    }

    if(n==7)

    printf("退出成功!");

    return 0;

}

五、实验测试

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

六、总结

附录1:源代码

#include

#include

#include

#define LIST_INIT_SIZE 100

#define LISTINCREMENT 10

#define OK 1

#define ERROR 0

#define OVERFLOW 2

typedef int Status;

typedef struct

{

    char no[8];

    char name[20];

    int score;

}Student;

typedef Student ElemType;

typedef struct

{

    ElemType *elem;

    int length;

    int MaxSize;

} SqList;

Status InitList(SqList *L)

{

    (*L).elem=(ElemType *)malloc(sizeof(ElemType)*LIST_INIT_SIZE);

    if(!(*L).elem)

        exit(OVERFLOW);

    (*L).length=0;

    (*L).MaxSize=LIST_INIT_SIZE;

    return OK;

}

Status Input(SqList *L,ElemType e)

{

    if(!(*L).elem)

        return ERROR;

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

    return OK;

}

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

{

    int count;

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

        return OVERFLOW;

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

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

    if(!(*L).elem)

        exit(OVERFLOW);

for(count=(*L).length-1; count>=i-1; count--)

        (*L).elem[count+1]=(*L).elem[count];

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

    (*L).length++;

    return OK;

}

Status ListDelete(SqList *L,int i)

{

    int count;

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

        return OVERFLOW;

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

        (*L).elem[count-1]=(*L).elem[count];

    (*L).length--;

    return OK;

}

Status LocateElem(SqList L,ElemType e)

{

    int count;

for(count=0; count        if(strcmp(L.elem[count].name,e.name)==0)

            break;

if(count    {

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

                Pri(L.elem[count]);

    }

    else

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

    return OK;

}

Status LocateNum(SqList L,int i)

{

if(i<1||i>L.length+1)

        return OVERFLOW;

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

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

    return OK;

}

Status Print(SqList L)

{

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

    int count;

for(count=0; count        Pri(L.elem[count]);

    return OK;

}

void Pri(ElemType e)

{

            printf("%8s  |",e.no);

        printf("%20s  |",e.name);

        printf("%8d  \\n",e.score);

}

void Pr()

{

    printf("\\n1.输出全部的学生信息\\n");

    printf("2.通过姓名查找学号和成绩\\n");

    printf("3.通过位置查找学生的信息\\n");

    printf("4.插入学生信息\\n");

    printf("5.删除学生信息\\n");

    printf("6.统计学生个数\\n");

    printf("7.退出\\n");

    printf("请输入要使用的功能:");

}

int main()

{

    SqList L;

    ElemType e;

    int i,count,n,number;

    InitList(&L);

    printf("请输入学生的个数:\\n");

    scanf("%d",&n);

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

for(count=0; count    {

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

        Input(&L,e);

    }

    printf("学生信息生成成功!\\n");

    Pr();

    scanf("%d",&n);

while(n>0&&n<7)

    {

        switch(n)

        {

        case 1:

            Print(L);

            break;

        case 2:

            printf("请输入要查找的学生的姓名:");

            scanf("%s",e.name);

            LocateElem(L,e);

            break;

        case 3:

            printf("请输入要查找的学生的位置:");

            scanf("%d",&i);

            LocateNum(L,i);

            break;

        case 4:

            printf("输入插入学生的位置、学号、姓名、成绩:");

            scanf("%d%s%s%d",&i,e.no,e.name,&e.score);

            if(ListInsert(&L,i,e))

                printf("插入成功!\\n");

            break;

        case 5:

            printf("请输入要删除的学生的位置:\\n");

            scanf("%d",&i);

            if(ListDelete(&L,i))

                printf("删除成功!\\n");

            break;

        case 6:

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

        }

        Pr();

        scanf("%d",&n);

    }

    if(n==7)

    printf("退出成功!");

    return 0;

}下载本文

显示全文
专题