实验二之队列精编版.docx
- 文档编号:1800080
- 上传时间:2022-10-24
- 格式:DOCX
- 页数:12
- 大小:495.31KB
实验二之队列精编版.docx
《实验二之队列精编版.docx》由会员分享,可在线阅读,更多相关《实验二之队列精编版.docx(12页珍藏版)》请在冰豆网上搜索。
实验二之队列精编版
数据结构实验报告
评分
满分——5分
学号:
2015111898姓名:
许明华专业:
计算机科学与技术
知识范畴:
栈与队列完成日期:
2017年03月31日
实验题目:
基于循环队列的排队买票模拟程序
实验内容及要求:
编程建立循环队列存储结构,对排队买票过程进行模拟。
要求程序在控制台屏幕上显示字符菜单:
1.排队——输入新到达的买票人姓名,加入买票队列中;
2.售票——排队队列中最前面的人购票成功,显示信息并将其从队列中删除;
3.查看队列——从队首到队尾依次列出所有正在排队买票人的姓名;
4.结束——退出系统。
“排队”时,若队满,应提示等待(排队不成功);
“售票”时,若队空,应提示无人排队(售票失败)。
实验目的:
掌握循环队列的基本操作。
数据结构设计简要描述:
序言:
这是本学期第二个实验,实验主要目的是让我们熟悉循环队列的创建,入队,出队等操作
数据结构设计:
整个实验可分为一个大的模块,其中包含八个函数模块:
菜单显示函数(Menu),初始化队列(InitQueue),添加购票人到队列(enQueue),删除购票成功的人(dlQueue),输出队列中所有人的信息(Putall_Queue),读取到文件函数(write_file)以及判断队空和队满(Empty、Full)共八个函数模块,队列用结构体创建,其中包含整型(int)的队列容量n,队头指针top,队尾指针tail和队列计数变量c,以及string类型的数组elem;最后通过c++语言ofstream将购票人信息保存到文件中和c语言exit(0)退出系统,便完成了整个模拟买票系统的创建。
算法设计简要描述:
1,首先用结构体创建一个保存购票人的信息队列,为string类型;
2,进行队列初始化,为string类型数组new一个动态内存,将队头和队尾置0,并将从键盘输入的n值赋值给队列容量;
3,判断队列为空或者为满,成立返回真,否则返回假;
4,添加购票人信息,将新增的购票人信息添加到队列中去,为避免“假溢”以及搬动元素的操作,在入队时采用r=(r+1)%n,则数组在逻辑上成为圆环形,也即是采用循环队列;
5,将购票成功的人信息显示出来并将其从队列中移除去,也是采用r=(r+1)%n循环队列来实现;
6,输出显示所有正在购票人信息,先判断若没有人排队,则显示无人购票,否则采用循环队列输出所有人信息;
7,采用ofstream将所有正在购票人信息读取到文件中去保存;
输入/输出设计简要描述:
1,排队:
输入购票人“姓名”,若队满,则输出“排队不成功,请等待!
”,否则输出“成功加入到购票队列中去”;
2,售票:
调用售票函数时,直接输出排队队列中最前面的人购票成功,并输出其“编号和姓名”,并显示将其从队列中删除;
3,查看所有队列:
调用查看所有队列函数,输出所有正在排队的人的信息;
4,写入到文件:
输入文件名,若队为空,显示“无人购票,写入失败!
”,否则输出成功将其写入到文件中去;
5,退出系统:
调用退出函数,成功推出系统;
编程语言说明:
1,编程软件,CodeBlocks16.0;
2,代码均用C++语言实现;
3,输入输出采用C++语言的cout和cin函数;
4,文件读写采用ofstream类型;
5,程序注释采用C/C++规范;
主要函数说明:
intMenu(void);//菜单显示函数
voidInitQueue(Queue,int);//初始化队列
intenQueue(Queue,ElemTp);//在队列中添加新的乘客
intdlQueue(Queue);//将购票成功的人从队列中删除
voidPutall_Queue(Queue);//输出显示所有队列中的购票人的信息
boolEmpty(Queue);//判断队列是否为空
boolFull(Queue);//判断队列是否满
voidwrite_file(Queue);//读取到文件中
程序测试简要报告:
见截图:
1,
2,
3,
4,
5,
6,
7,
8,
9,
源程序代码:
#include
#include
#include
#include
#include
usingnamespacestd;
typedefstringElemTp;//ElemTPy一个string类型
typedefstructnode
{
ElemTp*elem;
intn;//队列容量
inttop;//队头指针
inttail;//队尾指针
intc;//队列计数变量
}*Queue;
//函数声明
intMenu(void);//菜单显示函数
voidInitQueue(Queue,int);//初始化队列
intenQueue(Queue,ElemTp);//在队列中添加新的乘客
intdlQueue(Queue);//将购票成功的人从队列中删除
voidPutall_Queue(Queue);//输出显示所有队列中的购票人的信息
boolEmpty(Queue);//判断队列是否为空
boolFull(Queue);//判断队列是否满
intwrite_file(Queue);//读取到文件中
//队列初始化
voidInitQueue(Queueq,intn)
{
q->elem=newElemTp[q->n];//先分配一个M大的内存空间
q->top=q->tail=0;//将队头和队尾置空
q->n=n+1;//从键盘输入一个队列的长度,并将其赋值给队列长度,这样就可以人为的控制队列的长度
}
//队列为满
boolFull(Queueq)
{
return(q->tail+1)%q->n==(q->top+q->n)%q->n;//判断队是否满
}
//队为空
boolEmpty(Queueq)
{
if(q->top==q->tail)//若果队头等于队尾的话,就返回真,说明队空
{
returntrue;
}
returnfalse;
}
//添加购票人信息
intenQueue(Queueq,ElemTpname)
{
if(Full(q))
{
cout<<"排队不成功,请等待!
\n"< getch(); return0; } else { q->elem[q->tail]=name;//添加排队人编号到队列中去 q->tail=(q->tail+1)%q->n;//队尾指针进行加1扫描 cout<<"成功加入购票队列中! 请按任意键返回.....\n"< } getch();//获得键盘上一个输入, } //删除已购票成功的人信息 intdlQueue(Queueq) { if(Empty(q)) { cout<<"无人排队,售票失败! \n请按任意键返回.....\n"< return0; } ElemTpname;//定义一个ElemTp类型来保存退出队列的购票人姓名 inti=q->top+1; name=q->elem[q->top];//队头元素出队并保存在Num1中,以便打印显示 cout<<"购票成功! \n购票人信息为: \n\n编号: "< "< \n"< q->top=(q->top+1)%q->n;//队头指针指向下一个队头元素,以让下一个人开始购票 cout<<"\n请按任意建返回.....\n"< } //打印所有正在购票人信息 voidPutall_Queue(Queueq) { q->c=q->top;//这里用一个计数变量来保存队列,而不直接用q->top,否则打印一次就相当于让一位购票人出队,而不是打印所有购票人信息 inti=q->top+1; cout<<"所有正在购票人信息: \n"< if(q->c==q->tail) { cout<<"无人购票! "< } else { while(q->c! =q->tail) { cout<<"\n编号: "< "< q->c=(q->c+1)%q->n; } } cout< cout<<"\n请按任意建返回.....\n"< getch(); } //读取到文件中去 voidwrite_file(Queueq) { ofstreamin; charfilename[10]; cout<<"\n请输入你想写入的文件名: \n"; cin>>filename;//得到写入文件的文件名 in.open(filename);//创建一个文件名,用于保存我们要写入的数据 q->c=q->top;//这里用一个计数变量来保存队列,而不直接用q->top,否则打印一次就相当于让一位购票人出队,而不是打印所有购票人信息 inti=q->top+1; if(q->c==q->tail) { cout<<"无人购票! 不能读取到文件! "< } else { while(q->c! =q->tail) { in<<"编号: "< "< q->c=(q->c+1)%q->n; } cout<<"成功读取所有购票人信息! "; } in.close();//关闭文件 cout< cout<<"\n请按任意建返回.....\n"< getch(); } //菜单输出显示,共有排队,售票,查看队列以及结束购票等四项功能 intMenu(void) { cout<<"\n***欢迎使用模拟排队买票窗口***\n"; cout<<"\n-----------------------------\n"; cout<<"\n||1.排队||\n"; cout<<"\n||2.售票||\n"; cout<<"\n||3.查看队列||\n"; cout<<"\n||4.结束||\n"; cout<<"\n||5.读取到文件||\n"; cout<<"\n-----------------------------\n"; } //主函数调用 intmain() { Queuep=newstructnode;//创建一个新的队列 intn;//定义队列最大的长度 cout<<"请输入队列的最大长度(输入0返回): \n"; cin>>n;//输入队列的长度 while(n==0) {
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 实验 队列 精编