其他分享
首页 > 其他分享> > 自己实现队列、循环队列、约瑟夫环问题

自己实现队列、循环队列、约瑟夫环问题

作者:互联网

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 const int N=1e5+5;
 4 /*int ph,pt;//head tail;
 5 int myq[20];//ph==pt队列为空; 
 6 //当进行了pop操作Ph会前移,造成空间浪费,可以采用循坏队列优化;
 7 
 8 int myq_push(int x)
 9 {
10     if(pt==15)pt=0;
11     if(pt!=ph)myq[pt++]=x;
12     else return 0;
13     return 1;
14 }
15 int myq_pop()
16 {
17     if(ph==15)ph=0;
18     if(ph!=pt)ph++;
19     else return 0;
20     return 1;
21 }
22 int main()
23 {
24     //for(int i=0;i<10;i++)myq_push(i);    
25     return 0;
26 }*/
27 /*
28 int q1[1005],q2[1005],q1h=0,q2h=0;
29 
30 int main()
31 {
32     int m,n,k;
33     cin>>m>>n;
34     cin>>k;
35     int t1=m,t2=n;
36     for(int i=0;i<m;i++)q1[i]=i;
37     for(int i=0;i<n;i++)q2[i]=i;
38     while(k)
39     {
40         printf("%d  %d\n",q1[q1h],q2[q2h]);
41         q1[t1++]=q1[q1h++];
42         q2[t2++]=q2[q2h++];
43         k--;
44      } 
45     
46     return 0;
47 }
48 */
49 //约瑟夫环 
50 const int n=10,m=4;
51 int a[n+1],j=n,k=1,p=0;
52 int main()
53 {
54     for(int i=1;i<n;i++)a[i]=i+1;//从1开始计数 
55     a[n]=1;
56     while(p<n)//要有n个人出队 
57     {
58         while(k<m)
59         {
60             j=a[j];//pre指针
61             k++; 
62         }
63          //此时k=m指向第m个节点,j指向第m个节点的前节点
64          //a[i]表示i的next节点;
65          printf("%d ",a[j]);
66          a[j]=a[a[j]]; 
67          k=1;
68          p++;
69     }
70     return 0;
71  } 

 

标签:return,pt,队列,约瑟夫,int,myq,循环,15,ph
来源: https://www.cnblogs.com/matt-su/p/15668404.html