摘要 大家好,飞飞今天来为大家解答以下的问题,关于约瑟夫环问题c++代码,约瑟夫环这个很多人还不知道,那么下面让我带着大家一起来看看吧!1、/*...
大家好,飞飞今天来为大家解答以下的问题,关于约瑟夫环问题c++代码,约瑟夫环这个很多人还不知道,那么下面让我带着大家一起来看看吧!
1、/*josephus_clist.c*//*Josephus问题:循环链接表实现*/#include #include #define FALSE 0#define TRUE 1typedef int DataType; /* 定义元素类型为整型,也可定义为其他类型 */struct Node; /* 单链表结点类型 */typedef struct Node *PNode; /* 结点指针类型 */struct Node /* 单链表结点结构 */{ DataType info; PNode link;};typedef struct Node *LinkList;typedef LinkList *PLinkList;int init_clist( PLinkList pclist, int n )/* 用1,2。
2、……,n为*pclist所示的循环表初始化 */{ PNode p,q; int i; q = (PNode)malloc( sizeof( struct Node ) ); if ( q == NULL ) return ( FALSE ); *pclist=q; q->info = 1; q->link = q; if (n==1) return (TRUE); for(i=2;iinfo=i; p->link=q->link; q->link=p; q=p; }return (TRUE);}void josephus_clist( PLinkList pclist, int s,int m ){PNode p,pre;int i;p=*pclist; /* 找第s个元素 */if (s==1){pre =p; p=p->link; while (p!=*pclist) { pre =p; p=p->link; }}else for(i=1;ilink; }while (p!=p->link) /* 当链表中结点个数大于1时 */{ for (i=1;ilink; } printf(“ out element: %d ”,p->info); /* 输出该结点 */ if (*pclist ==p) /* 该结点是第一个结点时,删除时需特殊处理一下 */ *pclist =p->link; pre->link = p->link; /* 删除该结点 */ free(p); p = pre->link; }printf(“ out element: %d ”,p->info); /* 输出最后一个结点 */*pclist=NULL;free(p);}main( ){LinkList jos_clist;int n,s,m;/* 输入所需各参数的值 */do{ printf(“ please input the values of n = “); scanf(“%d”,&n); }while (n<1);do{ printf(“ please input the values of s = “); scanf(“%d”,&s); }while (s<1);do{ printf(“ please input the values of m = “); scanf(“%d”,&m); }while (m<1);if (init_clist(&jos_clist,n)) josephus_clist(&jos_clist,s,m);else printf(“Out of space!”);}。
本文分享完毕,希望对大家有所帮助哦。