约瑟夫环

来源:互联网 发布:预防网络诈骗手抄报 编辑:程序博客网 时间:2024/05/29 13:23
#include<stdio.h>
#include<malloc.h>#define size sizeof(link)#define null 0typedef struct link  {      int num;      struct link *pre;      struct link *next;  }link;  link *current = null;link *q = null;link *head = null;int main(){int n,m,p,i,count;scanf("%d %d %d",&n,&m,&p);for(i=1;i<=n;i++){q = (link*)malloc(size);          q->num = i;  if(i==p){head = q;}        if(current == null)          {              current = q;              current->next = q;              current->pre = q;          }          else          {              q->next = current->next;              current->next->pre = q;                current->next = q;              q->pre = current;              current = q;  }}count = m-1;for(i=0;i<n;i++){while(count--){head=head->next;}printf("%d ",head->num);head->pre->next=head->next;head->next->pre=head->pre;count = m;}return 0;}
一开始打算用循环做的,结果删除的时候卡了...
换成双向循环之后,感觉到了世界的美丽。
0 0
原创粉丝点击