当前位置:文档之家› 顺序表的应用数据结构实验报告记录

顺序表的应用数据结构实验报告记录

顺序表的应用数据结构实验报告记录————————————————————————————————作者:————————————————————————————————日期:大学数据结构实验报告课程名称数据结构实验第(三)次实验实验名称顺序表的应用学生姓名于歌专业班级学号实验成绩指导老师(签名)日期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<n; count++){scanf("%s%s%d",e.no,,&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<L.length; count++)Pri(L.elem[count]);return OK;}void Pri(ElemType e){printf("%8s |",e.no);printf("%20s |",);printf("%8d \n",e.score);}(3)根据姓名进行查找,返回此学生的学号和成绩Status LocateElem(SqList L,ElemType e){int count;for(count=0; count<L.length; count++)if(strcmp(L.elem[count].name,)==0)break;if(count<L.length){printf(" 学号姓名成绩 \n"); Pri(L.elem[count]);}elseprintf("%s在顺序表中查不到!\n",);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<n; count++){scanf("%s%s%d",e.no,,&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",);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.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 <stdio.h>#include <stdlib.h>#include <string.h>#define LIST_INIT_SIZE 100#define LISTINCREMENT 10#define OK 1#define ERROR 0#define OVERFLOW 2typedef 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<L.length; count++)if(strcmp(L.elem[count].name,)==0)break;if(count<L.length){printf(" 学号姓名成绩\n");Pri(L.elem[count]);}elseprintf("%s在顺序表中查不到!\n",);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<L.length; count++)Pri(L.elem[count]);return OK;}void Pri(ElemType e){printf("%8s |",e.no);printf("%20s |",);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<n; count++){scanf("%s%s%d",e.no,,&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",);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.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;}11。

相关主题