您的位置:首页 > 其它

链表练习:约瑟夫环

2013-10-09 19:55 197 查看
链表练习:约瑟夫环(VC下调试成功)

Mark:以前一直是用数组进行模拟的,今天刚学链表,于是就写了一个简易版的..................

#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;

link q = NULL;

printf("The kick out order was:\n");

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("\n");

printf("The last one was:\n");

printf("%d\n",p ->item);

free(p);

head = NULL;

return 0;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: