线性表实验报告:针对链式或顺序存储的线性表实现指定的操作(二份).doc_第1页
线性表实验报告:针对链式或顺序存储的线性表实现指定的操作(二份).doc_第2页
线性表实验报告:针对链式或顺序存储的线性表实现指定的操作(二份).doc_第3页
线性表实验报告:针对链式或顺序存储的线性表实现指定的操作(二份).doc_第4页
线性表实验报告:针对链式或顺序存储的线性表实现指定的操作(二份).doc_第5页
已阅读5页,还剩14页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

实验报告的基本内容、格式已经给出,请同学们参考书写。其中,第一项可补充,第二、三项不修改,第四项为可选项,第六项为参考程序,第五、七、八项需自己上机调试程序书写。注意:红色字体为提示内容,大家不要往实验报告上抄。实验一:线性表的顺序存储结构的表示和实验 学生成绩管理系统一、实验目的:通过上机调试程序,充分理解和掌握有关线性表的定义、实现及操作。二、实验环境 Win2003/win xp +Visual C+三、基本要求:利用顺序表来制作一个学生成绩表1、建立头文件,包含数据类型定义和基本操作。2、建立程序文件利用顺序表表完成一个班级的一个学期的所有课程的管理:能够增加、删除、修改学生的成绩记录。四、简要的需求分析与概要设计(本项为可选项,选作时参考课本P230:“程序的规范说明”书写)五、详细的算法描述:六、实验步骤(以下为参考程序,已经调试运行通过)#include#includeusing namespace std;const int LISTINITSIZE=100;const int LISTINCREMENT=10;struct studentchar no20;char name20;int english;int math;typedef student elemtype;struct sqlistelemtype *elem;int length;int listsize;int incrementsize;/初始化顺序表lvoid initlist(sqlist &l,int maxsize=LISTINITSIZE,int incresize=LISTINCREMENT)l.elem=new elemtypemaxsize;l.length=0;l.listsize=maxsize;l.incrementsize=incresize;/当线性表空间不足时,进行扩容操作void increment(sqlist &l)elemtype *a=new elemtypel.listsize+l.incrementsize;for(int i=0;il.length ;i+)ai=l.elemi;delete l.elem;l.elem=a;l.listsize+=l.incrementsize;/在第i个元素之前插入元素evoid insertlist(sqlist &l,int i,elemtype e)/判断i的合法性1=i=l.length+1 if(il.length +1)cout=i-1;j-)l.elem j+1=l.elem j;/插入元素e到第i个元素之前l.elem i-1=e;/修改顺序表的长度l.length +;/输出线性表中指定元素evoid outputelem(elemtype e) cout学号:e.no 姓名: 英语:e.english 数学:e.math endl;/输出整个线性表void outputlist(sqlist l)for(int i=0;il.length ;i+) outputelem(l.elem i);/在顺序表l中删除第i个元素,用e带回其值写到此处了void deletelist(sqlist &l,int i,elemtype &e)/判断i值的合法性1=i=l.lengthif(il.length )couti值不合法!;exit(0);/取被删的元素置于e中e=l.elem i-1;/移动元素for(int j=i;jl.length ;j+)l.elem j-1=l.elem j;/修改顺序表的长度l.length -;/根据学号查找学生的位序int locateelembyno(sqlist l,elemtype e)for(int i=0;il.length ;i+)if(strcmp(l.elem i.no ,e.no)=0)return i+1;return 0;/根据位序查找学生的信息 elemtype locateelembypos(sqlist l,int i) return l.elem i-1; /将当前顺序表中的信息保存 void save(sqlist l) ofstream out; out.open (scorefile,ios:binary); for(int i=0;il.length;i+) out.write(char *)&l.elemi,sizeof student); out.close (); / 读取scorefile文件中的数据到顺序表l中,如果文件不存在,则创建该文件 void openorcreate(sqlist &l) /以读取的方式打开指定的文件scorelist,若存在,则将文件中的内容 /读出并插入到顺序表l中,若不存在,则根据用户的选择,决定是否创建该文件 ifstream in; elemtype e; char answer; int i=0; in.open (e:scorelist,ios_base:binary); if(in) while(in.peek()!=EOF) in.read(char *)&e,sizeof(student);insertlist(l,l.length +1,e); else /创建该文件 coutanswer; if(answer=Y | answer=y) ofstream out(e:scorelist,ios_base:binary); if(out) do cout请输入学生的学号、姓名、英语成绩和数学成绩:e.englishe.math; out.write(char *)&e,sizeof(elemtype); insertlist(l,+i,e); coutanswer; while(answer=Y | answer=y); else cout文件打开失败!; return; else return; /逆置顺序表l void invertlist(sqlist &l) int i; elemtype temp; for(i=0;il.length/2;i+) temp=l.elem i; l.elem i=l.elem l.length -i-1; l.elem l.length -i-1=temp; /将顺序表l中前m个元素和后n个元素互换 void exchange1(sqlist &l,int m,int n) int k,j; elemtype temp; for(k=1;k=k-1;j-) l.elem j+1=l.elem j; l.elem k-1=temp; /将数组R中下标从s到t的元素逆置 void invert(elemtype R,int s,int t) elemtype temp; for(int k=s;k=(s+t)/2;k+) temp=Rk;Rk=Rt-k+s;Rt-k+s=temp; /将顺序表l中前m个元素和后n个元素互换 void exchange2(sqlist &l,int m,int n) invert(l.elem ,0,m+n-1); invert(l.elem ,0,n-1); invert(l.elem ,n,m+n-1); /将非纯集合变成纯集合void purge(sqlist &lb)sqlist la;initlist(la);int i,j;for(i=0;ilb.length ;i+)for(j=0;jla.length ;j+)if(strcmp(lb.elem i.no,la.elem j.no)=0) break;if(j=la.length )la.elem la.length =lb.elem i;la.length +;delete lb.elem ;lb.elem=la.elem;lb.length=la.length;#includeSqList_h.h#includeusing namespace std;void main()sqlist l;initlist(l);elemtype e;int m,n;int choice,pos;docoutendl;cout1 插入endl;cout2 删除endl;cout3 按学号查找endl;cout4 保存endl;cout5 输出endl;cout6 逆置endl;cout7 交换元素endl;cout8 集合置纯endl; cout9 读文件中的数据至顺序表endl; cout10 退出endl;coutchoice;switch(choice)case 1: cout请输入要插入学生的学号、姓名、英语、数学:e.englishe.math; cout请输入插入位置:pos; insertlist(l,pos,e); break;case 2:coute.no;pos=locateelembyno(l,e);if(pos=0)cout要删除的学生不在该表中.;elsecout要删除的是表中的第pos个学生。endl;deletelist(l,pos,e);cout被删除的学生信息为:;outputelem(e);break; case 3:coute.no;pos=locateelembyno(l,e);if(pos=0)cout要查找的学生不在该表中。;elsecout要查找的学生是表中的第pos个学生。endl;cout要查找的学生信息为:;outputelem(l.elem pos-1);break; case 4:save(l);break;case 5:cout顺序表中学

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论