实验三队列实验报告_第1页
实验三队列实验报告_第2页
实验三队列实验报告_第3页
已阅读5页,还剩17页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、寸合肥修沆HBFElUNIVEHS1TY计算机科学与技术系实验报告专业名称计算机科学与技术课程名称数据结构与算法项目名称实验三队列实验班级学号1姓名同组人员无实验日期实验三队列实验实验题目:建立含有若干个元素的循环队列和链队列,并分别实现循环队列和链队列的入队和出对操作。(1) 先实现循环队列的入队和出队操作问题分析本程序要求实现建立含有若干个元素的循环队列,并实现循环队列的入队和出队操作。完成该实验需要以下4个子任务:定义一个循环队列的存储结构,定义队列的基本算法。定义一个display()函数实现队歹U元素的输出看入队是否成功顷通过队列的基本算法实现队列的出队操作(4在主函数中完成操作测试

2、数据设计如下:123451. 6概要设计为了实现上述程序功能,需要:。声明一个循环队列定义出队列的基本算法,笆通过键盘输入5个整数,入队,出队在主函数中先往队列里输入5个元素,然后入队,输出,看入队是否成功,然后出队,再调用display()函数看是否出队。1)本程序包含7个函数:1主函数main()置空队:InitQueue()判对空:QueueEmpty()判队满:QueueFull()入队:Add()出队:Delete()display()各函数关系如下:Main()InitQueue()QueueEmpty()QueueFull()Add()MainDelete()display()3

3、、详细设计实现概要设计中定义的所有的数据类型,对每个操作给出了算法和代码,主程序和模块都需要代码。(1)循环队列#definemaxlen10typedefstruct(intdatamaxlen;intfront;intrear;SeqQueue;(2) 队歹0基本算法SeqQueue*InitQueue(SeqQueue*q)/建立一个空循环队歹U(q=(SeqQueue*)malloc(sizeof(SeqQueue);q->front=0;q->rear=0;returnq;intQueueFull(SeqQueue*q)(/判断队歹U是否为满if(q->front=

4、(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->dataq->rear=x;elseprintf("queuefull");voidDelete(SeqQueue*q)出队if(!QueueEmpty(q)q-

5、>front=(q->front+1)%maxlen;elseprintf("queueEmpty");(3) 用display()函数输出循环队歹U元素voiddisplay(SeqQueue*q)/输出循环队歹Uq的元素(inti;if(q->front!=q->rear)循环队歹0非空,输出队歹0元素(printf("输出循环队列元素:");i=q->front;do(i=(i+1)%maxlen;printf("%d",q->datai);while(i!=q->rear);elsep

6、rintf("队列为空!");然后出(4) 在主函数中先往队列里输入5个元素,输出,看入队是否成功,队,再调用display()函数看是否出队。intmain()SeqQueue*q;inti,y;q=InitQueue(q);/建立空循环队歹Uprintf("请输入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个元素&quo

7、t;);scanf("%d",&y);/再入队一个元素Add(q,y);display(q);/再输出循环队列元素return0;4、调试分析编译无错误5、用户使用说明程序名为class1.exe,在DEBUG文件夹里面。运行环境VisualC+6.0。6、测试结果洒输入5个元泰12343输山循环队列兀密:12315请输元个元却腾出循环队列元素:6Prossanykeytocontinue7、附录#include<stdio.h>#include<stdlib.h>#definemaxlen10typedefstructintdatamaxl

8、en;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)return

9、1;elsereturn0;voidAdd(SeqQueue*q,intx)if(!QueueFull(q)(q->rear=(q->rear+1)%maxlen;q->dataq->rear=x;elseprintf("queuefull");voidDelete(SeqQueue*q)(/入队/出队if(!QueueEmpty(q)q->front=(q->front+1)%maxlen;voiddisplay(SeqQueue*q)/输出循环队列q的元素inti;if(q->front!=q->rear)/循环队列非空,

10、输出队列元素printf("输出循环队列元素:”);i=q->front;elseprintf("queueEmpty");do(i=(i+1)%maxlen;printf("%d”,q->datai);while(i!=q->rear);elseprintf("队列为空!");intmain()(SeqQueue*q;inti,y;q=InitQueue(q);/建立空循环队列printf(-请输入5个元素");for(i=0;i<5;i+)/入队5个元素(scanf("%d”,&

11、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);/再输出循环队列元素return0;(2)实现链队列的入队和出队操作问题分析本程序要求实现建立含有若干个元素的链队列,并实现链队列入队和出队操完成该实验需要以下4个子任务: 定义一个链队列的存储结构,定义链队列的基本算法。 定义一个display()函数实现队歹U元素的输出看入队是否成功 通过队列的

12、基本算法实现队列的出队操作 在主函数中完成操作测试数据设计如下:123451. 6概要设计为了实现上述程序功能,需要:。声明一个链队列定义出链队列的基本算法,笆通过键盘输入5个整数,入队,出队在主函数中先往队列里输入5个元素,然后入队,输出,看入队是否成功,然后出队,再调用display()函数看是否出队。2)本程序包含6个函数:2. 1主函数main()置空队:InitQueue()判对空:QueueEmpty()入队:Add()出队:Delete()display()各函数关系如下:Main()SetQueue()QueueEmpty()Add()Delete()display()4、详细

13、设计实现概要设计中定义的所有的数据类型,对每个操作给出了算法和代码,主程序和模块都需要代码。链队列#definemaxlen10typedefstructnode(intdata;structnode*next;LinkList;typedefstruct(LinkList*front,*rear;LinkQueue;LinkQueue*q;(1) 队列基本算法LinkQueue*SetQueue()/建立一个空链队歹U(q=(LinkQueue*)malloc(sizeof(LinkQueue);q->front=(LinkList*)malloc(sizeof(LinkList);q

14、->front->next=NULL;q->rear=q->front;returnq;intQueueEmpty(LinkQueue*q)(/判断队歹U是否为空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;LinkQu

15、eue*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");(2) 用display()函数输出链队列元素voiddisplay(LinkQueue*q)/输出链队歹U的元素(LinkList*p;p=q->front->next;if(p!=

16、NULL)(printf("输出链队元素");while(p!=NULL)(printf("%2d",p->data);p=p->next;elseprintf("n链队为空");(3) 在主函数中先往队列里输入5个元素,输出,看入队是否成功,然后出队,再调用display()函数看是否出队。intmain()(inti,y=0;SetQueue();/建立空链队列display(q);printf("n请输入5个元素");for(i=0;i<5;i+)/入队5个元素scanf("%d&

17、quot;,&y);Add(q,y);display(q);for(i=0;i<5;i+)/把5个元素出队Delete(q);display(q);/看是否出队成功return0;4、调试分析编译无错误5、用户使用说明程序名为class12exe,在DEBUG文件夹里面。运行环境VisualC+6.0。6、测试结果旌队为中访输入S个无索12345常出施队元素12345限队为空力reasanykeytocontinue7、附录#include<stdio.h>#include<stdlib.h>#definemaxlen10typedefstructnode

18、intdata;structnode*next;LinkList;typedefstructLinkList*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

19、(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->n

20、ext=p->next;if(p->next=NULL)q->rear=q->front;free(p);returnq;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链队为空");intm

21、ain()(inti,y=0;SetQueue();/建立链队列display(q);printf("n请输入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);/看是否出队成功display(q);return0;实验题目2:写出下列程序段的输出结果,并通过程序运行来验证问题分析完成该实验需要以下4个子任务: 定义一个循环队列的存储结构,定义队列的基本算法。 定义一个print()函数实现程序 通过

22、队列的基本算法实现队列的出队操作(4在主函数中完成操作测试数据设计如下:1. 概要设计为了实现上述程序功能,需要:。声明一个循环队列定义出队列的基本算法,笆在主函数调用print()函数看是否出队3)本程序包含8个函数:1主函数main()置空队:InitQueue()判对空:QueueEmpty()判队满:QueueFull()入队:Add()出队:Delete()display()GetHead()Main()各函数关系如下:GetHead()InitQueue()QueueEmpty()QueueFull()Add()MainDelete()print()5、详细设计实现概要设计中定义的

23、所有的数据类型,对每个操作给出了算法和代码,主程序和模块都需要代码。循环队列#definemaxlen10typedefstruct(chardatamaxlen;intfront;intrear;SeqQueue;(1) 队歹0基本算法SeqQueue*InitQueue(SeqQueue*q)/建立一个空循环队歹U(q=(SeqQueue*)malloc(sizeof(SeqQueue);q->front=0;q->rear=0;returnq;intQueueFull(SeqQueue*q)(if(q->front=(q->rear+1)%maxlen)retur

24、n1;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)%maxl

25、en;q->dataq->rear=x;elseprintf("queuefull");voidDelete(SeqQueue*q)(出队if(!QueueEmpty(q)q->front=(q->front+1)%maxlen;elseprintf("queueEmpty");(2) 用print()函数验证程序voidprint(SeqQueue*q)(charx,y,t;x='e'y='c'Add(q,'h');Add(q,'r');Add(q,y);x=Get

26、Head(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);(3) 在主函数中调用print()函数验证程序intmain()(SeqQueue*q;q=InitQueue(q);print(q);return0;4、调试分析编译无错误5、用户使用说明程序名为class2.exe,在DEBUG文件夹里面。运行环境VisualC+6.0。6、测试结果arPressanykeytocontinue7、附录#include<stdio.h>#include<stdlib.h>#definemaxlen10typedefstructchardatamaxlen;intfront;intrear;SeqQueue;SeqQueue*InitQueue(SeqQueue*q)/建立一个空循环队列(q=(SeqQueue*)malloc(sizeof(SeqQueue);q->

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论