(C语言)用静态链表求解约瑟夫问题。
发布网友
发布时间:2022-06-03 11:30
我来回答
共1个回答
热心网友
时间:2023-10-16 23:15
#include
"stdio.h"
//
#include
"conio.h"
#include
"stdlib.h"
#define
MAX
100
typedef
struct
nodes
{
int
data;
nodes*
next;
}Lnode;
/*静态链表节点结构体定义
*/
//
typedef
struct
list
//
{
//
Lnode
node[MAX];
//
int
head;
//
}List,*PList;
void
InitList(Lnode*
pHead,int
n)/*n为节点数
*/
{
pHead->data
=
0;
Lnode*
pPre
=
pHead;
for(int
i=1;
i<n;
++i)
{
Lnode
*pTemp
=
(Lnode*)malloc(sizeof(Lnode));
pTemp->data
=
i;
pPre->next
=
pTemp;
pPre
=
pTemp;
if
(i
==
n-1)
{
pTemp
->next
=
pHead;
}
}
}
void
Searchnode(Lnode
*pHead,
int
n)/*m为报数,n为节点数,start为初始报数序号*/
{
Lnode*
pNext
=
pHead;
Lnode*
pPreNode
=
NULL;
while
(1)
{
for(int
i=0;
i<
n;
++i)
{
pPreNode
=
pNext;
pNext
=
pNext->next;
}
printf("delete:
%d
",pNext->data);
if
(pPreNode->next
==
pNext->next)
{
break;
}
pPreNode->next
=
pNext->next;
free((void
*)pNext);
pNext
=
pPreNode->next;
}
}
void
main()
{
int
i;
int
n=10,start=1;
Lnode*
pHeadNode
=
(Lnode*)malloc(sizeof(Lnode));
InitList(pHeadNode,
n);
Lnode*
pNext
=
pHeadNode;
for
(i=0;i<10;
++i)
{
printf("%d
",
pNext->data);
pNext
=
pNext->next;
}
printf("请输入一个数
");
scanf("%d",
&n);
n
%=
10;
Searchnode(pHeadNode,
n);
getchar();
//
printf("Hello,
world
");
}