实验三 队列实验 实验题目:
建立含有若干个元素的循环队列和链队列,并分别实现循环队列和链队列的入队和出对操作。
(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 nedﻩ 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()t 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
实验三队列实验报告大全
文件夹