数据结构实验:基于线性表的图书信息管理
更新时间:2024-04-25 03:19:01 阅读量: 综合文库 文档下载
X X X X X 大 学
11学年—12学年第2学期数据结构实验报告书
专 业: 班 级: 姓 名: 学 号: 实验地点: 计算中心B6机房 任课教师: 实验题目: 基于线性表的图书信息管理 实验环境: Visual Studio 6.0
实验目的:
1、掌握线性表的定义;
2、掌握线性表的基本操作,如建立、查找、插入和删除等。
实验内容:
1、必做
分别定义一个包含图书信息(书号,书名,定价)的顺序表和链表,使其具有如下功能: (1) 从给定的文件book.txt逐个读入图书信息; (2) 逐个显示图书表中所有图书的相关信息; (3) 统计表中图书个数;
(4) 输出图书价格最高的图书信息(考虑可能有多个); (5) 计算所有图书的平均价格;
(6) 根据书名进行查找,返回相应书名的图书的书号和定价(考虑重名情况); (7) 根据指定的位置,返回相应位置的图书的全部信息;
(8) 给定一本图书相关信息,插入到表中指定的位置,将插入后的结果重新写入文件book.txt;
(9) 删除指定位置的图书记录,将删除后的结果重新写入文件book.txt;
(10) 将图书表信息逆序存储,将逆序的图书信息存入文件book_inverser.txt中。 2、选做
(1)按照图书价格进行排序,将排序的结果以格式(定价,书号,书名)存入文件book_sort.txt中。
(2)实现两个一元多项式的加法、减法、乘法运算。
实现方法、实验结果及结论分析等:
(一)实现方法
1. 所用数据结构的定义及其相关说明(相关结构体或类的定义及其含义) //定义一个结构体Book
struct Book //定义结构体 { };
//顺序表的定义
typedef struct LNode //定义顺序表 {
struct Book *elem; //指向数据元素的基地址 int length; //顺序表当前长度 char no[30]; //编码 char name[30]; //书名 int price; //价格
}SqList;
//链表的定义
typedef struct LNode //定义链表 {
struct Book data; //数据域
struct LNode *next; //指针域 }LNode, *LinkList;
//一元二次多项式的定义 typedef struct PNode {
float coef; //参数
int expn; //指数 struct PNode *next; //指针域 }PNode, *Polynomial;
2. 自定义函数的名称及其功能说明
//函数声明(顺序表)
Status InitList( SqList &L ); //顺序表初始化 void Input( SqList &L ); //输入函数 void Output( SqList L ); //输出函数
void Count( SqList L ); //输出数据长度函数 void Compare( SqList L ); //比较价格函数 void Average( SqList L ); //求平均价格函数
void Search_name( SqList L ); //按名字查找图书信息函数
void Search_no( SqList L ); //按输入图书位置查找图书信息 void Insert( SqList &L ); //插入函数 void Delete( SqList &L ); //删除函数 void Inverse( SqList &L ); //逆转函数
//函数声明(链表)
Status InitList( LinkList &L ); //初始化链表 void Input( LinkList &L ); //输入函数 void Output( LinkList &L ); //输出函数
void Count( LinkList L ); //输出数据个数的函数 void Compare( LinkList L ); //比较价格函数 void Average( LinkList L ); //求平均价格函数
void Search_name( LinkList L ); //按照书名查找图书信息的函数 Status Search_no( LinkList L ); //按照输入位置查找图书信息 Status Insert( LinkList &L ); //插入函数 Status Delete( LinkList &L ); //删除函数 Status Inverse( LinkList &L ); //逆序函数 Status Sort( LinkList &L ); //排序函数 //函数声明(一元多项式)
Status InitPolyn( Polynomial &P ); //初始化一元多项式 void CreatePolyn( Polynomial &P ); //创建一元多项式
void CopyPolyn( Polynomial &P1, Polynomial &P2 ); //一元多项式的拷贝 void AddPolyn( Polynomial &PA, Polynomial &PB ); //一元多项式相加函数 void MinusPolyn( Polynomial &PA, Polynomial &PB );//一元多项式相减 void MultiplyPolyn( Polynomial &Pa, Polynomial &Pb );//一元多项式相乘
3. 主要功能算法的时间复杂度 ⑴顺序表
函数名称
Status InitList( SqList &L );//顺序表初始化 void Input( SqList &L );//输入函数 void Output( SqList L );//输出函数
void Count( SqList L ); //输出数据长度函数 void Compare( SqList L );//比较价格函数 void Average( SqList L );//求平均价格函数 void Search_name( SqList L );//按照书名查找 void Search_no( SqList L );//按照输入位置查找 void Insert( SqList &L );//插入函数 void Delete( SqList &L );//删除函数 void Inverse( SqList &L ); ⑵链表
函数名称
Status InitList( LinkList &L );//初始化链表 void Input( LinkList &L );//输入函数 void Output( LinkList &L );//输出函数
void Count( LinkList L );//输出数据个数的函数 void Compare( LinkList L );//比较价格函数 void Average( LinkList L );//求平均价格函数 void Search_name( LinkList L );//按照书名查找
时间复杂度 O(1) O(n) O(n) O(1) O(n) O(n) O(n) 时间复杂度 O(1) O(n) O(n) O(1) O(n) O(n) O(n) O(1) O(n) O(n) O(n)
Status Search_no( LinkList L );//按照输入位置查找 Status Insert( LinkList &L );//插入函数 Status Delete( LinkList &L );//删除函数 Status Inverse( LinkList &L );//逆序函数 Status Sort( LinkList &L );//排序函数 ⑶一元多项式
函数名称
Status InitPolyn( Polynomial &P );//初始化一元多项式 void CreatePolyn( Polynomial &P ); //创建一元多项式 void CopyPolyn( Polynomial &P1, Polynomial &P2 ); void AddPolyn( Polynomial &PA, Polynomial &PB ); void MinusPolyn( Polynomial &PA, Polynomial &PB ); void MultiplyPolyn( Polynomial &Pa, Polynomial &Pb );
4. 实验任务书中要求画的流程图
⑴链表根据指定位置进行查找的算法流程图
开始O(n) O(n) O(n) O(n) O(n*n) 时间复杂度 O(1) O(n) O(n) O(m+n) O(m+n) O(m*n*m*n)
定义指向结点的指针变量p,并令p指向头结点定义整型变量i,n输入查找信息的位置n判断是否有位置n是i=0否p指向下一个结点i=i+1是i 开始定义指向结点的指针变量p、r,并令r指向头结点定义整型变量i,n输入插入图书信息的位置i判断是否有位置i是给p开设新的内存空间,空间为Lnode类型空间大小将插入的数据输入到p中否n=0n=n+1r指向下一个结点i (二)实验结果 1.顺序表 (1)菜单:当输入超出菜单所给的数字时出现提示 (2)输出函数:输出全部图书信息 (3)统计图书个数 (4)找出价格最高的图书,并输出其信息。当出现多个价格同时最高的图书 时依然可以正确输出 (5)求出所有图书的平均价格 (6)按书名查找图书,并输出其信息;当没有此书时会有提示 (7)按照指定的位置查找图书信息,当输入非法时有提示 (8)在指定位置插入图书信息,当位置不合法或者空间不足时有提示 (9)删除指定位置的图书信息,当输入位置不合法是提示 (10)图书信息逆序 2. 链表 (1)当输入超出菜单所给选项的数字时有提示 (2)输出所有的图书信息 (3)统计图书个数 (4)查找价格最高的图书,如果有多本书同时为最高价可全部输出 (5)计算所有图书的平均价格 (6)按书名查找图书,可查找多本同名图书,当无查找书籍信息时有 提示 (7)按输入位置查找图书信息,当位置不合法是有提示 (8)在指定位置插入信息,当位置不合法是有提示 (9)删除指定位置的图书信息,当位置不合法是有提示 (10)将所有图书信息逆序 (11)将所有图书信息按照价格由高到低排序 3.一元多项式 (1)创建一元多项式 (2)弹出菜单,当输入错误选项时有提示,还有选项可以跳出菜单 (3)一元多项式相加 (4)一元多项式相减 (5)一元多项式相乘 (三)结论分析 1. 问题与解决方法 在写菜单的代码时,我设法让菜单能够循环,但是也要有出口,所以选择了一个循环;在选择菜单选项时,由于选项较多,用if语句进行选择会套用多层if语句,而且对于非选项的数字处理也较麻烦,于是我选择了switch语句。但是要菜单不断重复,只是在选择退出菜单选项时停止循环,所以我选择了while循环语句,并让条件永远为真,当保存选项的变量为退出菜单选项时,用break终止循环。 2. 收获和体会 在一元多项式乘法运算的编写中,遇到了几个困难,我通过调试,逐步跟踪数据的变化,找到了出错位置,并及时改正。这让我进一步体会到了多重循环及判断语句套用时应注意的细节,以及指针的再次使用重赋值问题。与此同时,我对于调试也进一步熟悉起来,对于日后的程序编写检查错误积累了经验。 3. 尚存在的问题 对于步骤复杂的函数编写容易出错,程序的健壮性仍有欠缺,尤其是对于一元多项式的不同情况的问题应进一步改进。
正在阅读:
数据结构实验:基于线性表的图书信息管理04-25
浅析全球化语境下的当代审美文化11-03
《宵山万华镜》读后感精选10篇12-12
现代生产现场管理--08-31
分享超级技巧04-02
产业组织复习题03-11
有机化学基础题训练03-01
人教版二年级上册期末语文快乐阅读 阅读理解配套练习题 B5 打印稿09-15
应用数值分析研究生课程课后习题答案05章03-13
- 多层物业服务方案
- (审判实务)习惯法与少数民族地区民间纠纷解决问题(孙 潋)
- 人教版新课标六年级下册语文全册教案
- 词语打卡
- photoshop实习报告
- 钢结构设计原理综合测试2
- 2014年期末练习题
- 高中数学中的逆向思维解题方法探讨
- 名师原创 全国通用2014-2015学年高二寒假作业 政治(一)Word版
- 北航《建筑结构检测鉴定与加固》在线作业三
- XX县卫生监督所工程建设项目可行性研究报告
- 小学四年级观察作文经典评语
- 浅谈110KV变电站电气一次设计-程泉焱(1)
- 安全员考试题库
- 国家电网公司变电运维管理规定(试行)
- 义务教育课程标准稿征求意见提纲
- 教学秘书面试技巧
- 钢结构工程施工组织设计
- 水利工程概论论文
- 09届九年级数学第四次模拟试卷
- 数据结构
- 线性
- 基于
- 实验
- 图书
- 管理
- 信息
- 支部大会讨论接收 同志为预备党员的会议记录
- 高中英语Unit3TheMillionPoundBank教案新人教版必修3
- 带式运输机机械传动装置设计
- (6)《汽车运用与维修专业》人才需求调研报告
- 增霸卡教育专业版&普及版使用指南 - 图文
- 液位传感器的选择
- 大气科学专业本科人才培养方案
- 价格战略-话术汇总
- 松山经济开发区多措并举招商引资工作扎实推进
- 护理专业生化复习题
- 高等教育学参考题2
- 某银行股份有限公司A分行税务稽查预案
- 成品保护和工程保修工作的管理措施和承诺(完整版)
- 二维码在移动电子商务中的应用 - 图文
- 生化试验思考题总结
- EasyPoi教程
- 计算机填空
- 包糖衣工艺
- 花样流水灯 - 图文
- 2015长春市事业单位考试通用知识备考资料:每日一练(2015.10.20)