.
实验一 顺序表操作实现
实验日期: 2017 年 3 月 6 日
实验目的及要求
1. 熟练掌握线性表的基本操作在顺序存储上的实现;
2. 以线性表的各种操作(建立、插入、删除、遍历等)的实现为重点; 3. 掌握线性表的顺序存储结构的定义和基本操作的实现;
4. 通过本实验加深对C语言的使用(特别是函数调用的参数传递、指针类型的应用)。
实验内容
已知程序文件seqlist.cpp已给出学生身高信息顺序表的类型定义和基本运算函数定义。
(1)顺序表类型定义
typedef struct {
int xh; /*学号*/ float sg; /*身高*/
int sex; /*性别,0为男生,1为女生*/ } datatype; typedef struct{
datatype data[MAX]; /*存放顺序表元素的数组*/ int last; /*表示data中实际存放元素个数*/ }Seqlist;
(2)基本运算函数原型
void initList(Seqlist *lp);/*置一个空表*/
void createList(Seqlist *lp);/*建一个学生顺序表*/ void sort_xh(Seqlist *lp);/*按学号排序*/ void Error(char *s);/*自定义错误处理函数*/ void pntList(Seqlist *lp);/*输出学生表*/
void save(Seqlist *lp,char strname[]);/*保存学生顺序表到指定文件*/
.
.
任务一
创建程序文件seqlist.cpp,其代码如下所示,理解顺序表类型Seqlist和基本运算函数后回答下列问题。
/*seqlist.cpp程序文件代码*/ #include
int xh; /*学号*/ float sg; /*身高*/
int sex; /*性别,0为男生,1为女生*/ } datatype; typedef struct{
datatype data[MAX]; /*存放顺序表元素的数组*/ int last; /*表示data中实际存放元素个数*/ }Seqlist;
void initList(Seqlist *lp);/*置一个空表*/
void createList(Seqlist *lp);/*建一个学生顺序表*/ void sort_xh(Seqlist *lp);/*按学号排序*/ void Error(char *s);/*自定义错误处理函数*/ void pntList(Seqlist *lp);/*输出学生表*/
void save(Seqlist *lp,char strname[]);/*保存学生顺序表到指定文件*/
/*置一个空表*/
void initList(Seqlist *lp) { lp->last=0; }
/*建一个学生顺序表*/
void createList(Seqlist *lp) { FILE *fp; int xh ,sex; float sg;
if((fp=fopen(\ { Error(\ }
while(!feof(fp))
{ fscanf(fp,\ lp->data[lp->last].xh=xh; lp->data[lp->last].sg=sg; lp->data[lp->last].sex=sex; lp->last++; }
fclose(fp);
.
.
}
/*按学号排升序*/
void sort_xh(Seqlist *lp) { int i,j,k; datatype st;
for(i=0;i
for(j=i+1;j
/*自定义错误处理函数*/ void Error(char *s) { printf(\
exit(1); /*返回OS,该函数定义在stdlib.h中*/ }
/*输出学生顺序表*/ void pntList(Seqlist *lp) { int i;
for(i=0;i
printf(\}
/*保存学生顺序表到指定文件*/ void save(Seqlist *lp,char strname[]) { FILE *fp; int i;
if((fp=fopen(strname,\ { Error(\ }
for(i=0;i
fprintf(fp,\ }
fclose(fp); }
.
.
请回答下列问题:
(1)由顺序表类型定义可知,该顺序表类型名为 Seqlist ,其中存放的元素为学生信息,学生信息定义的类型名为 datatype ,包含 xh 、 sg 、 sex 三个成员(写出成员变量名),学生信息存储于 data 数组,顺序表的表长变量为 MAX 。
(2)seqlist.cpp程序编译连接通过后能执行吗?为什么?其代码的整体结构有哪几个组成部分?
答:不能。因为没有主函数,程序无法运行。 代码的整体结构的组成部分有: typedef struct datatype; typedef struct Seqlist;
void initList(Seqlist *lp);/*置一个空表*/ void sort_xh(Seqlist *lp);/*按学号排序*/
void createList(Seqlist *lp);/*建一个学生顺序表*/ void Error(char *s);/*自定义错误处理函数*/ void pntList(Seqlist *lp);/*输出学生表*/
void save(Seqlist *lp,char strname[]);/*保存学生顺序表到指定文件*/
(3)回答下列问题
a)initList函数的形参变量lp存放什么值?顺序表置为空表的实质是做什么操作?
答:学生信息:学号,身高,性别。
顺序表的初始化即构造一个空表,这对表是一个加工型的运算,因此,将L设为指针参数,首先动态分配存储空间,然后,将表中last指针置为0,表示表中没有数据元素。
b)在建立顺序表的createList函数中,顺序表的数据元素来自何处?根据已提供的数据建完的顺序表表长是多少?
答:顺序表的数据元素来自文件,顺序表表长是:last。
c)sort_xh排序函数采用了什么排序方法?请列举5个学号值写出每趟(5个需排4趟)排序后的结果
答:选择排序。 第一次排序 1,3,6,4,5 第二次排序1,3,6,4,5 第三次排序1,3,4,6,5 第四次排序1,3,4,5,6
.
.
d)列举一个调用自定义错误处理函数Error的调用语句,并给出屏幕输出结果
can not open file!
e)save函数中的形参数组strname中存放什么? 答:存放的是学生的学生的信息:学号,身高,性别。
.