ImageVerifierCode 换一换
格式:DOCX , 页数:54 ,大小:348.52KB ,
资源ID:20836803      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/20836803.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(数据结构B线段树及其应用Word文档格式.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

数据结构B线段树及其应用Word文档格式.docx

1、5.1.3 张越测试 275.2 组装与系统测试 305.3 系统运行 316 课题总结 326.1 课题评价 326.2 团队协作 326.3 个人设计小结(按组员分工) 326.3.1 余灏然设计小结 326.3.2 魏嘉设计小结 326.3.3 张越设计小结 337 附录A 课题任务分工 34A-1 课题程序设计分工 34A-2 课题报告分工 35 附录B 课题设计文档(光盘) B-1课程设计报告(电子版) B-2源程序代码(*.H,*.CPP) B-3工程与可执行文件) B-4屏幕演示录像文件(可选) 附录C 用户操作手册(可选) 36C.1 运行环境说明 36C.2 操作说明 36

2、1课题概述1.1 课题任务我们选择利用线段树这种结构来建立一个车票购票系统。【设计要求】1.2 课题原理 线段树,类似区间树,是一个完全二叉树,它在各个节点保存一条线段(数组中的一段子数组),主要用于高效解决连续区间的动态查询问题,由于二叉结构的特性,它基本能保持每个操作的复杂度为O(lgN)!流程图如下:1.3相关知识前序遍历树,将树变成链表,用于存储;Si与Sj用于测试,可删除;2需求分析2.1 课题调研线段树是一种二叉搜索树,与区间树相似,它将一个区间划分成一些单元区间,每个单元区间对应线段树中的一个叶结点。对于线段树中的每一个非叶子节点a,b,它的左儿子表示的区间为a,(a+b)/2,

3、右儿子表示的区间为(a+b)/2+1,b。因此线段树是平衡二叉树,最后的子节点数目为N,即整个线段区间的长度。2.2 用户需求分析利用线段树高效快速的运行车票出售系统。功能需求 (1)输入功能和显示功能 (2)购买车票、查询车票余额 (3)添加、修改、删除站点信息 (4)读取文件功能和保存文件功能 (5)需要用户友好的界面以便用户方便使用3方案设计3.1 总体功能设计线段树3.2 数据结构设计前序遍历树,将树变成链表,用于存储。3.3 函数原型设计函数原型功能描述void TreeToList(Tree T,list &p) void ListToTree(Tree &T,list:itera

4、tor &iterP)链表还原成树int Loading(Tree &T) 读取数据将数据还原成树void print(list显示乘车顺序Tree Find(int a, Tree T) 寻找叶子void BuyTicket(int a,int b,int n,Tree &T)购票void Check()检查数据文件void welcome()初始界面显示void Inquire(Tree T,list查询车票数量void intitle(listp)站号对应站名的处理3.4主算法设计 线段树是一种二叉搜索树,与区间树相似,它将一个区间划分成一些单元区间,每个单元区间对应线段树中的一个叶结点

5、。3.5 用户界面设计Dos界面输入后:4 方案实现4.1 开发环境与工具主要编程环境:Microsoft Visual Studio C+6.0 编程工具:C+。4.2 程序设计关键技术线段树及其应用:(1)C#语言的学习和Microsoft Visual Studio 2008的使用方法,因为未学习过此语言,学会使用C#和开发工具是程序设计的关键。(2)线段树的实现问题,线段树的实现还是相对复杂的,我们从网上,书籍查阅了许多资料,进行了多次debug才完成此部分。(3)多人程序的融合性问题,由于没怎么接触过多人写程序,每个人写的程序必须能够很好组合。4.3.1 余灏然设计实现Main函数#

6、includehead.hsave.cppStationName.cppbuy.cppcheck.cppinquire.cppframe.cppvoid main() list p; Tree T; int i,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);couti; if(i=1)

7、 while(1) print(p); coutendlj; if(j=1) coutabn; if(ab) 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) 必须符合0a 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;

8、a.Sj=-1; /Si与Sj用于测试,可删除void SaveTree(Tree T) FILE *fp; SaveData h;iterator iterP=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; S

9、aveData t; t.k=-1; /t-k=-1表链表尾 fwrite(&t,sizeof(SaveData),1,fp); fclose(fp);/ coutk=0) T=NULL; iterP+; if(!(T=(Btree*)malloc(sizeof(Btree) exit(-1); T-i=iterP- T-j=iterP-T-num=iterP-num2=iterP- ListToTree(T-lchild,iterP);rchild,iterP);T) /读取数据将数据还原成树iterator iterP;rb fread(& if(h.k=-1) cout-无数据内容。 r

10、eturn 0; while(h.k!=-1) / 判断是不是链表尾 p.push_back(h); fread(& ListToTree(T,iterP);数据读取成功,已生成树。 return 1;int DelData(Tree T) DestroyTree(T);wb+ / 不写入内容,即可清除数据inquire.cppTree Find(int a, Tree T);p) /查询车票数量 int i=0; Tree t; coutk,T); coutk号站-namename num) else iterP-; iterP-; iterP-;num2) else iterP+;4.3.

11、2 魏嘉设计实现head.h#ifndef _HEAD_H #define _HEAD_H / 运用 #ifndef避免重复定义 iostreamstdio.hwindows.hconio.h#include using namespace std;#define max 100 /每站票数的最大上限typedef struct Node int i,j; /分别表示线段树左右节点 int num; /存储数据,表示当前已出售票数 int num2; /返程 struct Node *lchild,*rchild;Btree,*Tree;typedef struct station int k

12、; /站点所对应的数字 char name20;staname;typedef struct save /k=1时储存节点信息, k=0时代表空格不存储其他信息,k=-1时表示链表尾 (NULL不知为何不好使=A=) int Si,Sj; int Snum; int Snum2;SaveData;int CreateTree(Tree &T,int a,int b) if(ba | a1 | b1) CreateTree(T-lchild,a,(a+b)/2);rchild,(a+b)/2,b);lchild=NULL;rchild=NULL;num=0; /初始化为0num2=0;void

13、DestroyTree(Tree &T) /删除时用这个,判断树是否已为空,若不空则执行Destroy(Tree T); int Destroy(Tree T); if(T-num=-1) Destroy(T);线段树已销毁。 /如果树不为空,则T-num=-1 else coutlchild);rchild); free(T);void PreOrder(Tree T) /前序遍历树ij!void gotoxy(int x,int y) /光标移动 x为列坐标,y为行坐标 COORD pos=x,y; HANDLE hOut=GetStdHandle(STD_OUTPUT_HANDLE);

14、SetConsoleCursorPosition(hOut,pos);#endifStationName.cppstring.hp) /站号对应站名的处理 void Loading2(listp); void firstuse(); char b20; staname h; iterP=p.begin(); fp=fopen(StationName.dath,sizeof(staname),1,fp); while(h.k!=0) couth.kh.name; p.push_back(h); iterP=p.begin(); fp=fopen( h.k=iterP- strcpy(h.name

15、,iterP-name); fwrite(& iterP+; if(iterP=p.end() break; h.k=0; fwrite(& fclose(fp); if(i=2) firstuse();p.clear(); if(i=3) break;void firstuse() /站名数据文件初始化 staname p; p.k=0;p,sizeof(staname),1,fp);void Loading2(listp) /读取站名链表数据buy.cppp) /显示乘车顺序 int i=1;乘车区间: while(i)号站:name; if(i=5) cout i=1; if( !( iterP=p.end()

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1