试验循环队列的基本操作及应用.docx

上传人:b****5 文档编号:6754649 上传时间:2023-01-10 格式:DOCX 页数:8 大小:101.87KB
下载 相关 举报
试验循环队列的基本操作及应用.docx_第1页
第1页 / 共8页
试验循环队列的基本操作及应用.docx_第2页
第2页 / 共8页
试验循环队列的基本操作及应用.docx_第3页
第3页 / 共8页
试验循环队列的基本操作及应用.docx_第4页
第4页 / 共8页
试验循环队列的基本操作及应用.docx_第5页
第5页 / 共8页
点击查看更多>>
下载资源
资源描述

试验循环队列的基本操作及应用.docx

《试验循环队列的基本操作及应用.docx》由会员分享,可在线阅读,更多相关《试验循环队列的基本操作及应用.docx(8页珍藏版)》请在冰豆网上搜索。

试验循环队列的基本操作及应用.docx

试验循环队列的基本操作及应用

数据构造实验报告

----试验三循环队列的根本操作及应用

一、问题描述:

熟悉并掌握循环队列的相关操作,自己设计程序,实现循环队列的构造、清空、销毁及队列元素的插入和删除等相关操作。

二、数据构造设计:

#defineMAXQSIZE10//最大队列长度

structSqQueue

{

QElemType*base;//初始化动态分配存储空间

Intfront;//头指针,假设队列不空,只想对列头元素

intrear;//尾指针,假设队列不空,指向队列尾元素的

//下一个位置

};

三、功能设计:

程序中所涉及到的函数如下:

StatusInitQueue(SqQueue&Q)//构造一个空队列Q

StatusDestroyQueue(SqQueue&Q)//销毁队列Q,Q不再存在

StatusClearQueue(SqQueue&Q)//将Q清为空队列

StatusQueueEmpty(SqQueueQ)//假设队列Q为空队列,那么

//返回TRUE,否那么返回FALSE

intQueueLength(SqQueueQ)//返回Q的元素个数,即队列长度

StatusGetHead(SqQueueQ,QElemType&e)//假设队列不空,那么用e返回Q的对

//头元素,并返回OK,否那么返回ERROR

StatusEnQueue(SqQueue&Q,QElemTypee)//插入元素e为Q的新的队尾元素

StatusDeQueue(SqQueue&Q,QElemType&e)//假设队列不空,那么删除Q的队头

//元素,用e返回其值,并返回

//OK,否那么返回ERROR

StatusQueueTraverse(SqQueueQ,void(*vi)(QElemType))//从队头到队尾依次

//对队列Q中每个元素调用函数

//vi()。

一旦vi失败,那么操作失败

四、源程序:

//c1.h(程序名)

#include

#include

#include//malloc()等

#include//INT_MAX等

#include//EOF(=^Z或F6),NULL

#include//atoi()

#include//eof()

#include//floor(),ceil(),abs()

#include//exit()

#include//cout,cin

//函数结果状态代码

#defineTRUE1

#defineFALSE0

#defineOK1

#defineERROR0

#defineINFEASIBLE-1

//#defineOVERFLOW-2因为在math.h中已定义OVERFLOW的值为3,故去掉此

//行

typedefintStatus;//Status是函数的类型,其值是函数结果状态代码,如OK等

typedefintBoolean;//Boolean是布尔类型,其值是TRUE或FALSE

//c3-3.h

#defineMAXQSIZE10

structSqQueue

{

QElemType*base;

intfront;

intrear;

};

#include"c1.h"

typedefintQElemType;

#include"c3-3.h"

StatusInitQueue(SqQueue&Q)

{//构造一个空队列Q

Q.base=(QElemType*)malloc(MAXQSIZE*sizeof(QElemType));

if(!

Q.base)//储存分配失败

exit(OVERFLOW);

Q.front=Q.rear=0;

returnOK;

}

StatusDestroyQueue(SqQueue&Q)

{//销毁队列Q,Q不再存在

if(Q.base)

free(Q.base);

Q.base=NULL;

Q.front=Q.rear=0;

returnOK;

}

StatusClearQueue(SqQueue&Q)

{//将Q清为空队列

Q.front=Q.rear=0;

returnOK;

}

StatusQueueEmpty(SqQueueQ)

{//假设队列Q为空队列,那么返回TREU,否那么返回FALSE

if(Q.front==Q.rear)//队列空的标志

returnTRUE;

else

returnFALSE;

}

intQueueLength(SqQueueQ)

{//Q

return(Q.rear-Q.front+MAXQSIZE)%MAXQSIZE;

}

StatusGetHead(SqQueueQ,QElemType&e)

{//

if(Q.front==Q.rear)//队列空

returnERROR;

e=*(Q.base+Q.front);

returnOK;

}

StatusEnQueue(SqQueue&Q,QElemTypee)

{

if((Q.rear+1)%MAXQSIZE==Q.front)//队列满

returnERROR;

Q.base[Q.rear]=e;

Q.rear=(Q.rear+1)%MAXQSIZE;

returnOK;

}

StatusDeQueue(SqQueue&Q,QElemType&e)

{

if(Q.front==Q.rear)//队列空

returnERROR;

e=Q.base[Q.front];

Q.front=(Q.front+1)%MAXQSIZE;

returnOK;

}

StatusQueueTraverse(SqQueueQ,void(*vi)(QElemType))

{

inti;

i=Q.front;

while(i!

=Q.rear)

{

vi(*(Q.base+i));

i=(i+1)%MAXQSIZE;

}

printf("\n");

returnOK;

}

 

voidvisit(QElemTypei)

{

cout<<"\t"<

}

voidmain()

{

inti=0,a;

QElemTyped;

SqQueueQ;

InitQueue(Q);

cout<<"初始化队列后,队列空否?

(1:

空0:

否)"<

cout<<"请输入整型队列元素,-1为提前完毕符:

\n";

do

{

cin>>d;

if(d==-1)

break;

i++;

EnQueue(Q,d);

}

while(i

cout<<"队列长度为:

"<

cout<<"现在队列空否?

(1:

空0:

否)"<

for(i=1;i<=QueueLength(Q);i++)

{

DeQueue(d);

cout<<"删除的元素为:

"<

";

cin>>a;

EnQueue(Q,a);

}

cout<<"现在队列中的元素为:

\n";

QueueTraverse(Q,visit);

cout<<"\n";

GetHead(Q,a);

cout<<"现在对头元素为:

"<

ClearQueue();

cout<<"清空队列后,对列空否?

(1:

空0:

否)"<

cout<<"\n";

DestroyQueue(Q);

}

五、程序调试结果:

六、试验后的思考:

通过试验,对循环队列的功能有了更深的了解,同时也根本掌握了循环队列的构造、清空、销毁及队列元素的插入和删除等相关操作,也为以后的学习奠定了一定的根底。

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

当前位置:首页 > 工程科技 > 纺织轻工业

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

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