实验三队列及队列的应用实验一、实验目的1、掌握队列的定义、队列的顺序存储、链式存储及基本操作;2、根据队列的基本操作,设计队列的应用实验并完成;3、掌握循环队列的基本操作及其应用。二、实验要求1、设计队列与循环队列的应用实验;2、写出相应程序;3、保存和打印出程序的运行结果,并结合程序进行分析。三、实验内容1.任意输入队列长度和队列中的元素值,构造一个顺序循环队列,对其进行清空、插入新元素、返回队头元素以及删除队头元素操作。2.约瑟夫环的实现:设有n个人围坐在圆桌周围,现从某个位置i上的人开始报数,数到m的人就站出来。下一个人,即原来的第m+1个位置上的人,又从1开始报数,再是数到m的人站出来。依次重复下去,直到全部的人都站出来,按出列的先后又可得到一个新的序列。例如:当n=8,m=4,i=1时,得到的新序列为:4,8,5,2,1,3,7,6编写程序选择循环队列作为存储结构模拟整个过程,并依次输出出列的各人的编号。算法:四、程序代码#includestdio.h#includestdlib.htypedefstruct{int*base;intfront;intrear;intlen;}Queue;voida(Queue&q,intn){//队列初始化q.base=(int*)malloc(100*sizeof(int));q.front=q.rear=0;q.len=n;}voidclean(Queue&q){//清空队列q.rear=0;}voidc(Queue&q,intn){//入队列if((q.rear+1)%100==q.front){printf(队列已满!\n);return;}q.base[q.rear]=n;q.rear=(q.rear+1)%100;}voidd(Queue&q){//出队列if(q.front==q.rear){printf(队列为空!\n);return;}printf(%d\t,q.base[q.front]);q.front=(q.front+1)%100;}voide(Queue&q,intx,inty){intj=1,k=0;inta[q.len];for(inti=0;iq.len;i++)a[i]=1;q.front=x-1;while(j=q.len){q.front--;for(inti=1;i=y;){q.front=(q.front+1)%q.len;if(a[q.front]==1)i++;}a[q.front]=0;d(q);j++;}}intmain(){Queueq;intm,i;intx,n;printf(请输入队列长度:);scanf(%d,&n);a(q,n);printf(请输入队列元素:\n);for(inti=0;in;i++){scanf(%d,&x);c(q,x);}/*printf(队头元素为:);d(q);printf(\n删除队头元素后的队列\n);for(inti=q.front;iq.len;i++){d(q);}*/printf(请输入i和m的值:);scanf(%d%d,&i,&m);e(q,i,m);}五、结果及分析