使用顺序结构完成约瑟夫问题
#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--;
}