数据结构入门篇:约夫瑟斯数据环问题

来源:互联网 发布:剑灵灵剑士卡刀宏数据 编辑:程序博客网 时间:2024/06/06 00:15

关于数据结构,在大学本科并未接触,目前才开始接触学习。

关于这个问题,还记得刚刚毕业那会,找工作面试的时候,有一家公司的笔试大题就是约夫瑟斯数据环,然而当时并未接触这个,所以,悲剧了

其实这个很简单,基本上学习了数据结构 之后必然会这个,可谓是数据结构入门的经典之作!

问题描述:

经典Josephus问题:

n个人围坐有个圆桌,从第s个开始报数,报到m的人出列,然后从出列的下一个人继续报数,直到所有人都出列。

对于给定的任意nsm,求按次序出列的n个人的序列。

知识储备:线性表(顺序表,单链表,双链表,循环链表)

顺序表解法:

#define Maxnum 100

#define FALSE  0

#define TRUE   1

typedef int DataType;

void josephus_seq(PSeqList palist,int s,int m)

{

int s1,i,w;

s1=s-1;

for(i=palist->n;i>0;i--)

{

s1=(s1+m-1)%i;

w=palist->element[s1];    //求出下标为S1的元素的值

printf("Out element!");   //元素出列

delete_seq(palist,s1);    //删除出列的元素

}

}

main()

{

PSeqList jos_alist;

int i,k,n,s,m;

printf("\n please input the value(<100)of n =");

scanf("%d",&n);

printf("please input the values of s=");

scanf("%d",&s);

printf("please input the values of m=");

scanf("%d",&m);

jos_alist=createNullList_seq(n);           //创建新的空顺序表

if (jos_alist!=Null)

{

for(i=0;i<n;i++)                    //线性表赋值        

insertpre_seq(jos_alist,i,i+1);

insertpre_seq(jos_alist,s,m);

free(jos_alist->element);

free(jos_alist);

}

}



约夫瑟斯数据环问题就到这了,后续还将继续学习数据结构,陆续更新ING;

Thanks for your reading.