中国石油大学数据结构上机实验4.docx
- 文档编号:7930599
- 上传时间:2023-01-27
- 格式:DOCX
- 页数:12
- 大小:58.61KB
中国石油大学数据结构上机实验4.docx
《中国石油大学数据结构上机实验4.docx》由会员分享,可在线阅读,更多相关《中国石油大学数据结构上机实验4.docx(12页珍藏版)》请在冰豆网上搜索。
中国石油大学数据结构上机实验4
《数据结构》实验报告
学号
2015011512
姓名
胡明禹
专业
数学与应用数学
时间
2018.3.20
一、实验题目
实验4循环队列基本操作
二、实验目的
1.熟练掌握循环队列的实现和基本操作
2.理解队列先进先出的特点
3.可以利用队列解决实际问题
三、算法设计分析
(一)实验内容
1.初始化一个空的循环队列
2.实现入队操作
3.实现出对操作
4.输出队列中全部元素
5.实现销毁队列操作
(二)总体设计
此处给出主要函数功能、及函数间调用关系的的描述。
例如:
①初始化空的循环队列函数②创建一个队函数③入队函数④出队函数⑤计算队中元素个数函数⑥输出函数⑦销毁函数⑧主函数
其功能描述如下:
(1)主函数:
统筹调用各个函数以实现相应功能
voidmain()
(2)①初始化一个空的循环队列函数
StatusInitQueue(SqQueue&Q)
{
system("cls");
Q.base=(QElemType*)malloc(MAXSIZE*sizeof(QElemType));
if(!
Q.base)exit(OVERFLOW);//存储分配失败
Q.front=Q.rear=0;
printf("成功!
\n\n");
returnOK;
}
②创建一个队函数
StatusCreateQueue(SqQueue&Q)
{
system("cls");
intn;
printf("请输入循环队列长度:
");
scanf("%d",&n);
for(inti=1;i<=n;i++)
{
printf("第%d个元素为:
",i);
scanf("%d",&Q.base[Q.rear]);
Q.rear=(Q.rear+1)%MAXSIZE;
}
printf("成功\n\n");
returnOK;
}
③入队函数
StatusEnQueue(SqQueue&Q,QElemTypee)
//入队操作,插入e为新的队尾元素
{
if((Q.rear+1)%MAXSIZE==Q.front)returnERROR;//队列满
Q.base[Q.rear]=e;
Q.rear=(Q.rear+1)%MAXSIZE;
printf("成功\n\n");
returnOK;
}
④出队函数
StatusDeQueue(SqQueue&Q)
//出队操作,若队列不空,则删除Q的队头元素,并输出删除元素的值
{
system("cls");
QElemTypee;
if(Q.front==Q.rear)returnERROR;//否则返回error
e=Q.base[Q.front];
Q.front=(Q.front+1)%MAXSIZE;
printf("出队元素是:
");
printf("%d\n",e);
printf("成功\n\n");
returnOK;
}
⑤计算队中元素个数函数
StatusQueueLength(SqQueueQ)
//计算队中元素个数
{
system("cls");
return(Q.rear-Q.front+MAXSIZE)%MAXSIZE;
returnOK;
}
⑥输出函数
StatusPrintQueue(SqQueueQ)
//输出队
{
system("cls");
printf("循环队列为:
:
");
inti,n;
n=QueueLength(Q);
for(i=1;i<=n;i++)
{
printf("%d",Q.base[Q.front]);
Q.front=(Q.front+1)%MAXSIZE;
}
returnOK;
}
⑦销毁队函数
StatusDestroyQueue(SqQueue&Q)
//销毁队Q
{
system("cls");
Q.front=Q.rear=0;
free(Q.base);
printf("销毁队成功\n\n");
returnOK;
}
四、实验测试结果及结果分析
(一)测试结果(此处给出程序运行截图)
(二)结果分析成功完成了题目所要求入队,出队等基本操作。
五、实验总结
附录实验程序代码(该部分请加注释)
#include"stdio.h"
#include"stdlib.h"
#include"malloc.h"
#defineMAXSIZE100//存储空间初始分配量,最大队列长度
#defineOVERFLOW-2
#defineOK1
#defineERROR0
typedefintQElemType;
typedefintStatus;
typedefstruct
{
QElemType*base;//初始化的动态分配存储空间
intfront;//头指针,若队列不空,指向队列头元素
intrear;//尾指针,若队列不空,指向队尾元素的下一个位置
}SqQueue;
StatusInitQueue(SqQueue&Q)
//初始化一个空的循环队列
{
system("cls");
Q.base=(QElemType*)malloc(MAXSIZE*sizeof(QElemType));
if(!
Q.base)exit(OVERFLOW);//存储分配失败
Q.front=Q.rear=0;
printf("成功!
\n\n");
returnOK;
}
StatusCreateQueue(SqQueue&Q)
//创建一个队
{
system("cls");
intn;
printf("请输入循环队列长度:
");
scanf("%d",&n);
for(inti=1;i<=n;i++)
{
printf("第%d个元素为:
",i);
scanf("%d",&Q.base[Q.rear]);
Q.rear=(Q.rear+1)%MAXSIZE;
}
printf("成功\n\n");
returnOK;
}
StatusEnQueue(SqQueue&Q,QElemTypee)
//入队操作,插入e为新的队尾元素
{
if((Q.rear+1)%MAXSIZE==Q.front)returnERROR;//队列满
Q.base[Q.rear]=e;
Q.rear=(Q.rear+1)%MAXSIZE;
printf("成功\n\n");
returnOK;
}
StatusDeQueue(SqQueue&Q)
//出队操作,若队列不空,则删除Q的队头元素,并输出删除元素的值
{
system("cls");
QElemTypee;
if(Q.front==Q.rear)returnERROR;//否则返回error
e=Q.base[Q.front];
Q.front=(Q.front+1)%MAXSIZE;
printf("出对元素是:
");
printf("%d\n",e);
printf("成功\n\n");
returnOK;
}
StatusQueueLength(SqQueueQ)
//计算队中元素个数
{
system("cls");
return(Q.rear-Q.front+MAXSIZE)%MAXSIZE;
returnOK;
}
StatusPrintQueue(SqQueueQ)
//输出队
{
system("cls");
printf("循环队列为:
:
");
inti,n;
n=QueueLength(Q);
for(i=1;i<=n;i++)
{
printf("%d",Q.base[Q.front]);
Q.front=(Q.front+1)%MAXSIZE;
}
returnOK;
}
StatusDestroyQueue(SqQueue&Q)
//销毁队Q
{
system("cls");
Q.front=Q.rear=0;
free(Q.base);
printf("销毁队成功\n\n");
returnOK;
}
voidmainmenu()//输出菜单,供用户进行操作选择
{
printf("\n菜单");
printf("\n**************************\n\n");
printf("*1.初始化循环队列*\n");
printf("*2.创建队*\n");
printf("*3.入队操作*\n");
printf("*4.出队操作*\n");
printf("*5.输出队*\n");
printf("*6.销毁队*\n");
printf("*0.退出*\n");
printf("\n***************************\n");
}
voidmain()//主函数
{
intchoose,e;
SqQueueQ;
while
(1)
{
mainmenu();
printf("\n请输入你的选择:
");
scanf("%d",&choose);
switch(choose)
{
case1:
//在此插入初始化循环队列函数
InitQueue(Q);
system("PAUSE");
system("cls");
break;
case2:
//在此插入创建循环队列函数
CreateQueue(Q);
system("PAUSE");
system("cls");
break;
case3:
//入队,在此调用入队函数
system("cls");
printf("请输入进栈元素:
");
scanf("%d",&e);
EnQueue(Q,e);
system("PAUSE");
system("cls");
break;
case4:
//出队,在此调用出队操作函数
DeQueue(Q);
system("PAUSE");
system("cls");
break;
case5:
//输出队,在此插入调用输出队函数
PrintQueue(Q);
printf("\n\n");
system("PAUSE");
system("cls");
break;
case6:
//销毁,在此调用销毁队函数
DestroyQueue(Q);
system("PAUSE");
system("cls");
break;
case0:
//退出
exit(0);
break;
default:
//输入非法,提示用户重新输入
printf("\n输入错误,重新输入!
\n");
}
}
}
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 中国 石油大学 数据结构 上机 实验