大家好,小东方来为大家解答以上的问题。约瑟夫问题分析,约瑟夫问题这个很多人还不知道,现在让我们一起来看看吧!

1、//约瑟夫环://这个程序有点小问题,你自己看看吧,现在没时间改了。
2、起始位置有点问题#include#include int flag;typedef struct node{int data; struct node *next;}LNode,* Linklist;Linklist CreatFromHead() //链表的初始化{ Linklist L=NULL,s; LNode *r=NULL; int x=1;s=(Linklist)malloc(sizeof(LNode));L = s;r= L; printf("请输入请输入报数的人数"); scanf_s("%d",&flag); while(x!=flag+1) {s=(Linklist)malloc(sizeof(LNode)); s->data=x; r->next=s; r=s; x++; } s->next=L; if(r!=NULL) r->next=NULL; return L;}Linklist Getlist(Linklist L,int i) //链表的查找函数 {Linklist p;int j; p=L;j=0; while(p->next!=NULL&&jnext; j++; } if(i==j)return p; else return NULL; }Linklist treat(Linklist L,Linklist s,int k,int i) //约瑟夫环算法 { int j=0; if(s==NULL){ s=L->next;} while(jnext; j++; if(s==NULL){ s=L->next;} } return s; }int Del_Linklist(Linklist L,Linklist p) //链表结点删除函数{Linklist s;s=L;while((s->next->data != p->data)) { s=s->next; } s->next=s->next->next; free(p);return 1;} void main() //主函数{Linklist L; Linklist p,s;int i,k,m,n;L=CreatFromHead();printf("请输入查找的元素位置");scanf_s("%d",&i);printf("请输入相隔的位置:");scanf_s("%d",&k); m=0;s=Getlist(L,i);printf(".");while(mdata); s=p->next; n=Del_Linklist(L,p); m++;}}。
本文到此分享完毕,希望对大家有所帮助。
免责声明:本文由用户上传,如有侵权请联系删除!