实验一 顺序表操作实现
更新时间:2024-07-03 17:24:01 阅读量: 综合文库 文档下载
- 实验一小推荐度:
- 相关推荐
实验一 顺序表操作实现
实验日期: 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中存放什么? 答:存放的是学生的学生的信息:学号,身高,性别。
任务二
1.题目要求
创建一个新的程序文件sy11.cpp,请调用seqlist.cpp提供的功能函数(以#include “seqlist.cpp” 方式导入函数库)及自定义的函数完成以下操作:
? 创建一个包含学生学号、身高、性别的学生身高信息表并输出到屏幕,
学生信息从records.txt文件读取;
? 对已建立的学生身高信息表按学号从小到大排序,并把结果写入到数据
文件中(result.txt);
? 从键盘输入一位学生的相关信息插入到已排序的学生身高信息表中后仍
然保持学号的有序性;
? 对插入后的学生身高信息表进行倒置,结果输出在屏幕;
? 从键盘输入一个身高值,统计与该身高相同的学生个数并输出在屏幕; 在程序文件sy1.cpp需再定义以下三个功能函数: (1)void insertX(Seqlist *lp, datatype x) 功能:在学号从小到大排序的学生表中插入值为x的学生仍保持学号的有序性
(2)void reverse(Seqlist *lp)
功能:对lp指向的顺序表进行倒置操作 (3)int count(Seqlist *lp,float y)
功能:统计学生表中身高值为y的学生数并返回 2.请根据题目功能要求及程序中的注释填空完整sy1.cpp代码
/*sy11.cpp程序文件代码*/
#include \ //导入自定义类型及函数所在的文件seqlist.cpp,该文件与sy11.cpp存于同一目录中
void insertX(Seqlist *lp, datatype x); void reverse(Seqlist *lp); int count(Seqlist *lp,float y);
void main() {
Seqlist stu; //定义stu为学生顺序表变量 datatype x; //x为存储一个学生信息的变量 int c;
char strname[20]; //strname为存储文件名的数组
/*创建一个包含学生学号、身高、性别的学生身高信息表stu并输出到屏幕,学生信息从records.txt文件读取*/
initList(&stu) //调用函数initList初始化顺序表stu
createList(&stu) // 调用函数createList创建学生表stu
printf(\
pntList(&stu) //调用函数pntList打印学生表stu getchar(); //在执行程序能起到暂定的作用,按任意键继续
/*对已建立的学生身高信息表按学号从小到大排序,并把结果写入到数据文件中(result.txt)*/
sort_xh(stu) //调用函数sort_xh 对学生表stu按学号从小到大排序
printf(\
scanf(“”) //键盘输入文件名字符串存于strname字符数组中 save(&stu,strname) //调用函数save把排序后的顺序表stu存于文件中,文件名在strname数组中
/*从键盘输入一位学生的相关信息插入到已排序的学生身高信息表中后仍然保持学号的有序性;*/
printf(\ a student information: \\n\ scanf(\ insertX(&stu,x) //插入 printf(\ pntList(&stu); getchar();
/*对插入后的学生身高信息表进行倒置,结果输出在屏幕;*/ reserve(&stu) //倒置顺序表 printf(\ pntList(&stu); getchar();
/*从键盘输入一个身高值,统计与该身高相同的学生个数并输出在屏幕*/
printf(\ a student height: \\n\ scanf(\
c=count(&stu,y) //统计相同身高的学生数存于c中 printf(\ getchar(); }
/*在学号从小到大排序的学生表中插入值为x的学生仍保持学号的有序性*/ void insertX(Seqlist *lp,datatype x) {
int i,j;
if(lp->last>=MAX) Error(\
//在学号升序的顺序表中找插入位置后,插入x并使表长增1 else
for(i=0;i
for(j=lp->last-1;j>=i;j--) /*从后往前元素后移*/ lp-> strname [j+1]=lp-> strname [j];
lp-> strname [i]=x; lp->last++; /*插入并表长增1*/ }
/*对lp指向的顺序表进行倒置操作*/ void reverse(Seqlist *lp) { int i,j;
datatype temp;
//通过前后数据元素交换的方式实现倒置 for (i = 0; j = lp->last – 1, j - i >= 0; i++, j--) { temp = lp->data[i].sg; lp->data[i].sg = lp->data[j].sg; lp->data[j].sg = temp; } }
/*统计学生表中身高值为y的学生数并返回*/ int count(Seqlist *lp,float y) { int i,c=0;
//遍历顺序表统计身高为y的学生数到c变量并返回值
i = lp->last; while (i) { if (lp->data[i - 1].sg = y) { c++; i--; } } }
实验总结分析(本程序的重点与难点,调试中出现的问题及解决方法等)
正在阅读:
实验一 顺序表操作实现07-03
垃圾吊规程修改版04-03
xxx2007上半年工作总结05-24
滨州市区国税局党务公开情况汇报04-29
SCI论文的三点注意-美辑编译01-02
砌体施工方案(呼叫中心)05-08
中考数学答题技巧总结08-19
砌体施工方案03-14
- 多层物业服务方案
- (审判实务)习惯法与少数民族地区民间纠纷解决问题(孙 潋)
- 人教版新课标六年级下册语文全册教案
- 词语打卡
- photoshop实习报告
- 钢结构设计原理综合测试2
- 2014年期末练习题
- 高中数学中的逆向思维解题方法探讨
- 名师原创 全国通用2014-2015学年高二寒假作业 政治(一)Word版
- 北航《建筑结构检测鉴定与加固》在线作业三
- XX县卫生监督所工程建设项目可行性研究报告
- 小学四年级观察作文经典评语
- 浅谈110KV变电站电气一次设计-程泉焱(1)
- 安全员考试题库
- 国家电网公司变电运维管理规定(试行)
- 义务教育课程标准稿征求意见提纲
- 教学秘书面试技巧
- 钢结构工程施工组织设计
- 水利工程概论论文
- 09届九年级数学第四次模拟试卷
- 顺序
- 实验
- 操作
- 实现
- 生产地质说明书
- 食安委会议主持词
- 内燃机课程设计说明书
- 小学体育三年级上册教案
- 福建省师大附中2012届高三模拟试卷语文
- 精品高考模拟卷—-浙江省金丽衢十二校2015届高三第一次联考 语文
- 母体机构对工地试验室管理办法
- 化工实习报告
- 西北工业大学关于表彰2011-2012学年先进集体、三好学生优秀学生
- 深基坑专项施工方案(专家论证)
- 监理规划 - 图文
- 头雁类文稿铁面执纪 重拳出击
- 英语句型
- 技工院校学生流失的去向和产生的影响分析
- 2010总复习同角三角函数基本关系式与诱导公式
- 虚拟模型 - 图文
- 2016-2021年中国诊断试剂行业市场发展现状及投资前景预测报告(
- 冷为峰诗词联赋歌曲新诗六类精选集锦
- 2012年河南中考化学试题及答案
- 2016尔雅世界建筑史答案