实验一 顺序表操作实现

.

实验一 顺序表操作实现

实验日期: 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 #include #define MAX 50 typedef struct {

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;ilast-1;i++) {k=i;

for(j=i+1;jlast;j++) if(lp->data[j].xhdata[k].xh ) k=j; if(k!=i) {st=lp->data[k]; lp->data[k]=lp->data[i]; lp->data[i]=st;} } }

/*自定义错误处理函数*/ void Error(char *s) { printf(\

exit(1); /*返回OS,该函数定义在stdlib.h中*/ }

/*输出学生顺序表*/ void pntList(Seqlist *lp) { int i;

for(i=0;ilast ;i++)

printf(\}

/*保存学生顺序表到指定文件*/ void save(Seqlist *lp,char strname[]) { FILE *fp; int i;

if((fp=fopen(strname,\ { Error(\ }

for(i=0;ilast ;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中存放什么? 答:存放的是学生的学生的信息:学号,身高,性别。

.

联系客服:779662525#qq.com(#替换为@) 苏ICP备20003344号-4