转载: 约瑟夫环 循环链表 必备「建议收藏」

转载: 约瑟夫环 循环链表 必备

大家好,又见面了,我是全栈君。

http://blog.csdn.net/gggg_ggg/article/details/42965853

  1. /********************************************************************  
  2. created:2015年1月20日 23:06:46     
  3. author: Jackery      
  4. purpose: Joseph problem  
  5. *********************************************************************/    
  6. #include”stdafx.h”  
  7. #include<iostream>  
  8. using namespace std;  
  9.   
  10. typedef struct _Node  
  11. {  
  12.     int data;  
  13.     struct _Node*next;  
  14. } node_t;  
  15.   
  16. typedef struct _Linklist  
  17. {  
  18.     node_t*phead;  
  19.     node_t*ptail;  
  20.     int len;  
  21. }Linklist;  
  22. static node_t*GetNode(int i )//新建并初始化节点  
  23. {  
  24.     node_t*pNode;  
  25.     pNode=new node_t;  
  26.     if(!pNode)  
  27.     {  
  28.         cout <<“内存分配失败” <<endl;  
  29.         exit(-1);  
  30.     }  
  31.     pNode->data=i;  
  32.     pNode->next=NULL;  
  33.     return pNode;  
  34.     delete pNode;  
  35. }  
  36. void init_list(Linklist*plist)//用第一个节点初始化循环单链表  
  37. {  
  38.     node_t*p;  
  39.     p=GetNode(1);  
  40.     //printf(“TheNewNodeis:%d\n”,p->data);//****TEST****  
  41.     plist->phead=p;  
  42.     plist->ptail=p;  
  43.     p->next=plist->phead;  
  44.     plist->len=1;  
  45. }  
  46.   
  47. //把其余数据添加到循环单链表中  
  48. static void Create_List(Linklist*plist,int n)  
  49. {  
  50.     int i=0;  
  51.     node_t*pNew;  
  52.     for(i=2;i<=n;i++)  
  53.     {  
  54.         pNew=GetNode(i);  
  55.         /********TEST********  
  56.         cout <<“The New Node is:” <<pNew->data << endl;  
  57.         ********TEST********/  
  58.         plist->ptail->next=pNew;  
  59.         plist->ptail=pNew;  
  60.         pNew->next=plist->phead;  
  61.         plist->len++;  
  62.     }  
  63. }  
  64. //输出链表内容  
  65. // void Print_List(Linklist*plist)  
  66. // {  
  67. //  node_t*pCur=plist->phead;  
  68. //  do  
  69. //  {  
  70. //      cout << “The “<<  pCur->data <<“person.”  <<endl;  
  71. //      pCur=pCur->next;  
  72. //  }while(pCur!=plist->phead);  
  73. //  cout << “The length of the List “<< plist->len<< endl;;  
  74. // }  
  75.   
  76. //Joseph function implement  
  77. void joseph(Linklist* plist,int m,int k)  
  78. {    
  79.     node_t *pPre=plist->ptail;  
  80.     node_t *pCur=plist->phead;  
  81.     int i,j;  
  82. cout << “出队列的顺序依次为: “<< endl;  
  83.     while(plist->len != 1)  
  84.     {  
  85.         i=0;  
  86.         j=0;  
  87.         while(j<k-1)  
  88.         {  
  89.             pPre=pPre->next;  
  90.             j++;  
  91.         }  
  92.         while(i< m -1)  
  93.         {  
  94.             pPre=pPre->next;  
  95.             i++;  
  96.         }  
  97.         pCur=pPre->next;  
  98.         int temp=pCur->data;  
  99.         cout <<“第 ” << temp << ”  个人 “<< endl ;  
  100.         pPre->next=pCur->next;  
  101.         free(pCur);  
  102.         plist->len–;  
  103.     }  
  104.     cout <<“第 ” << pPre->data << ” 个人” << endl; ;  
  105.     cout << “The last one is:” << pPre->data<< endl;  
  106. }  
  107. int main(int argc, char * argv[])  
  108. {  
  109.     int n=0;  
  110.     cout <<“约瑟夫环长度为 : “<<endl;;  
  111.     cin >> n;  
  112.     int m=0;  
  113.     cout << “每此数到m个时,此人出列”<<endl;  
  114.     int k;  
  115.     cin >> k;  
  116.     cout << “从第k 个开始数” << endl;  
  117.     cin >>m;  
  118.     Linklist pList;  
  119.     init_list(&pList);  
  120.     Create_List(&pList,n);  
  121. //  Print_List(&pList);  
  122.     joseph(&pList,m,k);  
  123.     return 0;  
  124. }  

转载于:https://www.cnblogs.com/eat-too-much/p/6550458.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/108621.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Java菜鸟教程 标识符

    Java菜鸟教程 标识符笔者作为一名Java新手,在跟随教程的学习过程中首先接触到的,是标识符。标识符,英文名identifier,词根是identity。顾名思义,它的作用就是给变量、类和方法命名。标识符只能以字母,下划线以及美元符号$开头。如:intabc = 3int$=9int _123=4但是,标识符不能包含除了数字,字母,下划线以及美元符号$之外的其他字符,否则

    2022年6月3日
    40
  • 全面理解Java内存模型

    Java内存模型即JavaMemoryModel,简称JMM。JMM定义了Java虚拟机(JVM)在计算机内存(RAM)中的工作方式。JVM是整个计算机虚拟模型,所以JMM是隶属于JVM的。如果我们要想深入了解Java并发编程,就要先理解好Java内存模型。Java内存模型定义了多线程之间共享变量的可见性以及如何在需要的时候对共享变量进行同步。原始的Java内存模型效率并不是很理想,因此Jav

    2022年4月6日
    40
  • android 封装网络框架(java企业自己封装的框架)

    Android网络框架OKGo封装本文讲述了Android网络框架OKGo封装,封装的框架适用于项目当中,适合新手操作,OKGO框架本身就以简单易上手而深受喜欢,而此文就是基于框架之上再次封装,废话不多说,直接开始吧!首先在我们的build.gradle中导入我们引用的框架dependencies{…implementation’com.lzy.net:okgo:3.0.4’i…

    2022年4月12日
    65
  • 计算机发展史_计算机发展史感悟

    计算机发展史_计算机发展史感悟转载地址:https://www.jianshu.com/p/6fb655c286bc一、史前时代【1623——1895】1623年:德国科学家契克卡德(W.Schickard)制造了人类有史以来第一台机械计算机,这台机器能够进行六位数的加减乘除运算。1642年:法国科学家帕斯卡(B.Pascal)发明了著名的帕斯卡机械计算机,首次确立了计算机器的概念。…

    2022年10月19日
    1
  • UltraEdit Crack,完全集成的编辑和数据管理工具

    UltraEdit Crack,完全集成的编辑和数据管理工具UltraEditCrack,完全集成的编辑和数据管理工具  UltraEditAllAccess订阅许可证(原IDMAllAccess订阅)为您提供世界领先的文件管理解决方案,从文件的创建到最终的存储、停用和删除,UltraEditAllAccess是一个集成的、端到端的数百万人信赖的解决方案。在UltraEdit或UEStudio中开发您的文本。使用UltraCompare查找和管理差异。使用UltraFinder快速查找丢失的文件或您需要的确切字符串,并使用

    2025年7月26日
    2
  • 匈牙利命名法[通俗易懂]

    匈牙利命名法[通俗易懂]匈牙利命名法:广泛应用于象MicrosoftWindows这样的环境中。Windows编程中用到的变量(还包括宏)的命名规则匈牙利命名法,这种命名技术是由一位能干的Microsoft程序员查

    2022年7月2日
    32

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号