#include <stdio.h>
#include <stdlib.h>
#include "josephus.h"
int main()
{
int jose[] = {1,2,3,4,5,6,7,8};
Clinklist cycle = create_array_clink(jose, 8);
print_clink(cycle);
josephus(cycle, 1, 1);
return 0;
}
#ifndef _SEQSTRING_H_
#define _SEQSTRING_H_
typedef int DataType;
struct node;
typedef struct node* Pnode;
struct node
{
DataType info;
Pnode next;
};
typedef struct node* Clinklist;
Clinklist create_null_clink(void);
Clinklist create_array_clink(DataType jose[], int n);
void print_clink(Clinklist clist);
int is_null_clink(Clinklist clist);
void josephus(Clinklist clist, int s, int m);
#endif // _SEQSTRING_H_
#include "josephus.h"
#include <stdlib.h>
Clinklist create_null_clink(void)
{
Clinklist clist;
clist = (Clinklist)malloc(sizeof(struct node));
clist->next = clist;
return clist;
}
Clinklist create_array_clink(DataType jose[], int n)
{
Clinklist clist = create_null_clink();
Pnode p;
p = clist;
Pnode q;
for(int i = 0; i < n; i++){
q = (Pnode)malloc(sizeof(struct node));
q->info = jose[i];
p->next = q;
p = p->next;
}
q->next = clist;
return clist;
}
int is_null_clink(Clinklist clist)
{
return clist == clist->next;
}
void print_clink(Clinklist clist)
{
Pnode p;
p = clist->next;
while(p != clist){
printf("%d ", p->info);
p = p->next;
}
printf("\n");
}
void josephus(Clinklist clist, int s, int m)
{
Pnode pre;
Pnode p = clist;
for(int i = 1; i < s; i++)
p = p->next;
while(!is_null_clink(clist)){
for(int i = 0; i < m; i++){
pre = p;
p = p->next;
if(p == clist){
pre = p;
p = p->next;
}
}
printf("%d-->", p->info);
pre->next = p->next;
free(p);
p = pre;
}
}