实验三队列实验报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
计算机科学与技术系
实验报告
专业名称计算机科学与技术
课程名称数据结构与算法
项目名称实验三队列实验
班级
学号 1
姓名
同组人员无
实验日期
实验三队列实验
实验题目:建立含有若干个元素的循环队列和链队列,并分别实现循环队列和
链队列的入队和出对操作。
(1)先实现循环队列的入队和出队操作
1.问题分析
本程序要求实现建立含有若干个元素的循环队列,并实现循环队列的入队和出队操作。
完成该实验需要以下4个子任务:
○1定义一个循环队列的存储结构,定义队列的基本算法。
○2定义一个display()函数实现队列元素的输出看入队是否成功
○3通过队列的基本算法实现队列的出队操作
○4在主函数中完成操作
测试数据设计如下:
1 2 3 4 5
6
2.概要设计
为了实现上述程序功能,需要:○1声明一个循环队列○2定义出队列的基本算法,○3通过键盘输入5个整数,入队,出队○4在主函数中先往队列里输入5
个元素,然后入队,输出,看入队是否成功,然后出队,再调用display()函数看是否出队。
1)本程序包含7个函数:
1主函数main()
2.置空队:InitQueue()
3.判对空: QueueEmpty()
4.判队满:QueueFull()
5.入队:Add()
6.出队:Delete()
7.display()
各函数关系如下:
InitQueue()
QueueEmpty()
Main () QueueFull()
Add()Main
Delete()
display()
3、详细设计
实现概要设计中定义的所有的数据类型,对每个操作给出了算法和代码,主程序和模块都需要代码。
(1)循环队列
#define maxlen 10
typedef struct{
int data [maxlen];
int front;
int rear;
}SeqQueue;
(2)队列基本算法
SeqQueue *InitQueue(SeqQueue *q) //建立一个空循环队列{
q=(SeqQueue *)malloc(sizeof (SeqQueue));
q->front=0;
q->rear=0;
return q;
}
int QueueFull (SeqQueue *q){ //判断队列是否为满
if (q->front==(q->rear+1)%maxlen)
return 1;
else return 0;
}
int QueueEmpty(SeqQueue *q){ //判断队列是否为空
if (q->rear==q->front)
return 1;
else return 0;
}
void Add (SeqQueue *q,int x) //入队
{
if(!QueueFull(q)){
q->rear=(q->rear+1)%maxlen;
q->data[q->rear]=x;
}else printf ("queue full");
}
void Delete(SeqQueue *q){ //出队
if (!QueueEmpty(q))
q->front=(q->front+1)%maxlen;
else printf ("queue Empty");
}
(3)用display()函数输出循环队列元素
void display(SeqQueue *q) //输出循环队列q的元素
{
int i;
if(q->front!=q->rear) //循环队列非空,输出队列元素
{
printf("输出循环队列元素:");
i=q->front;
do
{
i=(i+1)%maxlen;
printf("%d",q->data[i]);
}while(i!=q->rear);
}
else
printf("队列为空!");
}
(4)在主函数中先往队列里输入5个元素,输出,看入队是否成功,然后出队,再调用display()函数看是否出队。
int main()
{
SeqQueue *q;
int i,y;
q=InitQueue(q); //建立空循环队列
printf("请输入5个元素");
for(i=0;i<5;i++) //入队5个元素
{
scanf("%d",&y);
Add(q,y);
}
display(q); //输出循环队列元素
for(i=0;i<5;i++) //把5个元素出队
{
Delete(q);
}
printf("\n请输入1个元素");
scanf("%d",&y); //再入队一个元素
Add(q,y);
display(q); //再输出循环队列元素
return 0;
}
4、调试分析
编译无错误
5、用户使用说明
程序名为class1.exe,在DEBUG文件夹里面。运行环境Visual c++ 6.0。
6、测试结果
7、附录
#include
#include
#define maxlen 10
typedef struct{
int data [maxlen];
int front;