中国石油大学数据结构上机实验4.docx

上传人:b****5 文档编号:7930599 上传时间:2023-01-27 格式:DOCX 页数:12 大小:58.61KB
下载 相关 举报
中国石油大学数据结构上机实验4.docx_第1页
第1页 / 共12页
中国石油大学数据结构上机实验4.docx_第2页
第2页 / 共12页
中国石油大学数据结构上机实验4.docx_第3页
第3页 / 共12页
中国石油大学数据结构上机实验4.docx_第4页
第4页 / 共12页
中国石油大学数据结构上机实验4.docx_第5页
第5页 / 共12页
点击查看更多>>
下载资源
资源描述

中国石油大学数据结构上机实验4.docx

《中国石油大学数据结构上机实验4.docx》由会员分享,可在线阅读,更多相关《中国石油大学数据结构上机实验4.docx(12页珍藏版)》请在冰豆网上搜索。

中国石油大学数据结构上机实验4.docx

中国石油大学数据结构上机实验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模板 > 其它模板

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

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