当前位置: 首页 > 其他范文 > 其他范文

实验三队列实验报告

作者:95009151 | 发布时间:2020-12-11 12:29:08 收藏本文 下载本文

计算机科学与技术系 实 验 报 告 专业名称 计算机科学与技术 课程名称 数据结构与算法 项目名称 实验三队列实验 班 级 学 号 1 姓 名 同组人员 无 实验日期

实验三 队列实验 实验题目:

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

(1 1)先实现循环队列的入队和出队操作 1 1。问题分析 本程序要求实现建立含有若干个元素的循环队列,并实现循环队列的入队和出队操作.完成该实验需要以下 4 个子任务:

\o\ac(○ ,1)定义一个循环队列的存储结构,定义队列的基本算法。

○2 定义一个 display()函数实现队列元素的输出看入队是否成功 错误!通过队列的基本算法实现队列的出队操作 错误!在主函数中完成操作 测试数据设计如下:

1 2 3 4 5 6 2 2。

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

错误!声明一个循环队列 错误!定义出队列的基本算法,错误!通过键盘输入 5 个整数,入队,出队 错误!在主函数中先往队列里输入 5 个元素,然后入队,输出,看入队是否成功,然后出队,再调用 display()函数看是否出队。

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

1 主函数main()2.置空队:InitQueue()3.判对空:

QueueEmpty()4.判队满:QueueFull()5。入队:Add()6。出队:Delete()7。display()各函数关系如下:

In itQueu e(()

euQ Qﻩ ueu u e Empty()M a in(()Qu e ueFull()dAﻩ Add())M M ai n eDﻩ De lete()dis s p lay()3 3、详细设计 实现概要设计中定义的所有的数据类型,对每个操作给出了算法和代码,主程序和模块都需要代码.(1)循环队列 #define maxlen 10 typedef struct{ ﻩ ﻩ;]nelxam[ atad tniﻩ ﻩ ﻩ ;tnorf tniﻩ ;raer tniﻩ}SeqQueue;(2)队列基本算法 SeqQueue *InitQueue(SeqQueue *q)//建立一个空循环队列 { q=(SeqQueue *)malloc(sizeof(SeqQueue));;0=tnorf>-qﻩ;0=raer>-qﻩ;q nruterﻩ} int QueueFull(SeqQueue *q){ //判断队列是否为满 if(q-〉front==(q->rear+1)%maxlen)ﻩ ;1 nruterﻩ else return 0; } int QueueEmpty(SeqQueue *q){ ﻩ //判断队列是否为空)tnorf>—q==raer>—q(fiﻩ

return 1;else return 0; } void Add(SeqQueue *q,int x)//入队 { {))q(lluFeueuQ!(fiﻩ ﻩ ;nelxam%)1+raer>-q(=raer>-qﻩ q—〉data[q-〉rear]=x; } ;)”lluf eueuq"(ftnirp esleﻩ} void Delete(SeqQueue *q){ //出队))q(ytpmEeueuQ!(fiﻩ ;nelxam%)1+tnorf>—q(=tnorf>—qﻩ else printf("queue Empty"); }(3)用display()函数输出循环队列元素 void display(SeqQueue *q)// ﻩ 素元的q列队环循出输ﻩ{ ;i tniﻩ)raer>-q=!tnorf>-q(fiﻩ ﻩ ﻩ //循环队列非空,输出队列元素 { ﻩ printf("输出循环队列元素:"); ﻩ;tnorf〉-q=iﻩ odﻩ {;nelxam%)1+i(=iﻩ ﻩ;)]i[atad>—q,"d%"(ftnirpﻩ }while(i!=q->rear); } else printf(”队列为空!");}(4)在主函数中先往队列里输入 5 个元素,输出,看入队是否成功,然后出队,再调用 display()函数看是否出队.int main(){ ;q* eueuQqeSﻩ ;y,i tniﻩ q=InitQueue(q);// ﻩ ﻩ 列队环循空立建ﻩ

printf("请输入5个元素”); for(i=0;i<5;i++)// ﻩ ﻩ 素元个5队入ﻩ {;)y&,"d%”(fnacsﻩ ;)y,q(ddAﻩ } display(q); ﻩ ﻩ // ﻩ ﻩ 素元列队环循出输ﻩ)++i;5

6 6、测试结果 7 7、附录 #include

;tnorf tniﻩ int rear; }SeqQueue;SeqQueue *InitQueue(SeqQueue *q)//建立一个空循环队列 { q=(SeqQueue *)malloc(sizeof(SeqQueue)); ;0=tnorf>-qﻩ q->rear=0; return q;} int QueueFull(SeqQueue *q){ //判断队列是否为满)nelxam%)1+raer>-q(==tnorf>-q(fiﻩ return 1; else return 0;} int QueueEmpty(SeqQueue *q){// ﻩ ﻩ 空为否是列队断判ﻩ)tnorf>-q==raer>-q(fiﻩ;1 nruterﻩ else return 0;} void Add(SeqQueue *q,int x)//入队 { {))q(lluFeueuQ!(fiﻩ q-〉rear=(q—>rear+1)%maxlen; ﻩ ;x=]raer>-q[atad〉-qﻩ }else printf("queue full");} void Delete(SeqQueue *q){ //出队))q(ytpmEeueuQ!(fiﻩ ﻩ;nelxam%)1+tnorf>-q(=tnorf>-qﻩ else printf(”queue Empty");} void display(SeqQueue *q)ﻩ //输出循环队列 q 的元素 { int i;ﻩ)raer〉-q=!tnorf〉—q(fiﻩ ﻩ // 素元列队出输,空非列队环循ﻩ { ;)”:素元列队环循出输”(ftnirpﻩ

;tnorf>—q=iﻩ do { ﻩ ﻩ i=(i+1)%maxlen;ﻩ ﻩ printf("%d”,q->data[i]); } ;)raer〉-q=!i(elihwﻩ } esleﻩ ;)"!空为列队"(ftnirpﻩ} int main(){;q* eueuQqeSﻩ int i,y;q=InitQueue(q);// ﻩ ﻩ ﻩ ﻩ 列队环循空立建ﻩ ;)”素元个 5 入输请”(ftnirpﻩ ﻩ)++i;5

(2 2)实现链队列的入队和出队操作 1 1 .问题分析 本程序要求实现建立含有若干个元素的链队列,并实现链队列入队和出队操作。

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

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

○2 定义一个 display()函数实现队列元素的输出看入队是否成功 错误!通过队列的基本算法实现队列的出队操作 错误!在主函数中完成操作 测试数据设计如下:

1 2 3 4 5 6 2 2。概要设计 为了实现上述程序功能,需要:○,1 声明一个链队列 错误!定义出链队列的基本算法,○,3 通过键盘输入5个整数,入队,出队 ○,4 在主函数中先往队列里输入 5 个元素,然后入队,输出,看入队是否成功,然后出队,再调用display()函数看是否出队。

2)本程序包含6个函数: 1 主函数 main()2.置空队:InitQueue()3.判对空: QueueEmpty()4.入队:Add()5.出队:Delete()6.display()各函数关系如下: uQteSﻩ SetQu e ue()

euQ Qﻩ ueu u e Empty()M ain())A dd()eteleDﻩ Delete()display()4 4、详细设计 实现概要设计中定义的所有的数据类型,对每个操作给出了算法和代码,主程序和模块都需要代码。

(1 1)链队列 #define maxlen 10 typedef struct node{ int data;struct node *next; }LinkList;typedef struct{ LinkList *front,*rear; }LinkQueue;LinkQueue *q;(2)队列基本算法 LinkQueue *SetQueue()//建立一个空链队列 { ;))eueuQkniL(foezis(collam)* eueuQkniL(=qﻩ q->front=(LinkList *)malloc(sizeof(LinkList));q->front->next=NULL;q—〉rear=q—>front;;q nruterﻩ} int QueueEmpty(LinkQueue *q){// ﻩ 空为否是列队断判ﻩ if(q-〉rear==q—>front)return 1; ;0 nruter esleﻩ}

LinkQueue *Add(LinkQueue *q,int x)//入队 { LinkList *p;p=(LinkList *)malloc(sizeof(LinkList)); p—>data=x;p-〉next=NULL;;p=txen>-raer〉—qﻩ q—>rear=p; return q; } LinkQueue *Delete(LinkQueue *q){ // 队出ﻩ ;p* tsiLkniLﻩ if(!QueueEmpty(q)){ ﻩ ;txen〉-tnorf>-q=pﻩ q—>front—〉next=p-〉next;ﻩ if(p->next=NULL)q->rear=q—〉front; ;q nruter;)p(eerfﻩ } ﻩ else printf(”queue Empty"); }(3 3)用di spla y())函数输出链队列元素 void display(LinkQueue *q)//输出链队列的元素 { ;p* tsiLkniLﻩ p=q->front-〉next; if(p!=NULL){ ;)"素元队链出输”(ftnirpﻩ ﻩ)LLUN=!p(elihwﻩ { ﻩ ﻩ printf(”%2d”,p—〉data); ﻩ ﻩ p=p—>next; } ﻩ };)"空为队链n"(ftnirp esleﻩ} }(4)入 在主函数中先往队列里输入 5 5 个元素,输出,看入队是否成功, , 然后出队,再调用 d d is play()函数看是否出队。

int main(){;0=y,i tniﻩ SetQueue();ﻩ ﻩ //建立空链队列

display(q); ﻩ ;)”素元个5入输请n"(ftnirpﻩ for(i=0;i〈5;i++)ﻩ ﻩ //入队5个元素 {;)y&,"d%”(fnacsﻩ;)y,q(ddAﻩ } display(q); ﻩ ﻩ)++i;5〈i;0=i(rofﻩ // ﻩ 队出素元个5把ﻩ { ﻩ;)q(eteleDﻩ ﻩ ﻩ ﻩ }ﻩ ﻩ ;)q(yalpsidﻩ // ﻩ 功成队出否是看ﻩ;0 nruterﻩ} 4、调试分析 编译无错误 5 5、用户使用说明 程序名为class12exe,在 DEBUG文件夹里面.运行环境 Visual c++ 6.0。

6 6、测试结果 7 7、附录 #include <stdio.h> #include #define maxlen 10 typedef struct node{ int data;

;txen* edon tcurtsﻩ}LinkList; typedef struct{ LinkList *front,*rear; }LinkQueue; LinkQueue *q; LinkQueue *SetQueue()//建立一个空链队列 { q=(LinkQueue *)malloc(sizeof(LinkQueue)); ;))tsiLkniL(foezis(collam)* tsiLkniL(=tnorf>-qﻩ q->front-〉next=NULL;;tnorf〉—q=raer〉-qﻩ return q; } int QueueEmpty(LinkQueue *q){ // 空为否是列队断判ﻩ if(q->rear==q->front);1 nruterﻩ;0 nruter esleﻩ} LinkQueue *Add(LinkQueue *q,int x)//入队 { ;p* tsiLkniLﻩ p=(LinkList *)malloc(sizeof(LinkList));p->data=x;p—>next=NULL;;p=txen>—raer>-qﻩ q->rear=p;;q nruterﻩ} LinkQueue *Delete(LinkQueue *q){ ﻩ //出队;p* tsiLkniLﻩ {))q(ytpmEeueuQ!(fiﻩ;txen>—tnorf>-q=pﻩ ;txen〉-p=txen〉—tnorf>-qﻩ if(p—>next=NULL)q->rear=q—〉front; ;q nruter;)p(eerfﻩ } ;)”ytpmE eueuq”(ftnirp esleﻩ} void display(LinkQueue *q)ﻩ //输出链队列的元素 {

;p* tsiLkniLﻩ p=q->front-〉next; if(p!=NULL){ ﻩ ;)"素元队链出输"(ftnirpﻩ while(p!=NULL){ ﻩ;)atad>-p,"d2%”(ftnirpﻩ ﻩ ﻩ ;txen〉—p=pﻩ } } ﻩ else printf("n 链队为空"); } int main(){ int i,y=0;SetQueue();ﻩ // ﻩ ﻩ ﻩ 列队链立建ﻩ)q(yalpsidﻩ ﻩ ;ﻩ ﻩ ;)”素元个 5 入输请 n\”(ftnirpﻩ for(i=0;i<5;i++)ﻩ // ﻩ 素元个 5 队入ﻩ { ﻩ;)y&,”d%”(fnacsﻩ Add(q,y);} display(q); ﻩ ﻩ ﻩ ﻩ //)++i;5〈i;0=i(rofﻩ ﻩ ﻩ 队出素元个 5 把ﻩ { ﻩ Delete(q);} ﻩ ﻩ ;)q(yalpsidﻩ ﻩ // 功成队出否是看ﻩ return 0;}

实验题目 2 2 :

写出下列程序段的输出结果,并通过程序运行来验证 1.问题分析 完成该实验需要以下 4 个子任务: 错误!定义一个循环队列的存储结构,定义队列的基本算法.○2 定义一个 print()函数实现程序 错误!通过队列的基本算法实现队列的出队操作 \o\ac(○,4)在主函数中完成操作 测试数据设计如下: 2.概要设计 为了实现上述程序功能,需要:

错误!声明一个循环队列 错误!定义出队列的基本算法, 错误!在主函数调用print()函数看是否出队。

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

1主函数 main()2。置空队:InitQueue()3。判对空:

QueueEmpty()4。判队满:QueueFull()5.入队:Add()6。出队:Delete()7.display()8. GetHead()各函数关系如下:

GetHead()Iﻩ In n itQ ue ue())Qu u eu u eEmp ty()M M ai n()ﻩ uQ Qﻩ u eueFul l(()Add())M Ma a in n Del e te()prin n t())

5 5、详细设计 实现概要设计中定义的所有的数据类型,对每个操作给出了算法和代码,主程序和模块都需要代码.(1)循环队列 #define maxlen 10 typedef struct{ ﻩ;]nelxam[ atad rahcﻩ ﻩ ;tnorf tniﻩ ﻩ ﻩ ;raer tniﻩ}SeqQueue;(2)队列基本算法 SeqQueue *InitQueue(SeqQueue *q)//建立一个空循环队列 {;))eueuQqeS(foezis(collam)* eueuQqeS(=qﻩ q—>front=0;;0=raer>—qﻩ ;q nruterﻩ} int QueueFull(SeqQueue *q){ //判断队列是否为满)nelxam%)1+raer〉-q(==tnorf〉-q(fiﻩ ;1 nruterﻩ;0 nruter esleﻩ} int QueueEmpty(SeqQueue *q){// ﻩ ﻩ 空为否是列队断判ﻩ if(q-〉rear==q->front)ﻩ;1 nruterﻩ else return 0; } char GetHead(SeqQueue *q){ //取栈顶元素 if(!QueueEmpty(q))ﻩ ;]nelxam%)1+tnorf>—q([atad〉—q nruterﻩ else printf("queue Empty”); }

void Add(SeqQueue *q,char x)//入队 { if(!QueueFull(q)){ ﻩ ;nelxam%)1+raer〉—q(=raer>-qﻩ;x=]raer〉-q[atad>-qﻩ }else printf("queue full");} void Delete(SeqQueue *q){ //出队))q(ytpmEeueuQ!(fiﻩ ﻩ q-〉front=(q-〉front+1)%maxlen;else printf(”queue Empty"); }(3)用print()函数验证程序 void print(SeqQueue *q)ﻩ ﻩ{ ;t,y,x rahcﻩ ;"c"=y;"e’=xﻩ Add(q,’h");;)"r’,q(ddAﻩ ;)y,q(ddAﻩ x=GetHead(q); ;)q(eteleDﻩ;)x,q(ddAﻩ x=GetHead(q);Delete(q); Add(q,’a’); {)0==)q(ytpmEeueuQ(elihwﻩ;)q(daeHteG=yﻩ ;)q(eteleDﻩ;)y,"c%"(ftnirpﻩ } ﻩ ;)x,"c%”(ftnirpﻩ }(4)在主函数中调用 print()函数验证程序 int main(){ SeqQueue *q; ;)q(eueuQtinI=qﻩ print(q);;0 nruterﻩ

} 4 4、调试分析 编译无错误 5 5、用户使用说明 程序名为 class2.exe,在 DEBUG文件夹里面。运行环境 Visual c++ 6。0。

6、测试结果 7 7、附录 #i nc c lu u d e < st t d io。

h> # inclu d e 〈 stdlib。

h> #d e fine maxlen 10 0 typed e f s truct{ cha r d d a ta [maxl e n];iﻩ i nt fr o nt ; tni iﻩ nt r r ear r ; } SeqQueue ; SeqQ u eue *I I n itQueue(Seq q Qu eue *q)// 建立一个空循环队列 { eS(=qﻩ q=(Se qQ ueu e *)ma a llo c(si ze e of f(S eq q Q ueue));〉-qﻩ q-〉f f ron t= 0; q q—>rear=0;r r eturn q q ; } } i i n t Q u eueFull(SeqQueue *q q){ / / /判断队列是否为满

iﻩ i f(q -> > fro o nt t = =(q-〉 rear +1 1)%m ax le e n)nruterﻩ return 1; el se return 0; } } int Queu e Em pt t y(Seq Q ueue * q){ / ﻩ // 判断队列是否为空 fiﻩ if(q—>re a r== q—> fron t)return 1 ; esleﻩ else r et ur r n 0 0 ; } } ch h a r Ge tHead(SeqQu eu u e *q){ / / /取栈顶元素(fi iﻩ f(!QueueEmpty(q))ﻩ er rﻩ et t u rn q - >d a ta [(q q-->f ro o n t+1)% % max len ]; le eﻩ l se printf("qu e ue Em m pt y"); } } vo i d Ad d d(Se q Qu e ue *q q,c har x)/ / /入队 { if(!QueueF u ll(q)){ 〉--q qﻩ 〉 rea r=(q—>r ea r+ 1))% maxl en n ; qﻩ q--〉da ta[q -> rear]=x;}e e l se p ri i ntf f(" qu eue e full");} void De le e t e(SeqQu eue *q){ // 出队 fi iﻩ f((!Queu e Em p ty(q))tnorf〉--q qﻩ 〉front =(q-->f r on t+ + 1)%m m ax len;eﻩ e ls e printf(”que u e Em pt y ”);;} void pr int(S e qQueue * q)ﻩ { hc cﻩ ha a r x,y y,t;=xﻩ x= 'e';y=" c" " ; Add(q q,' h’);;Ad d((q,"r");;Add(q, y);x=GetHe ad(q); Del e te(q);;Add(q, , x)); eG=xﻩ x=Ge tH H e ad(q); eDﻩ De le t e(q); dAﻩ Ad d(q,' a");;hw wﻩ h ile(Qu eue e E mp ty(q)==0){

yﻩ y =Ge t Head(q q);;D elete(q q);;rp pﻩ r intf(" %c",y); } ﻩ } p p ri i n tf(”%c”, x); } } int ma i n(){ { eS Sﻩ e qQue u e *q; nI=qﻩ q=In itQu u e ue(q);irpﻩ pri nt t(q);re e tu u r n 0;}

学生实验报告,实验三,循环程序设计

实验三,系统根轨迹分析实验报告

综合性实验实验报告

过滤实验(实验报告)

啤酒实验实验报告

本文标题: 实验三队列实验报告
链接地址:https://www.dawendou.com/fanwen/qitafanwen/303366.html

版权声明:
1.大文斗范文网的资料来自互联网以及用户的投稿,用于非商业性学习目的免费阅览。
2.《实验三队列实验报告》一文的著作权归原作者所有,仅供学习参考,转载或引用时请保留版权信息。
3.如果本网所转载内容不慎侵犯了您的权益,请联系我们,我们将会及时删除。

重点推荐栏目

关于大文斗范文网 | 在线投稿 | 网站声明 | 联系我们 | 网站帮助 | 投诉与建议 | 人才招聘 | 网站大事记
Copyright © 2004-2025 dawendou.com Inc. All Rights Reserved.大文斗范文网 版权所有