使用顺序结构完成约瑟夫问题
#include
<stdio
.h
>
#include
<stdlib
.h
>
#include
<malloc
.h
>
#define
MAXSIZE 10
typedef int DataType
;
typedef struct
{
DataType data
[MAXSIZE];
int length
;
}SqList
;
void InitSqList(SqList
*L);
void ShowSqList(SqList
*L);
void Josephus(SqList
*L,int m
,int k
);
void DeleteSqList(SqList
*L,int index
);
void main()
{
SqList
L;
InitSqList(&L);
ShowSqList(&L);
Josephus(&L,4,3);
}
void InitSqList(SqList
* L)
{
int i
= 0;
L->length
= MAXSIZE;
for(i
= 0;i
< L->length
;i
++)
{
L->data
[i
] = i
+ 1;
}
}
void Josephus(SqList
*L,int m
,int k
)
{
int i
,j
,s
;
int index
;
for(i
= 0;i
< k
;i
++);
index
= i
- 1;
while(L->length
!= 1)
{
index
= (index
+ m
- 1) % L->length
;
printf("%d号淘汰!\n",L->data
[index
]);
DeleteSqList(L,index
);
}
printf("\n%d号胜出!",L->data
[0]);
}
void ShowSqList(SqList
*L)
{
int i
;
for(i
= 0; i
< L->length
;i
++)
{
printf("%d\t",L->data
[i
]);
}
printf("\n");
}
void DeleteSqList(SqList
*L,int index
)
{
int j
;
int local
= index
+ 1;
if(L->length
== 0)
{
printf("顺序表为空,删除失败!");
}
if(local
< 1 || local
> L->length
)
{
printf("删除位置不合法!");
exit(1);
}
for(j
= local
;j
< L->length
;j
++)
{
L->data
[j
-1] = L->data
[j
];
}
L->length
--;
}
转载请注明原文地址: https://yun.8miu.com/read-109745.html