线性表.docx
- 文档编号:3205681
- 上传时间:2022-11-20
- 格式:DOCX
- 页数:30
- 大小:852.01KB
线性表.docx
《线性表.docx》由会员分享,可在线阅读,更多相关《线性表.docx(30页珍藏版)》请在冰豆网上搜索。
线性表
实验目的:
1、掌握线性表的定义;
2、掌握线性表的基本操作,如建立、查找、插入和删除等。
实验内容:
分别定义一个包含图书信息(书号,书名,定价)的顺序表和链表,使其具有如下功能:
(1)从给定的文件book.txt逐个读入图书信息;
(2)逐个显示图书表中所有图书的相关信息;
(3)统计表中图书个数;
(4)输出图书价格最高的图书信息(考虑可能有多个);
(5)计算所有图书的平均价格;
(6)根据书名进行查找,返回相应书名的图书的书号和定价(考虑重名情况);
(7)根据指定的位置,返回相应位置的图书的全部信息;
(8)给定一本图书相关信息,插入到表中指定的位置,将插入后的结果重新写入文件book.txt;
(9)删除指定位置的图书记录,将删除后的结果重新写入文件book.txt;
(10)将图书表信息逆序存储,将逆序的图书信息存入文件book_inverser.txt中。
实现方法、实验结果及结论分析等:
顺序表:
#include
#include
#include
#include
usingnamespacestd;
#defineSIZE1000
typedefstruct{//struct结构体将图书信息整在一起
charno[15];//书号数组大小至少比实际的大一,因为最后\n
charname[50];//书名
floatprice;//定价
}Book;//图书信息定义
typedefstruct{
Book*BK;//指针
intlength;//定义图书表的图书记录个数
}SqList;
voidInput(SqList&L)//从book.txt中读取图书数据
{
inti=0;
charBK_head1[10],BK_head2[10],BK_head3[10];//定义数组串
L.BK=newBook[SIZE];//申请内存空间
ifstreaminFile("book.txt");//读入book的信息文件输入流
if(!
inFile)
{//如果没有读入
cout<<"Cannotopenthisfile!
"< exit (1);//退出 } inFile>>BK_head1>>BK_head2>>BK_head3;//读取文件中的标题 L.length=0; while(! in())//逐行依次读取所有图书数据 { inFile>>L.BK[i].no>>L.BK[i].name>>L.BK[i].price; i++;//记录图书个数 } L.length=i; in(); cout<<"\n读取book.txt信息完毕,可以通过选项 (2)查看图书生信息\n"< } voidOutput(SqList&L)//逐个显示图书表中所有图书的相关信息 { for(inti=0;i cout< cout<<"\n信息显示完毕\n"< //ofstreamoutFile("book_new.txt"); //for(i=0;i //outFile< } voidCount_Len(SqListL)//统计表中图书个数 { cout<<"当前的图书总数为: "< } voidmax_price(constSqList&L)//输出图书价格最高的图书信息 { floatmax;//定义max max=L.BK[0].price;//初始化 for(inti=0;i if(L.BK[i].price>=max)//如果后项比max大,则将其赋值给max max=L.BK[i].price; for(inti=0;i if(L.BK[i].price==max) cout< } floatCount_Price(constSqList&L)//计算所有图书的平均价格;const因为不修改 { floatsum=0.0f; floatcount_price; for(inti=0;i { sum+=L.BK[i].price; count_price=sum/L.length; } cout< return0; } Book*Search(constSqList&L)//根据书名进行查找,返回相应书名的图书的书号和定价Book为指针类型 { char*name; name=newchar[50];//为指针动态分配内存 cout<<"请输入要查找的书名: "; cin>>name; for(inti=0;i { if(strcmp(name,L.BK[i].name)==0)//比较字符串看是否相等来确定是否查找到 { cout<<(L.BK+i)->name<<"\t"< returnL.BK+i; //返回指针,指针对应着相应书名的书号和定价 } } cout<<"没找到"< delete[]name; return0; } voidfind_pos(SqList&L)//根据指定的位置,返回相应位置的图书的全部信息 { intpos; cout<<"输入位置"< while (1) { cin>>pos; if(pos<1||pos>L.length) cout<<"输入错误,请重新输入";//如果输入的位置不在搜索范围内,则输出“输入错误” else break; } cout< } voidInsert(SqList&L)//给定一本图书相关信息,插入到表中指定的位置,将插入后的结果重新写入文件book.txt { intpos; Booknewbook; cout<<"输入需要插入的图书位置"< while (1) { cin>>pos; if(pos<1||pos>(L.length+1)) cout<<"输入错误,请重新输入"; else break; } cout<<"输入图书相关信息(书名,序号,价格)"; cin>>newbook.name>>newbook.no>>newbook.price; for(inti=L.length;i>pos-1;i--) L.BK[i]=L.BK[i-1]; L.BK[pos-1]=newbook; L.length++; Output(L); } voiddelete_book(SqList&L)//删除指定位置的图书记录,将删除后的结果重新写入文件book.txt { intpos; cout<<"输入需要删除的图书位置"; while (1){ cin>>pos; if(pos<1||pos>L.length) cout<<"输入错误,请重新输入"; else break; } for(inti=pos;i L.BK[i-1]=L.BK[i]; L.length--; Output(L); } voidreverse(SqList&L)//将图书表信息逆序存储,将逆序的图书信息存入文件book_inverser.txt中 { for(inti=0;i s[i],L.BK[L.length-1-i]);//交换函数库函数 Output(L); } voidmain() { charno; SqListL; while (1) { cout<<"****************************欢学使用图书信息管理系统! *************************"<<"\n";//菜单选项 cout<<" (1)输入图书信息"<<"\n"; cout<<" (2)逐个显示图书信息"<<"\n"; cout<<"(3)统计表中图书个数"<<"\n"; cout<<"(4)输出图书价格最高的图书信息"<<"\n"; cout<<"(5)计算所有图书的平均价格"<<"\n"; cout<<"(6)根据书名进行查找"<<"\n"; cout<<"(7)根据指定位置进行查找"<<"\n"; cout<<"(8)插入图书信息到指定位置"<<"\n"; cout<<"(9)删除指定位置的图书记录"<<"\n"; cout<<"(a)将图书表信息逆序存储"<<"\n";//不能写,因为单个字符 cout<<"(0)退出系统"<<"\n"; cout<<"\n"; cout<<"请选择您需要的服务: "; cin>>no; switch(no){ case'1': Input(L);break; case'2': Output(L);break; case'3': Count_Len(L);break; case'4': max_price(L);break; case'5': Count_Price(L);break; case'6': Search(L);break; case'7': find_pos(L);break; case'8': Insert(L);break; case'9': delete_boo
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 线性