收藏 分享(赏)

实验三队列实验报告.doc

上传人:精品资料 文档编号:10548293 上传时间:2019-11-27 格式:DOC 页数:19 大小:162.17KB
下载 相关 举报
实验三队列实验报告.doc_第1页
第1页 / 共19页
实验三队列实验报告.doc_第2页
第2页 / 共19页
实验三队列实验报告.doc_第3页
第3页 / 共19页
实验三队列实验报告.doc_第4页
第4页 / 共19页
实验三队列实验报告.doc_第5页
第5页 / 共19页
点击查看更多>>
资源描述

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

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

3、 () QueueFull()Add()MainDelete()display()3、详细设计实现概要设计中定义的所有的数据类型,对每个操作给出了算法和代码,主程序和模块都需要代码。(1)循环队列#define maxlen 10typedef structint 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 Queu

4、eFull (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-dataq-rear=x;else printf (“queue full“);void Delete(SeqQueue *q)

5、 /出队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;doi=(i+1)%maxlen;printf(“%d“,q-datai);while(i!=q-rear);elseprintf(“队列为空!“);(4)在主函数中先往队列里输入 5

6、 个元素,输出,看入队是否成功,然后出队,再调用 display()函数看是否出队。int main()SeqQueue *q;int i,y;q=InitQueue(q); /建立空循环队列printf(“请输入5个元素 “);for(i=0;i#include #define maxlen 10typedef structint data maxlen;int front;int rear;SeqQueue;SeqQueue *InitQueue(SeqQueue *q) /建立一个空循环队列q=(SeqQueue *)malloc(sizeof (SeqQueue);q-front=0;

7、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-dataq-rear=x;else printf (“queue full“

8、);void Delete(SeqQueue *q) /出队if (!QueueEmpty(q)q-front=(q-front+1)%maxlen;else printf (“queue Empty“);void display(SeqQueue *q) /输出循环队列 q 的元素int i;if(q-front!=q-rear) /循环队列非空,输出队列元素printf(“输出循环队列元素:“); i=q-front;doi=(i+1)%maxlen;printf(“%d“,q-datai);while(i!=q-rear);elseprintf(“队列为空!“);int main()Se

9、qQueue *q;int i,y;q=InitQueue(q); /建立空循环队列printf(“请输入 5 个元素“);for(i=0;ifront=(LinkList *)malloc(sizeof(LinkList);q-front-next=NULL;q-rear=q-front;return q;int QueueEmpty(LinkQueue *q) /判断队列是否为空if (q-rear=q-front)return 1;else return 0;LinkQueue *Add (LinkQueue *q,int x) /入队LinkList *p;p=(LinkList *)

10、malloc(sizeof (LinkList);p-data=x;p-next=NULL;q-rear-next=p;q-rear=p;return q;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);return q;else printf (“queue Empty“);(3)用display()函数输出链队列元素void display(LinkQueue *q

11、) /输出链队列的元素LinkList *p;p=q-front-next;if(p!=NULL)printf(“输出链队元素“);while(p!=NULL)printf(“%2d“,p-data);p=p-next;else printf(“n链队为空“);(4)在主函数中先往队列里输入 5 个元素,输出,看入队是否成功,然后出队,再调用 display()函数看是否出队。int main()int i,y=0;SetQueue(); /建立空链队列display(q) ; printf(“n请输入5个元素“);for(i=0;i#include #define maxlen 10type

12、def struct nodeint data;struct node *next;LinkList;typedef structLinkList *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;return q;int QueueEmpty(LinkQueue *q) /判

13、断队列是否为空if (q-rear=q-front)return 1;else return 0;LinkQueue *Add (LinkQueue *q,int x) /入队LinkList *p;p=(LinkList *)malloc(sizeof (LinkList);p-data=x;p-next=NULL;q-rear-next=p;q-rear=p;return q;LinkQueue *Delete(LinkQueue *q) /出队LinkList *p;if (!QueueEmpty(q)p=q-front-next;q-front-next=p-next;if(p-nex

14、t=NULL)q-rear=q-front;free(p);return q;else printf (“queue Empty“);void display(LinkQueue *q) /输出链队列的元素LinkList *p;p=q-front-next;if(p!=NULL)printf(“输出链队元素“);while(p!=NULL)printf(“%2d“,p-data);p=p-next;else printf(“n 链队为空“);int main()int i,y=0;SetQueue(); /建立链队列display(q); printf(“n 请输入 5 个元素“);for(

15、i=0;ifront=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;char GetHead(SeqQueue *q) /取栈顶元素if(!QueueEmpty(q)return q-data(q-front+1)%maxlen;else printf(“queue

16、Empty“);void Add (SeqQueue *q,char x) /入队if(!QueueFull(q)q-rear=(q-rear+1)%maxlen;q-dataq-rear=x;else printf (“queue full“);void Delete(SeqQueue *q) /出队if (!QueueEmpty(q)q-front=(q-front+1)%maxlen;else printf (“queue Empty“);(3)用print()函数验证程序void print(SeqQueue *q)char x,y,t;x=e;y=c;Add(q,h);Add(q,r

17、);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()函数验证程序int main()SeqQueue *q;q=InitQueue(q);print(q);return 0;4、调试分析编译无错误5、用户使用说明程序名为 class2.exe,在 DEBUG 文件夹里面。运行环境 Visual c+ 6.0。6、

18、测试结果7、附录#include #include #define maxlen 10typedef structchar data maxlen;int front;int rear;SeqQueue;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

19、0;int QueueEmpty(SeqQueue *q) /判断队列是否为空if (q-rear=q-front)return 1;else return 0;char GetHead(SeqQueue *q) /取栈顶元素if(!QueueEmpty(q)return q-data(q-front+1)%maxlen;else printf(“queue Empty“);void Add (SeqQueue *q,char x) /入队if(!QueueFull(q)q-rear=(q-rear+1)%maxlen;q-dataq-rear=x;else printf (“queue fu

20、ll“);void Delete(SeqQueue *q) /出队if (!QueueEmpty(q)q-front=(q-front+1)%maxlen;else printf (“queue Empty“);void print(SeqQueue *q)char x,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 main()SeqQueue *q;q=InitQueue(q);print(q);return 0;

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

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报