#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;
}
约瑟夫环(链表实现)
最新推荐文章于 2024-07-22 20:42:27 发布