约瑟夫环问题-数据结构实现代码

上传人:nu****n 文档编号:103049435 上传时间:2022-06-08 格式:DOC 页数:5 大小:19.51KB
返回 下载 相关 举报
约瑟夫环问题-数据结构实现代码_第1页
第1页 / 共5页
约瑟夫环问题-数据结构实现代码_第2页
第2页 / 共5页
约瑟夫环问题-数据结构实现代码_第3页
第3页 / 共5页
点击查看更多>>
资源描述
以下是约瑟夫环问题的实现代码:由两部分组成jeseph.h文件和jesephMain.c文件jeseph.h文件如下:/*自定义DataType数据类型*/ typedef structint number;/每个人所对应的序号 int cipher;/每个人手中的密码 DataType;/*构造循环单链表结点数据类型,包括个人信息及结点间的相互关系*/typedef struct node DataType data; struct node *next;SCLNode;void SCLLInitiate(SCLNode *head)/初始化链表 if(*head = (SCLNode *)malloc(sizeof(SCLNode)=NULL) exit(1); (*head)-next = *head;int SCLLInsert(SCLNode *head,int i,DataType x)/插入节点 SCLNode *p,*q; int j; p = head-next; j =1; /*表示结点(头结点)下标从1开始,即要插入结点的序号i就表示第几个结点 若j=-1,则表示下标从0开始,要插入结点序号i表示第i-1个结点 */ while(p!=head&jnext; j+; if(j!=i-1&i!=1) /*此时头结点的序号为1, 为了保证不在头结点处或头结点前进行任何操作*/ printf(插入位置参数错!); return 0; if(q = (SCLNode *)malloc(sizeof(SCLNode)=NULL) exit(1); q-data = x; q-next = p-next; p-next = q; return 1;int SCLLDelete(SCLNode *head,int i,DataType *x)/删除一个指定位置的结点 SCLNode *p,*q; int j; p = head; j=0; while(p-next!=head&jnext; j+; if(j!=i-1) printf(删除位置参数出错); return 0; q = p-next; p-next = p-next-next; *x = q-data; free(q); return 1;int SCLLGet(SCLNode *head,int i,DataType *x)/获取链表中指定位置的结点 SCLNode *p; int j; p = head; j = 0; while(p-next!=head&jnext;j+; if(j!=i) printf(取元素位置参数错!); return 0; *x = p-data; return 1;int SCLLNotEmpty(SCLNode *head)/判断链表非空否 if(head-next = head) return 0; /为空返回0 else return 1; /非空返回1 jesephMain.c文件如下:#include#include#includejeseph.h /*包含jeseph抽象数据类型 */void SCLLDeleteAfter(SCLNode *p)/删除 p指针所指结点的下一个结点 SCLNode *q=p-next; p-next=p-next-next; free(q); /将链表中断开后的节点,即要删除的节点从内存中释放 void JesephRing(SCLNode *head,int m,int n) /*带头结点循环单链表 head,初始报数值为 m的约瑟夫环问题函数*/ SCLNode *pre,*curr; int i,j=0; int an,bn;/n表示约瑟夫环数的个数 pre=head; curr=head-next; while(SCLLNotEmpty(head)=1) for(i=1;inext; if(curr=head) pre=curr; curr=curr-next; /*将出列约瑟夫环数的序号及其所对应的密码放在b,a中*/ bj=curr-data.number; aj=curr-data.cipher; j+; m=curr-data.cipher; curr=curr-next; if(curr=head) curr=curr-next; SCLLDeleteAfter(pre); /*分别输出ai和bi*/ printf(约瑟夫环的先后出列顺序为:); for(i=0;ij;i+) printf( %d号 ,bi); printf(nn各出列序号所对应的密码: ); for(i=0;ij;i+) printf( %d ,ai); void main() DataType test7=1,1,2,10,3,7,4,2,5,9,6,8,7,6; int n=7,m=20,i; SCLNode *head; SCLLInitiate(&head); for(i=1;i=n;i+) SCLLInsert(head,i,testi-1); JesephRing(head,m,n); printf(nn);
展开阅读全文
相关资源
相关搜索

最新文档


当前位置:首页 > 机械制造 > 电气技术


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!