#include <stdio.h>
#include <stdlib.h>
#include <stdio.h>
#include <stdlib.h>
#define Maxnum 100
#define FALSSE 0
#define TRUE 1
typedef int DateType;
struct SeqList
{
int MAXNUM;
int n;
DateType *element;
};
typedef struct SeqList *PSeqList;
PSeqList creatNullList_seq(int m){
PSeqList palist =(PSeqList)malloc(sizeof(struct SeqList));
if(palist!=NULL){
palist->element =(DateType*)malloc(sizeof(DateType)*m);
if(palist->element){
palist->MAXNUM = m;
palist->n=0;
return palist;
}
else free(palist);
}
printf("out of space!!\n");
return NULL;
}
int deleteP_seq(PSeqList palist,int p)
{
int q;int u;
for(q=p;q<=palist->n-1;q++){
palist->element[q]=palist->element[q+1];
}
palist->n=palist->n-1;
for(u=0;u<palist->n;u++)
{
printf("%d ",palist->element[u]);
}
return 1;
}
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("\n Out element %d\n",w);//元素的列
deleteP_seq(palist,s1);//删除出列的元素
}
}
int insertPre_seq(PSeqList palist,int p,int x)
{
int q;int u;
if(palist->n>=palist->MAXNUM)
{
printf("Overflow/n");
return 0;
}
if(p<0||p>palist->n)
{
printf("Not exit!\n");
return 0;
}
for(q=palist->n-1;q>=p;q--)
{
palist->element[q+1]=palist->element[q];
}
palist->element[p]=x;
palist->n=palist->n+1;
for(u=0;u<palist->n;u++)
{
}
return 1;
}
int main()
{
PSeqList jos_alist;
int i,k;
int n,s,m;
printf(" 请输入参与人数S:\nS=");
scanf("%d",&n);
printf("\n请输入第M人开始报数人:\n \nM=");
scanf("%d",&s);
printf("\n请输入报数第N人后出列 \nN=");
scanf("%d",&m);
jos_alist=creatNullList_seq(n);
if(jos_alist!=NULL){
for(i=0;i<n;i++)
insertPre_seq(jos_alist,i,i+1);
josephus_seq(jos_alist,s,m);
free(jos_alist->element);
free(jos_alist);
}
}
#include <stdlib.h>
#include <stdio.h>
#include <stdlib.h>
#define Maxnum 100
#define FALSSE 0
#define TRUE 1
typedef int DateType;
struct SeqList
{
int MAXNUM;
int n;
DateType *element;
};
typedef struct SeqList *PSeqList;
PSeqList creatNullList_seq(int m){
PSeqList palist =(PSeqList)malloc(sizeof(struct SeqList));
if(palist!=NULL){
palist->element =(DateType*)malloc(sizeof(DateType)*m);
if(palist->element){
palist->MAXNUM = m;
palist->n=0;
return palist;
}
else free(palist);
}
printf("out of space!!\n");
return NULL;
}
int deleteP_seq(PSeqList palist,int p)
{
int q;int u;
for(q=p;q<=palist->n-1;q++){
palist->element[q]=palist->element[q+1];
}
palist->n=palist->n-1;
for(u=0;u<palist->n;u++)
{
printf("%d ",palist->element[u]);
}
return 1;
}
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("\n Out element %d\n",w);//元素的列
deleteP_seq(palist,s1);//删除出列的元素
}
}
int insertPre_seq(PSeqList palist,int p,int x)
{
int q;int u;
if(palist->n>=palist->MAXNUM)
{
printf("Overflow/n");
return 0;
}
if(p<0||p>palist->n)
{
printf("Not exit!\n");
return 0;
}
for(q=palist->n-1;q>=p;q--)
{
palist->element[q+1]=palist->element[q];
}
palist->element[p]=x;
palist->n=palist->n+1;
for(u=0;u<palist->n;u++)
{
}
return 1;
}
int main()
{
PSeqList jos_alist;
int i,k;
int n,s,m;
printf(" 请输入参与人数S:\nS=");
scanf("%d",&n);
printf("\n请输入第M人开始报数人:\n \nM=");
scanf("%d",&s);
printf("\n请输入报数第N人后出列 \nN=");
scanf("%d",&m);
jos_alist=creatNullList_seq(n);
if(jos_alist!=NULL){
for(i=0;i<n;i++)
insertPre_seq(jos_alist,i,i+1);
josephus_seq(jos_alist,s,m);
free(jos_alist->element);
free(jos_alist);
}
}