zoukankan      html  css  js  c++  java
  • 用单循环链表实现约瑟夫问题。

    约瑟夫问题是个有名的问题:N个人围成一圈,从第一个开始报数,第M个将被杀掉,最后剩下一个,其余人都将被杀掉。例如N=6,M=5,被杀掉的人的序号为5,4,6,2,3。最后剩下1号。

    #include <stdio.h>
    #include <stdlib.h>
    #include "declear.h"
    
    typedef struct Node
    {
    	ElemType data;
    	struct Node *next;
    }Node, *CycLinkList;
    
    void JOSEPHUS(int totalNum, int startNum, int interval)
    {
    	int index;
    	CycLinkList node;
    	CycLinkList temPtr;
    	CycLinkList temPriorPtr;
    
    /*建立一个无头结点的循环链表*/
    	CycLinkList L = (CycLinkList)malloc(sizeof(Node));
    	L->data = 1;
    	L->next = L;
    	temPtr = L;
    
    	for (index = 2; index <= totalNum; index++)
    	{
    		node = (CycLinkList)malloc(sizeof(Node));
    		node->data = index;
    		temPtr->next = node;
    		node->next = L;
    		temPtr = node;
    	}
    	
    	temPtr = L;
    
    	/*找到起始位置*/
    	for (index = 1; index < startNum; index++)
    	{
    		temPriorPtr = temPtr;
    		temPtr = temPtr->next;
    	}
    
    	while (temPtr != temPtr->next)
    	{
    		/*从起始位置开始找到报数为interval的位置*/
    		for (index = 1; index < interval; index++)
    		{
    			temPriorPtr = temPtr;
    			temPtr = temPtr->next;
    		}
    		printf("%d
    ",temPtr->data);
    
    		/*从循环链表中删除该点*/
    		temPriorPtr->next = temPtr->next;
    		free(temPtr);
    
    		/*更新起始位置*/
    		temPtr = temPriorPtr->next;	
    	}
    	
    }
    
    
    
    int main()
    {
    	JOSEPHUS(9,2,4);
    	return 0;
    }
    


     

  • 相关阅读:
    abcde =(ab+cd)的平方
    求水仙花数
    VS2019 开发 MFC ACtivex (OCX)控件
    简单体验pdfjs,并且隐藏下载、打印等按钮
    体验win10的linux子系统
    nodejs 连接 mysql 查询事务处理
    Linux系統日常運維管理
    hexo豆瓣卡片安裝遇到的坑
    ZooKeeper 是什么与概述,典型用例
    K8S_Kubernetes
  • 原文地址:https://www.cnblogs.com/james1207/p/3310479.html
Copyright © 2011-2022 走看看