约瑟夫环(链表实现)

来源:互联网 发布:vmware网络nat 编辑:程序博客网 时间:2024/05/16 06:19
#include <stdio.h>#include <stdlib.h>typedef struct node *link;struct node{unsigned char item;    link next;};static link head = NULL;link make_node(unsigned char item){    link p = (struct node *)malloc(sizeof(*p));    p ->item = item;p ->next = NULL;    return p;}void insert(link p){p ->next = head;    head = p;}void traverse(void (*visit)(link)){link p;for(p = head; p; p = p ->next)        visit(p);}void print_item(link p){printf("%d\n",p ->item);}int main(void){int i,m;    link p = NULL;for(i = 10; i > 0; i--){        p = make_node(i);insert(p);    }    for(p = head; p ->next; p = p ->next);p ->next = head;//环形链表//  traverse(print_item);    printf("Please input the number you want to kick out:\n");scanf("%d",&m);p = head;printf("The kick order was:\n");link q = NULL;while(p ->next != p)    {for(i = 1; i < m - 1; i++)        {            p = p ->next;}        q = p ->next;p ->next = q ->next;printf("%d ",q->item);free(q);        p = p ->next;    }printf("\nThe last one was:\n%d\n",p ->item);    free(p);    head = NULL;return 0;}

原创粉丝点击