毕业设计数据结构b线段树及其应用Word格式文档下载.docx
- 文档编号:14280713
- 上传时间:2022-10-21
- 格式:DOCX
- 页数:53
- 大小:348.55KB
毕业设计数据结构b线段树及其应用Word格式文档下载.docx
《毕业设计数据结构b线段树及其应用Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《毕业设计数据结构b线段树及其应用Word格式文档下载.docx(53页珍藏版)》请在冰豆网上搜索。
2.1课题调研2
2.2用户需求分析2
3方案设计2
3.1总体功能设计2
3.2数据结构设计2
3.3函数原型设计2
3.4主算法设计3
3.5用户界面设计3
4方案实现4
4.1开发环境与工具4
4.2程序设计关键技术4
4.3个人设计实现(按组员分工)
4.3.1余灏然设计实现4
4.3.2魏嘉设计实现9
4.3.3张越设计实现15
5测试与调试17
5.1个人测试(按组员分工)17
5.1.1余灏然测试17
5.1.2魏嘉测试25
5.1.3张越测试27
5.2组装与系统测试30
5.3系统运行31
6课题总结32
6.1课题评价32
6.2团队协作32
6.3个人设计小结(按组员分工)32
6.3.1余灏然设计小结32
6.3.2魏嘉设计小结32
6.3.3张越设计小结33
7附录A课题任务分工34
A-1课题程序设计分工34
A-2课题报告分工35
附录B课题设计文档(光盘)
B-1课程设计报告(电子版)
B-2源程序代码(*.H,*.CPP)
B-3工程与可执行文件)
B-4屏幕演示录像文件(可选)
附录C用户操作手册(可选)36
C.1运行环境说明36
C.2操作说明36
1课题概述
1.1课题任务
我们选择利用线段树这种结构来建立一个车票购票系统。
【设计要求】
1.2课题原理
线段树,类似区间树,是一个完全二叉树,它在各个节点保存一条线段(数组中的一段子数组),主要用于高效解决连续区间的动态查询问题,由于二叉结构的特性,它基本能保持每个操作的复杂度为O(lgN)!
流程图如下:
1.3相关知识
前序遍历树,将树变成链表,用于存储;
Si与Sj用于测试,可删除;
2需求分析
2.1课题调研
线段树是一种二叉搜索树,与区间树相似,它将一个区间划分成一些单元区间,每个单元区间对应线段树中的一个叶结点。
对于线段树中的每一个非叶子节点[a,b],它的左儿子表示的区间为[a,(a+b)/2],右儿子表示的区间为[(a+b)/2+1,b]。
因此线段树是平衡二叉树,最后的子节点数目为N,即整个线段区间的长度。
2.2用户需求分析
利用线段树高效快速的运行车票出售系统。
功能需求
(1)输入功能和显示功能
(2)购买车票、查询车票余额
(3)添加、修改、删除站点信息
(4)读取文件功能和保存文件功能
(5)需要用户友好的界面以便用户方便使用
3方案设计
3.1总体功能设计
线段树
3.2数据结构设计
前序遍历树,将树变成链表,用于存储。
3.3函数原型设计
函数原型
功能描述
voidTreeToList(TreeT,list<
SaveData>
&
p)
voidListToTree(Tree&
T,list<
:
iterator&
iterP)
链表还原成树
intLoading(Tree&
T)
读取数据将数据还原成树
voidprint(list<
staname>
显示乘车顺序
TreeFind(inta,TreeT)
寻找叶子
voidBuyTicket(inta,intb,intn,Tree&
T)
购票
voidCheck()
检查数据文件
voidwelcome()
初始界面显示
voidInquire(TreeT,list<
查询车票数量
voidintitle(list<
p)
站号对应站名的处理
3.4主算法设计
线段树是一种二叉搜索树,与区间树相似,它将一个区间划分成一些单元区间,每个单元区间对应线段树中的一个叶结点。
3.5用户界面设计
Dos界面
输入后:
4方案实现
4.1开发环境与工具
主要编程环境:
MicrosoftVisualStudioC++6.0
编程工具:
C++。
4.2程序设计关键技术
线段树及其应用:
(1)C#语言的学习和MicrosoftVisualStudio2008的使用方法,因为未学习过此语言,学会使用C#和开发工具是程序设计的关键。
(2)线段树的实现问题,线段树的实现还是相对复杂的,我们从网上,书籍查阅了许多资料,进行了多次debug才完成此部分。
(3)多人程序的融合性问题,由于没怎么接触过多人写程序,每个人写的程序必须能够很好组合。
4.3.1余灏然设计实现
Main函数
#include"
head.h"
save.cpp"
StationName.cpp"
buy.cpp"
check.cpp"
inquire.cpp"
frame.cpp"
voidmain()
{
list<
p;
TreeT;
inti,j,a,b,n,t=0;
//t值用于判断第一次"
重新生成线段树"
时是否执行DelData(T),t=0不执行t=1执行
Check();
//检查数据文件是否丢失
t=Loading(T);
//读取线段树数据
Loading2(p);
//读取站名链表数据
welcome();
while
(1)
{
system("
cls"
);
frame();
gotoxy(25,8);
cout<
<
"
1.购票与查询"
;
gotoxy(25,9);
2.管理功能"
gotoxy(25,10);
3.退出"
gotoxy(25,12);
----请选择功能:
cin>
>
i;
if(i==1)
{
while
(1)
{
print(p);
cout<
endl<
1.购票车票2.查询车余额3.返回---请选择:
cin>
j;
if(j==1)
{
cout<
请分别输入出发站、到达站号及购买票数:
cin>
a>
b>
n;
if(a<
b)BuyTicket(a,b,n,T);
if(a>
b)BuyTicket2(a,b,n,T);
}
if(j==2)Inquire(T,p);
if(j==3)break;
}
}
if(i==2)
system("
请选择(1.重新生成线段树2.改变站名对应站号3.删除树并初始化4.返回):
"
{
请输入线段区间(a,b)[必须符合0<
a<
b]:
b;
if(t)DelData(T);
CreateTree(T,a,b);
SaveTree(T);
t=1;
}
if(j==2)intitle(p);
if(j==3)DelData(T);
if(j==4)break;
if(i==3)exit(0);
}//while尾
}
save.cpp
p)//前序遍历树,将树变成链表,用于存储,
SaveDataa;
if(T!
=NULL)
a.k=1;
a.Si=T->
a.Sj=T->
a.Snum=T->
num;
a.Snum2=T->
num2;
p.push_back(a);
TreeToList(T->
lchild,p);
rchild,p);
}
else
a.k=0;
//a.Si=-1;
a.Sj=-1;
//Si与Sj用于测试,可删除
voidSaveTree(TreeT)
FILE*fp;
SaveDatah;
iteratoriterP=p.begin();
TreeToList(T,p);
iterP=p.begin();
fp=fopen("
TicketData.dat"
"
wb"
h.k=iterP->
k;
h.Si=iterP->
Si;
h.Sj=iterP->
Sj;
h.Snum=iterP->
Snum;
h.Snum2=iterP->
Snum2;
fwrite(&
h,sizeof(SaveData),1,fp);
iterP++;
if(iterP==p.end())break;
SaveDatat;
t.k=-1;
//t->
k=-1表链表尾
fwrite(&
t,sizeof(SaveData),1,fp);
fclose(fp);
//cout<
存储成功!
endl;
S
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 毕业设计 数据结构 线段 及其 应用