首页 > 代码库 > 约瑟夫问题
约瑟夫问题
额,直接上代码:
typedef struct Node { int data; struct Node *next; }Node; void circle_init(Node *head, const int len); void circle_kill(Node *head, int num, const int len); void circle_print(Node *head); void circle_des(Node *head); int main() { int len; int num; Node head = {0, &head}; printf("输入人数:"); scanf("%d", &len); circle_init(&head, len); circle_print(&head); printf("输入num:"); scanf("%d", &num); circle_kill(&head, num, len); //circle_des(&head); return 0; } void circle_init(Node *head, const int len) { int i = 0; Node *p = head; for(i=0; i<len; i++) { p->next = (Node *)malloc(sizeof(Node)); p = p->next; p->data = http://www.mamicode.com/i + 1; p->next = head->next; } } void circle_kill(Node *head, int num, const int len) { Node *p = head->next; Node *temp = NULL; int left = len; int i = 0; do { num = num % left; for(i=1; i<num-1; i++) { p = p->next; } temp = p->next; p->next = temp->next; p = temp->next; printf("%d ", temp->data); free(temp); left -= 1; }while(left != 1); printf("%d ", p->data); free(p); head->next = head; } void circle_print(Node *head) { Node *p = head->next; printf("链表:\n"); do { printf("%d ", p->data); p = p->next; }while(p != head->next); printf("\n"); } void circle_des(Node *head) { Node *p = head->next; Node *temp = NULL; do { temp = p->next; free(p); p = temp; }while(p->next != head->next); free(p); head->next = head; }
约瑟夫问题
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。