#include <stdio.h>
#include <stdlib.h>
typedef struct SingleCycleLinkTable{
int data;
struct SingleCycleLinkTable * next;
}SingleCycleLinkTable;
SingleCycleLinkTable * initSingleCycleLinkTable(int n){
SingleCycleLinkTable * head = (SingleCycleLinkTable*)malloc(sizeof(SingleCycleLinkTable));
head->data = 0;
head->next = NULL;
SingleCycleLinkTable * temp = head;
for(int i = 1;i <= n; i ++){
SingleCycleLinkTable * body = (SingleCycleLinkTable*)malloc(sizeof(SingleCycleLinkTable));
body->data = i;
body->next = NULL;
temp->next = body;
temp = temp->next;
}
temp->next = head;
return head;
}
void findAndKillK(SingleCycleLinkTable * head, int k, int m){
SingleCycleLinkTable * tail = head;
while(tail->next != head){
tail = tail->next;
}
SingleCycleLinkTable * p = head;
while(p->data != k){
tail = p;
p = p->next;
}
while(p->next != p){
for(int i = 1;i < m; i ++){
tail = p;
p = p->next;
}
tail->next = p->next;
printf("outer number is : %d\n", p->data);
free(p);
p=tail->next;
}
printf("outer number is : %d\n", p->data);
free(p);
}
int main(){
printf("input disk person number: ");
int n;
scanf("%d", &n);
SingleCycleLinkTable * head = initSingleCycleLinkTable(n);
printf("call number from k(k>1&&k<%d):", n);
int k;
scanf("%d", &k);
printf("out the line which call m:");
int m;
scanf("%d", &m);
findAndKillK(head, k, m);
return 0;
}
C语言数据结构学习——循环链表实现约瑟夫环
最新推荐文章于 2021-05-17 13:32:52 发布