实验二之队列精编版.docx

上传人:b****3 文档编号:1800080 上传时间:2022-10-24 格式:DOCX 页数:12 大小:495.31KB
下载 相关 举报
实验二之队列精编版.docx_第1页
第1页 / 共12页
实验二之队列精编版.docx_第2页
第2页 / 共12页
实验二之队列精编版.docx_第3页
第3页 / 共12页
实验二之队列精编版.docx_第4页
第4页 / 共12页
实验二之队列精编版.docx_第5页
第5页 / 共12页
点击查看更多>>
下载资源
资源描述

实验二之队列精编版.docx

《实验二之队列精编版.docx》由会员分享,可在线阅读,更多相关《实验二之队列精编版.docx(12页珍藏版)》请在冰豆网上搜索。

实验二之队列精编版.docx

实验二之队列精编版

数据结构实验报告

评分

 

满分——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编号:

"<

"<elem[q->c]<

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<<"编号:

"<

"<elem[q->c]<

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)

{

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 考试认证 > 财会金融考试

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

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