实验三队列实验报告docx.docx

上传人:b****6 文档编号:5748578 上传时间:2022-12-31 格式:DOCX 页数:20 大小:54.92KB
下载 相关 举报
实验三队列实验报告docx.docx_第1页
第1页 / 共20页
实验三队列实验报告docx.docx_第2页
第2页 / 共20页
实验三队列实验报告docx.docx_第3页
第3页 / 共20页
实验三队列实验报告docx.docx_第4页
第4页 / 共20页
实验三队列实验报告docx.docx_第5页
第5页 / 共20页
点击查看更多>>
下载资源
资源描述

实验三队列实验报告docx.docx

《实验三队列实验报告docx.docx》由会员分享,可在线阅读,更多相关《实验三队列实验报告docx.docx(20页珍藏版)》请在冰豆网上搜索。

实验三队列实验报告docx.docx

实验三队列实验报告docx

合肥禽配

HEFEIUNIVERSITY

计算机科学与技术系

实验报告

专业名称计算机科学与技术

课程名称数据结构与算法

项目名称实验三队列实验

班级

学号

姓名

同组人员无

实验日期

实验三队列实验

实验题目:

建立含有若干个元素的循环队列和链队列,并分别实现循环队列和链队列的入队和出对操作。

(1)先实现循环队列的入队和出队操作

1•问题分析

本程序要求实现建立含有若干个元素的循环队列,并实现循环队列的入队和出队操作。

完成该实验需要以下4个子任务:

砂义一个循环队列的存储结构,定义队列的基本算法。

②定义一个display()函数实现队列元素的输出看入队是否成功

④在主函数中完成操作

测试数据设计如下:

12345

6

2.概要设计

为了实现上述程序功能,需要:

②声明一个循环队列②定义出队列的基本算法,

②通过键盘输入5个整数,入队,出队②在主函数中先往队列里输入5个元素,然后入队,输出,看入队是否成功,然后出队,再调用display()函

数看是否出队。

1)本程序包含7个函数:

1主函数main()

2.置空队:

InitQueue()

3.判对空:

QUeUeEmPtyo

4.判队满:

QUeUeFUll()

5.入队:

AddO

6.出队:

DeIeteO

7.display()

各函数关系如下:

InitQueue()

QueueEmptyO

QueueFuI1()

Add()Main

DeIete()display()

3、详细设计

实现概要设计中定义的所有的数据类型,对每个操作给出了算法和代码,主程序和模块都需要代码。

(1)循环队列

#definemaxlen10

typedefStrUCt{

intdata[maxlen];

intfront;intrear;

}SeqQueue;

(2)队列基本算法

SeqQUeUe*lnitQueue(SeqQueue*q)//建立一个空循环队列

{

q=(SeqQueue*)malloc(sizeof(SeqQueue));

q->front=0;

q->rear=0;

returnq;

}

intQueueFull(SeqQUeUe*q){//判断队列是否为满

if(q->front==(q->rear+1)%maxlen)

return1;

elsereturn0;

}

intQueueEmpty(SeqQueue*q){

if(q->rear==q->front)

return1;

elsereturn0;

}

voidAdd(SeqQueue*q,intx)//

{

if(!

QueueFull(q)){

q->rear=(q->rear+1)%maxlen;q->data[q->rear]=x;

}elseprintf("queuefull");

}

voidDelete(SeqQueue*q){//

if(!

QueueEmpty(q))q->front=(q->front+1)%maxlen;

elseprintf("queueEmpty");

}

(3)用display()函数输出循环队列元素

voiddisplay(SeqQueue*q)

{

inti;

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("队列为空!

");

}

//判断队列是否为空

入队

出队

//输出循环队列q的元素

//循环队列非空,输出队列元素

(4)在主函数中先往队列里输入5个元素,输出,看入队是否成功,然后出队,再调用display()函数看是否出队。

intmain()

{

SeqQueue*q;

 

//建立空循环队列

//入队5个元素

//输出循环队列元素

//把5个元素出队

//再入队一个元素

//再输出循环队列元素

inti,y;

q=lnitQueue(q);

Printf("请输入5个元素");

for(i=0;i<5;i++)

{

SCanf("%d",&y);

Add(q,y);

}display(q);for(i=0;i<5;i++)

{

DeIete(q);

}

Printf("\n请输入1个元素");SCanf("%d",&y);

Add(q,y);

display(q);return0;

}

4、调试分析

编译无错误

5、用户使用说明

程序名为class1.exe,在DEBUGt件夹里面。

运行环境ViSUaIC++6.0。

6、测试结果

请输入吕个元素12345

⅛i由循环罠列元素:

12345

请⅛λl÷7E⅛6

输出循环队列元索:

6PressanykeytoCOntinUe

7、附录

#include

#include

#definemaxlen10

typedefstruct{

intdata[maxlen];

intfront;

intrear;

}SeqQueue;

SeqQueue*InitQueue(SeqQueue*q)//建立一个空循环队列{

q=(SeqQueue*)malloc(sizeof(SeqQueue));

q->front=0;

q->rear=0;

returnq;

}

intQueueFull(SeqQueue*q){//判断队列是否为满

if(q->front==(q->rear+1)%maxlen)return1;

elsereturn0;

}

intQueueEmpty(SeqQueue*q){

if(q->rear==q->front)

return1;

elsereturn0;

}

voidAdd(SeqQueue*q,intx)

{

if(!

QueueFull(q)){q->rear=(q->rear+1)%maxlen;q->data[q->rear]=x;

}elseprintf("queuefull");

}

voidDelete(SeqQueue*q){

if(!

QueueEmpty(q))q->front=(q->front+1)%maxlen;

elseprintf("queueEmpty");

}

voiddisplay(SeqQueue*q)

{

inti;

//判断队列是否为空

//入队

//出队

//输出循环队列q的元素

//循环队列非空,输出队列元素

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("队列为空!

");

}

intmain()

{

SeqQueue*q;

inti,y;

q=InitQueue(q);

printf("请输入5个元素");

for(i=0;i<5;i++)

{

scanf("%d",&y);

Add(q,y);

}

display(q);

for(i=0;i<5;i++)

{

Delete(q);

}

printf("\n请输入1个元素");scanf("%d",&y);

Add(q,y);display(q);return0;

//建立空循环队列

//入队5个元素

//输出循环队列元素

//把5个元素出队

//再入队一个元素

//再输出循环队列元素

 

(2)实现链队列的入队和出队操作

1.问题分析

本程序要求实现建立含有若干个元素的链队列,并实现链队列入队和出队操作

完成该实验需要以下4个子任务:

(1定义一个链队列的存储结构,定义链队列的基本算法。

②定义一个display()函数实现队列元素的输出看入队是否成功

14在主函数中完成操作

测试数据设计如下:

12345

6

2.概要设计

为了实现上述程序功能,需要:

11声明一个链队列12定义出链队列的基本算法,

13通过键盘输入5个整数,入队,出队14在主函数中先往队列里输入5个元素,然后入队,输出,看入队是否成功,然后出队,再调用display()函数看是否出队。

2)本程序包含6个函数:

1主函数main()

2.置空队:

InitQueue()

3.判对空:

QueueEmpty()

4.入队:

Addo

5.出队:

DeIeteo

6.display()

各函数关系如下:

SetQueue()

QueueEmptyO

Add()

DeIete()

display()

4、详细设计

实现概要设计中定义的所有的数据类型,对每个操作给出了算法和代码,主程序和模块都需要代码。

(1)链队列

#definemaxlen10

typedefStrUCtnode{

intdata;

StrUCtnode*next;

}LinkList;

typedefStrUCt{

LinkList*front,*rear;

}LinkQueue;

LinkQueue*q;

(2)队列基本算法

LinkQueue*SetQueue()//建立一个空链队列

{

q=(LinkQueue*)malloc(sizeof(LinkQueue));

q->front=(LinkList*)malloc(sizeof(LinkList));

q->front->next=NULL;

q->rear=q->front;

returnq;

}

intQueueEmpty(LinkQueue*q){if(q->rear==q->front)

return1;

elsereturn0;

}

//判断队列是否为空

LinkQueue*Add(LinkQueue*q,intx)

{

LinkList*p;

p=(LinkList*)malloc(sizeof(LinkList));

p->data=x;p->next=NULL;

q->rear->next=p;

q->rear=p;

returnq;

}

LinkQueue*Delete(LinkQueue*q){

LinkList*p;

if(!

QueueEmpty(q)){p=q->front->next;

q->front->next=p->next;if(p->next=NULL)q->rear=q->front;free(p);returnq;

}

elseprintf("queueEmpty");

}

(3)用display()函数输出链队列元素voiddisplay(LinkQueue*q)

{

LinkList*p;

p=q->front->next;

if(p!

=NULL)

{

printf("输出链队元素");

while(p!

=NULL)

{printf("%2d",p->data);p=p->next;

}

}

elseprintf("\n链队为空");

//入队

//出队

//输出链队列的元素

 

然后出队,

//建立空链队列

//入队5个元素

//把5个元素出队

//看是否出队成功

}

(4)在主函数中先往队列里输入5个元素,输出,看入队是否成功,再调用display()函数看是否出队。

intmain()

{

inti,y=O;

SetQueue();

display(q);

Printf("∖n请输入5个元素");

for(i=0;i<5;i++)

{

SCanf("%d",&y);

Add(q,y);

}

display(q);for(i=0;i<5;i++)

{

DeIete(q);

}

display(q);

return0;

}

4、调试分析

编译无错误

5、用户使用说明

程序名为class12exe,在DEBUGt件夹里面。

运行环境ViSUaIC++6.0。

6、测试结果

链队为穹

诸输入5个元索12345

输陆元壷12345

麓队为⅞PressanykeytoCOntinlle

7、附录

#include

#include

#definemaxlen10typedefstructnode{intdata;structnode*next;

}LinkList;

typedefstruct{

LinkList*front,*rear;

}LinkQueue;

LinkQueue*q;

LinkQueue*SetQueue()//建立一个空链队列

{q=(LinkQueue*)malloc(sizeof(LinkQueue));q->front=(LinkList*)malloc(sizeof(LinkList));q->front->next=NULL;

q->rear=q->front;returnq;

}

intQueueEmpty(LinkQueue*q){//判断队列是否为空if(q->rear==q->front)

return1;

elsereturn0;

}

LinkQueue*Add(LinkQueue*q,intx)//入队

{

LinkList*p;p=(LinkList*)malloc(sizeof(LinkList));p->data=x;p->next=NULL;q->rear->next=p;

q->rear=p;returnq;

}

LinkQueue*Delete(LinkQueue*q){//出队

LinkList*p;

if(!

QueueEmpty(q)){p=q->front->next;q->front->next=p->next;if(p->next=NULL)q->rear=q->front;

}

elseprintf("queueEmpty");

}

voiddisplay(LinkQueue*q)

{

LinkList*p;

p=q->front->next;

if(p!

=NULL)

{

printf("输出链队元素");while(p!

=NULL)

{

printf("%2d",p->data);p=p->next;

}

}

elseprintf("\n链队为空");

}

intmain()

{

inti,y=0;

SetQueue();

display(q);

printf("\n请输入5个元素");

for(i=0;i<5;i++)

{

scanf("%d",&y);

Add(q,y);

}

display(q);

for(i=0;i<5;i++)

{

Delete(q);

}

display(q);

return0;

//输出链队列的元素

//建立链队列

//入队5个元素

//把5个元素出队

//看是否出队成功

 

实验题目2:

写出下列程序段的输出结果,并通过程序运行来验证1•问题分析

完成该实验需要以下4个子任务:

(£定义一个循环队列的存储结构,定义队列的基本算法。

②定义一个Print()函数实现程序

④在主函数中完成操作

测试数据设计如下:

2.概要设计

为了实现上述程序功能,需要:

②声明一个循环队列②定义出队列的基本算法,

②在主函数调用print()函数看是否出队。

3)本程序包含8个函数:

1主函数main()

2.置空队:

InitQueue()

3.判对空:

QUeUeEmPtyo

4.判队满:

QUeUeFUll()

5.入队:

AddO

6.出队:

DeIeteO

7.display()

8.GetHeado

各函数关系如下:

GetHead()

InitQueue()

QueueEmptyO

QueueFuI1()

Add()Main

DeIete()

Print()

5、详细设计

实现概要设计中定义的所有的数据类型,对每个操作给出了算法和代码,主程序和模块都需要代码。

(1)循环队列

#definemaxlen10

typedefStrUCt{

Chardata[maxlen];

intfront;intrear;

}SeqQueue;

(2)队列基本算法

SeqQUeUe*lnitQueue(SeqQueue*q)//建立一个空循环队列

{

q=(SeqQueue*)malloc(sizeof(SeqQueue));

q->front=0;

q->rear=0;

returnq;

}

intQueueFull(SeqQUeUe*q){//判断队列是否为满

if(q->front==(q->rear+1)%maxlen)

return1;

elsereturn0;

}

intQUeUeEmPty(SeqQUeUe*q){//判断队列是否为空

if(q->rear==q->front)

return1;

elsereturn0;

}

charGetHead(SeqQueue*q){//

if(!

QueueEmpty(q))

returnq->data[(q->front+1)%maxlen];

elseprintf("queueEmpty");

}

voidAdd(SeqQueue*q,charx)//

{

if(!

QueueFull(q)){q->rear=(q->rear+1)%maxlen;q->data[q->rear]=x;

}elseprintf("queuefull");

}

voidDelete(SeqQueue*q){//

if(!

QueueEmpty(q))q->front=(q->front+1)%maxlen;

elseprintf("queueEmpty");

}

(3)用print()函数验证程序

voidprint(SeqQueue*q)

{

charx,y,t;

x='e';y='c';

Add(q,'h');

Add(q,'r');

Add(q,y);

x=GetHead(q);

Delete(q);

Add(q,x);

x=GetHead(q);

Delete(q);

Add(q,'a');

while(QueueEmpty(q)==0){y=GetHead(q);Delete(q);printf("%c",y);

}

printf("%c",x);

取栈顶元素

入队

出队

 

(4)在主函数中调用Print()函数验证程序

intmain()

{

SeqQueue*q;q=lnitQueue(q);Print(q);

return0;

}

4、调试分析

编译无错误

5、用户使用说明

程序名为CIaSS2.exe,在DEBUGt件夹里面。

运行环境ViSUaIC++6.0。

6、测试结果

I■ILZ・VL∙∣JV^-3i2L⅜⅝-∣U£_XLZJkJU弓⅜⅝uIlJIJ4£_・JKJ

charPressanykeytoCOntinue

7、附录

#includeVStdiO.h>

#includeVStdIib.h>

#definemaxlen10typedefStrUCt{

Chardata[maxlen];

intfront;

intrear;

}SeqQueue;

//建立一个空循环队列

SeqQUeUe*lnitQueue(SeqQueue*q)

q=(SeqQueue*)malloc(sizeof(SeqQueue));

q->front=0;

q->rear=0;

returnq;

}

intQueueFull(SeqQueue*q){

if(q->front==(q->rear+1)%maxlen)return1;

elsereturn0;

}

//判断队列是否为满

intQueueEmpty(SeqQueue*q){if(q->rear==q->front)return1;

elsereturn0;

}

charGetHead(SeqQueue*q){

if(!

QueueEmpty(q))

//判断队列是否为空

//取栈顶元素

returnq->data[(q->front+1)%maxlen];elseprintf("queueEmpty");

}

voidAdd(SeqQueue*q,charx)//入队{

if(!

QueueFull(q)){q->rear=(q->rear+1)%maxlen;q->data[q->rear]=x;

}elseprintf("queuefull");

}

voidDelete(SeqQueue*q){//出队if(!

QueueEmpty(q))q->front=(q->front+1)%maxlen;

elseprintf("queueEmpty");

}

voidprint(SeqQueue*q){

charx,y,t;x='e';y='c';Add(q,'h');Add(q,'r');

 

Add(q,y);

x=GetHead(q);

Delete(q);

Add(q,x);

x=GetHead(q);

Delete(q);

Add(q,'a');

while(QueueEmpty(q)==0){y=GetHead(q);Delete(q);printf("%c",y);

}

printf("%c",x);

}

int

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

当前位置:首页 > 成人教育 > 电大

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

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