#include<stdio.h>
typedef strUCt Node
{
int number;
int cipher;
struct Node *next;
}node,*hu;
hu H;//定義頭結點為H;
init(int n)
{
int i;
int cipher;
hu L;
if(n>=1)
{
scanf("%d",&cipher);
H=(hu)malloc(sizeof(node));//生成頭結點;
H->number=1;
H->cipher=cipher;
H->next=H;
for(i=1;i<n;i++)
{
scanf("%d",&cipher);
L=(hu)malloc(sizeof(node));//生成副結點;
L->number=i+1;
L->cipher=cipher;
L->next=H->next;
H->next=L;
H=L;
}
H=H->next;//循環單鏈表的生成;
}
else
printf("The N's value that you inputted is invalid!");
}
Joseph(int m,hu h)//進行程序的循環,使順序出列;
{
int i;
hu l;
l==h;
i=1;
while(i!=m)
{
i=i+1;
l=h;
h=h->next;
}
printf("%3d",h->number);
m=h->cipher;
l->next=h->next;
free(h);
h=l->next;
if(h!=l)
Joseph(m,h);
else
{
printf("%3d",h->number);
free(h);
}
}
main()
{
int m;
int n;
int i;
clrscr();
printf("Please input the starting value of M ( the upper limit worth of M ) : ");
scanf("%d",&m);
printf("Please input the man's figure who have a hand in: ");
scanf("%d",&n);
printf("Please input the cipher from number1 to number%d:",n);
init(n);
printf("The order of Dequeue is :");
Joseph(m,H);
}