C语言用链表解决约瑟夫问题

来源:互联网 发布:寝室抢网速软件 编辑:程序博客网 时间:2024/05/24 07:45
#include<stdio.h>#include<malloc.h>#define LPRO sizeof(struct Pro)struct Pro *create(int x);    // 建表,x表示总人数struct Pro *print(struct Pro *head, int x); // 打印目标节点,传入头指针和总人数struct Pro *delet(struct Pro *pre, struct Pro *p); // 删除目标节点,传入目标节点前驱和目标节点struct Pro{int num;struct Pro *next;};int main(){struct Pro *head;head = create(41);  // 建立有41个节点的单链表print(head, 41);// 打印目标节点return 0;}struct Pro *create(int x) // 建表,x表示总人数{int i = x;struct Pro *head, *p, *tail;head = (struct Pro *)malloc(LPRO);head = NULL;do{p = (struct Pro *)malloc(LPRO);p->num = i;if(i == x){tail = p;}i--;p->next = head;head = p;}while(i);tail->next = p;return tail;}struct Pro *print(struct Pro *head, int x)// 打印目标节点,传入头指针和总人数{int i;struct Pro *p, *pre;p = head;while(x){for(i = 0; i < 3; i++)    // 寻找目标节点{pre = p;p = p->next;}printf("%-4d", p->num);p = delet(pre, p);// 删除目标节点x--;}return 0;}struct Pro *delet(struct Pro *pre, struct Pro *p)  // 删除目标节点,传入目标节点前驱和目标节点 {pre->next = p->next;free(p);return pre;}

0 0
原创粉丝点击