链表报告.docx
- 文档编号:6597340
- 上传时间:2023-01-08
- 格式:DOCX
- 页数:20
- 大小:78.65KB
链表报告.docx
《链表报告.docx》由会员分享,可在线阅读,更多相关《链表报告.docx(20页珍藏版)》请在冰豆网上搜索。
链表报告
重庆交通大学
设计性实验报告
班级:
计软2013级2班
学号:
姓名:
旧城余约
实验项目名称:
学生信息管理(链表)
实验项目性质:
设计性实验
实验所属课程:
数据结构
实验室(中心):
B01-407
指导教师:
实验完成时间:
2015年4月4日
一、实验目的
1、实现线性表的链式存储结构;
2、熟悉C++程序的基本结构,掌握程序中的头文件、实现文件和主文件之间的相互关系及各自的作用;
3、熟悉链表的基本操作方式,掌握链表相关操作的具体实现。
二、实验内容及要求
实验内容:
对链式存储的线性表进行一些操作。
主要包括:
各种位置的插入、删除操作、显示数据、查找、更新、统计以及学生数据文件的读写操作等。
要求:
要求线性表采用类的定义,数据对象的类型自行定义。
三、实验设备及软件
计算机、VC6.0
四、实验过程及步骤
运行环境:
VC6.0
实现思路:
首先,我定义了date类、student类、list类以及menu类;其中,date类以及student类用来包含学生的一些基本信息;list类中,我采用的单链表以及模板类,在实际操作时实例化为student类;menu类是用来给用户提供选择的,其中包括输入、输出、插入、删除、保存(为文件形式)以及从文件中读取信息。
然后,在链表和其他类结合使用时,主要通过重载>>和<<等来实现输入输出。
五、主要代码及运行结果
主要代码:
1、源文件:
#include
#include"menu.h"
voidmain()
{
List
Studentob2;
Menuob3;
ob3.mean(ob1,ob2);
}
2、头文件:
1)、date类
classdate
{
public:
intyear,month,day;
date(void)
{
year=1980;
month=1;
day=1;
}
date(inty,intm,intd)
{
year=y;
month=m;
day=d;
}
voidset_date(inty,intm,intd)
{
year=y;
month=m;
day=d;
}
intget_year(void)
{
returnyear;
}
intget_month(void)
{
returnmonth;
}
intget_day(void)
{
returnday;
}
intisleapyear();
voidinput();
voidoutput();
dateoperator=(date&d);
};
datedate:
:
operator=(date&d)
{
year=d.year;
month=d.month;
day=d.day;
return*this;
}
2)、student类
#include
#include
#include"date.h"
classStudent:
publicdate
{
private:
charname[11];
charsex[2];
charid[13];
datebirthday;
doublescore;
public:
Student();
Student(char*na,char*se,char*id_number,inty,intm,intd,doublesc):
date(y,m,d)
{
strcpy(name,na);
strcpy(sex,se);
strcpy(id,id_number);
score=sc;
}
voidset_Student(char*na,char*se,char*id_number,inty,intm,intd,doublesc);
friendistream&operator>>(istream&is,Student&st);
friendostream&operator<<(ostream&os,Student&st);
Studentoperator=(Student&st);
booloperator!
=(Student&st);
booloperator==(Student&st);
};
boolStudent:
:
operator==(Student&st)
{
if(strcmp(id,st.id)==0)
returntrue;
else
returnfalse;
}
boolStudent:
:
operator!
=(Student&st)
{
if(strcmp(id,st.id)==1)
returntrue;
else
returnfalse;
}
StudentStudent:
:
operator=(Student&st)
{
strcpy(name,st.name);
strcpy(sex,st.sex);
strcpy(id,st.id);
birthday=st.birthday;
score=st.score;
return*this;
}
Student:
:
Student()
{
strcpy(name,"XX");
strcpy(sex,"未知");
strcpy(id,"63130605XXXX");
birthday.set_date(1980,1,1);
score=0;
}
voidStudent:
:
set_Student(char*na,char*se,char*id_number,inty,intm,intd,doublesc)
{
strcpy(name,na);
strcpy(sex,se);
strcpy(id,id_number);
birthday.set_date(y,m,d);
score=sc;
}
istream&operator>>(istream&is,Student&st)
{
cout<<"姓名:
";is>>st.name;
cout<<"性别:
";is>>st.sex;
cout<<"出生年:
";is>>st.birthday.year;
cout<<"出生月:
";is>>st.birthday.month;
cout<<"出生日:
";is>>st.birthday.day;
cout<<"学号:
";is>>st.id;
cout<<"成绩:
";is>>st.score;
st.set_Student(st.name,st.sex,st.id,st.birthday.year,st.birthday.month,st.birthday.day,st.score);
returnis;
}
ostream&operator<<(ostream&os,Student&st)
{
os< os< os< os< os< os< returnos; } 3)、list类 #include #include #include"student.h" template classList; template classLinkNode { friendclassList private: Tdata; LinkNode public: LinkNode(LinkNode { link=ptr; } LinkNode(T&item,LinkNode { data=item; link=ptr; } }; template classList { private: LinkNode public: List() { first=newLinkNode } List(constT&x) { first=newLinkNode } ~List() { makeEmpty(); } voidmakeEmpty();//将链表置为空 intLength()const;//得到链表的长度 LinkNode LinkNode LinkNode { returnfirst; } boolgetDate(inti,T&x)const;//取出第i个元素的值 voidsetData(inti,T&x);//用x替换第i个元素! boolInsert(inti,T&x);//插入 boolRemove(inti,T&x);//删除函数 boolIsEmpty()const//判断链表是否为空! ! {returnfirst->link==NULL? true: false;} voidinput(TendTag);//输入函数 voidoutput(); List List(List voidsearch(inti); boolbaocun(); boolread(); }; template voidList : search(inti) { Tval; LinkNode if(current==NULL||current->link==NULL) { cout<<"输入的数值不合理"; return; } val=current->data; cout< } template List : List(List { Tvalue; LinkNode LinkNode while(srcptr->link! =NULL) { value=srcptr->link->data; destptr->link=newLinkNode destptr=destptr->link; srcptr=srcptr->link; } destptr->link=NULL; } template List : operator=(List { Tvalue; LinkNode LinkNode while(srcptr->link! =NULL) { value=srcptr->link->data; destptr->link=newLinkNode destptr=destptr->link; srcptr=srcptr->link; } destptr->link=NULL; return*this; } template boolList : save() { ofstreamfount1("e: \\Student.dat",ios: : binary); if(! fount1) { cout<<"文件打开失败! "< returnfalse; } LinkNode while(current! =NULL) { fount1.write((char*)¤t->data,sizeof(T)); current=current->link; } returntrue; } template boolList : read() { LinkNode Tval; ifstreaminf("e: \\Student.dat",ios: : binary); if(! inf) { cout<<"文件打开失败! "< returnfalse; } while(! inf.eof()) { inf.read((char*)&val,sizeof(val)); newNode=newLinkNode newNode->link=first->link; first->link=newNode; } returntrue; } template voidList : output()//输出函数 { LinkNode while(current! =NULL) { cout< current=current->link; } } template boolList : Remove(inti,T&x)//删除函数 { LinkNode if(current==NULL||current->link==NULL) returnfalse; LinkNode current->link=del->link; deletedel; returntrue; } template boolList : Insert(inti,T&x)//插入函数 { LinkNode if(current==NULL) returnfalse; LinkNode if(newNode==NULL) { cerr<<"储存分配错误! "< exit (1); } newNode->link=current->link; current->link=newNode; returntrue; } template voidList : setData(inti,T&x) { if(i<=0) return; LinkNode if(current==NULL) return; else current->data=x; } template boolList : getDate(inti,T&x)const { if(i<=0) returnNULL: LinkNode if(current==NULL) returnfalse; else { x=current->data; returntrue; } } template LinkNode : Locate(inti)//定位 { if(i<0) returnNULL; LinkNode intk=0; while(current! =NULL&&k { current=current->link; k++; } returncurrent; } template intList : Length()const//链表长度 { LinkNode intcount=0; while(p! =NULL) { p=p->link; cout++ } returncount; } template voidList : input(TendTag)//输入函数 { LinkNode makeEmpty(); cin>>val; while(val! =endTag) { newNode=newLinkNode newNode->link=first->link; first->link=newNode; cin>>val; } } template LinkNode : Search(Tx)//搜索函数 { LinkNode while(current! =NULL) if(current->data==x) break; else current=current->link; returncurrent; } template voidList : makeEmpty() { LinkNode while(first->link! =NULL) { q=first->link; first->link=q->link; deleteq; } } 4)、menu类 #include"list.h" classMenu { public: voidmean(List { intch; while(ch! =0) { cout<<"|~~~~~~~~学生管理系统~~~~~~~~~~~|"< cout<<"|~~~~~~~1.输入学生信息! ~~~~~~~~|"< cout<<"|~~~~~~~2.输出学生信息! ~~~~~~~~|"< cout<<"|~~~~~~~3.插入学生信息! ~~~~~~~~|"< cout<<"|~~~~~~~4.删除学生信息! ~~~~~~~~|"< cout<<"|~~~~~~~5.搜索学生信息! ~~~~~~~~|"< cout<<"|~~~~~~~6.保存(文件形式)! ~~~~~~|"< cout<<"|~~~~~~~7.读取(文件)! ~~~~~~~~~~|"< cout<<"|~~~~~~~0.退出! ~~~~~~~~~~~~~~~~|"< cout<<"请输入你的选择! ! "< cin>>ch; switch(ch) { case1: Finput(l);break; case2: OutPut(l);break; case3: Insert(l,st);break; case4: Remove(l);break; case5: Search(l);break; case6: save(l);break; case7: read(l);break; } } } voidread(List { if(l.read()) cout<<"从“E: \\student.dat! ”中成功读取文件"; else cout<<"文件读取失败! "< } voidsave(List { if(l.baocun()) cout<<"文件成功保存到“E: \\student.dat! ”"; else cout<<"文件保存失败! "< } voidSearch(List { inti; cout<<"请输入你要搜索的位置! "< cin>>i; l.search(i); } voidRemove(List { inti; cout<<"请输入你要删除的位置: "; cin>>i; Studentss; if(l.Remove(i,ss)) { cout<<"删除成功"< cout< } else cout<<"删除失败! "< } voidFinput(List { Studentst; st.set_Student("0","0",
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 表报