数据结构实验循环队列的基本操作.docx
- 文档编号:25538801
- 上传时间:2023-06-09
- 格式:DOCX
- 页数:9
- 大小:42.63KB
数据结构实验循环队列的基本操作.docx
《数据结构实验循环队列的基本操作.docx》由会员分享,可在线阅读,更多相关《数据结构实验循环队列的基本操作.docx(9页珍藏版)》请在冰豆网上搜索。
数据结构实验循环队列的基本操作
西北师范大学计算机科学与工程学院学生实验报告
学号
201371020217
专业
计算机科学与技术
班级
软件一班
姓名
王尚
课程名称
数据结构
课程类型
专业课
实验名称
循环队列的基本操作
实验目的:
(1)掌握循环队列的入队、出队、判断循环队列是否为空或为满。
(2)掌握循环队列的基本知识,在编程时注意何时对满、及怎么插入新元素。
实验要求及内容:
实验要求:
通过学习线性结构这一小节,掌握其基本的入队、出队、判断循环队列是否为空或为满,能实现循环队列的基本操作。
1.ADT
ADTLIST{
数据对象:
数据关系:
StatuaInitQueue(LinkQueue&Q)
//构造一个空队列Q
StatuaDestroyQueue(LinkQueue&Q)
//销毁队列Q,Q不在存在。
StatueClearQueue(LinkQueue&Q)
//将Q清为空队列
IntQueueEmpty(LinkQueue&Q)
//返回Q的元素个数,则返回TURE,否则返回FALSE
StatueDeQueue(LinkQueue&Q,QElemTypee)
//若队列不为空,则删除Q的对头元素,用e返回其值,并返回ok;
//否则返回ERROR
2.基本操作的实现
代码如下:
#include
#include
#include
#include
#defineFALSE0
#defineTRUE1
#defineOK1
#defineERROR0
#defineMAXSIZE100
typedefintQueueElementType;
typedefstruct
{
QueueElementTypeelement[MAXSIZE];
intfront;
intrear;
}SeqQueue;
//初始化
intInitQueue(SeqQueue*Q)
{
Q->front=Q->rear=0;
return(TRUE);
}
//入队
intEnterQueue(SeqQueue*Q,QueueElementTypex)
{
if((Q->rear+1)%MAXSIZE==Q->front)
return(FALSE);
Q->element[Q->rear]=x;
Q->rear=(Q->rear+1)%MAXSIZE;
return(TRUE);
}
//出队
intDeleteQueue(SeqQueue*Q,QueueElementType*x)
{
if(Q->front==Q->rear)
return(FALSE);
*x=Q->element[Q->front];
Q->front=(Q->front+1)%MAXSIZE;
return(TRUE);
}
//求长度
intLengthQueue(SeqQueue*Q)
{
printf("%d",(Q->rear-Q->front+MAXSIZE)%MAXSIZE);
printf("\n");
return(TRUE);
}
//输出链表
voidPrintfQueue(SeqQueue*Q)
{
intj,i;
if(Q->front==Q->rear)
printf("队列为空");
else
{
j=((Q->rear-Q->front+MAXSIZE)%MAXSIZE)-1;
for(i=0;i<=j;i++)
printf("%d",Q->element[(Q->front+i)%MAXSIZE]);
printf("\n");
}
}
//判断循环队列是否为空或为满
voidJudgeQueue(SeqQueue*Q)
{
if(Q->front==Q->rear)
{
printf("该队列为空");
printf("\n");
}
elseif((Q->rear+1)%MAXSIZE==Q->front)
{
printf("该队列为满");
printf("\n");
}
else
{
printf("该队列既不为空也不为满");
printf("\n");
}
}
//销毁队列
voidDestroyQueue(SeqQueue*Q)
{
Q->front=Q->rear=0;
}
voidmain()
{
intf;
SeqQueueQ;
InitQueue(&Q);
printf("************^^^^^^^循环队列功能菜单^^^^^^^************");
printf("\n");
printf("请选择操作:
");
printf("\n");
printf("1.入队操作");
printf("\n");
printf("2.出队操作");
printf("\n");
printf("3.判断队列空或满");
printf("\n");
printf("4.求队列长度");
printf("\n");
printf("5.销毁队列");
printf("\n");
printf("6.退出");
printf("\n");
while(f)
{
inti,a,x,e;
printf("你想执行第几个程序:
\n");
scanf("%d",&e);
switch(e){
case1:
printf("请输入要入队的整型值:
(限一个)\n");
printf("你想输入多少元素:
\n");
scanf("%d",&a);
for(i=1;i<=a;i++)
{
printf("请输入第%d个元素:
\n",i);
scanf("%d",&x);
EnterQueue(&Q,x);
}
printf("队列为:
");
PrintfQueue(&Q);
break;
case2:
DeleteQueue(&Q,&x);
printf("队列为:
");
PrintfQueue(&Q);
break;
case3:
JudgeQueue(&Q);
break;
case4:
printf("链表长度为:
");
LengthQueue(&Q);
break;
case5:
DestroyQueue(&Q);
printf("销毁成功!
");
break;
case6:
f=0;
break;
}
}
}
运行结果:
实验总结:
通过本次实验,基本掌握循环队列的基本操作,学会基本的编程,并能调试通过,并为以后的学习打好了基础。
实验评语:
实验成绩
教师签名
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 实验 循环 队列 基本 操作