用数据结构的循环连表解决约瑟夫环!各位大虾~帮帮忙啊!救命啊!

来源:百度知道 编辑:UC知道 时间:2024/06/04 16:51:40
设n个人围成一个圆圈,按一指定方向,从第s个人开始报数,报数到m为止,报数为m的人出列,然后从下一个人开始重新报数,报数为m的人又出列......知道所有的人全部出列为止!
约瑟夫环 问题要对任意给定的n,s,m 求按出列次序得到的人员顺序表!

struct stCircleList
{
int no;
stCircleList * pNext;
};

#define MAXSUM 100
#define THE_MVALUE 46

void xProc()
{ //以下为程序判断
// 表头指针
stCircleList* pNodeFirst = NULL, *pNodeCur = NULL;

// 构建链表数据
for ( int i = 1 ; i <= MAXSUM; i ++ )
{
stCircleList * pNewNode = new stCircleList;
// 按照顺序编号
pNewNode->no = i;
pNewNode->pNext = NULL;
if ( NULL == pNodeFirst)
pNodeFirst = pNewNode;
else
pNodeCur->pNext = pNewNode;

pNodeCur = pNewNode;
}

// 结成循环链表
pNodeCur ->pNext = pNodeFirst;

// 必须保证循环计数>0,防止死循环
// 索引从1 而不是从 0计的
VERIFY ( int ( THE_MVALUE) > 0 );

//pNodeCur = pNodeFirst;
while ( 1 )
{
for ( int i = 0 ; i < THE_MVALUE - 1; i ++ )
{
pNodeCur = pNodeCur->pNext;
}
stCircleList * pBeDelNode = pNodeCur->pNext;