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

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

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

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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • python十大框架_python 十大web框架排名总结

    python十大框架_python 十大web框架排名总结0引言python在web开发方面有着广泛的应用。鉴于各种各样的框架,对于开发者来说如何选择将成为一个问题。为此,我特此对比较常见的几种框架从性能、使用感受以及应用情况进行一个粗略的分析。1DjangoDjango是一个开放源代码的Web应用框架,由Python写成。采用了MTV的框架模式,即模型M,模板T和视图V。它最初是被开发来用于管理劳伦斯出版集团旗下的一些以新闻内容为主的网站的,即是C…

    2022年5月25日
    252
  • 小技巧两个感叹号(两个!)连用

    小技巧两个感叹号(两个!)连用

    2021年11月8日
    287
  • SQL语句多表连接查询语法

    SQL语句多表连接查询语法总结:内连接就是两个表的交集,左外连接就是左边表加两表交集,右外连接就是右边表加两表交集一、外连接1.左连接leftjoin或leftouterjoinSQL语句:select*fromstudentleftjoinscoreonstudent.Num=score.Stu_id;2.右连接rightjoin或r…

    2022年5月3日
    754
  • 《深入浅出Python机器学习》读书笔记 第一章 概述

    《深入浅出Python机器学习》读书笔记 第一章 概述《深入浅出Python机器学习》读书笔记,第一章概述

    2022年8月31日
    1
  • wireshark怎么抓包保存_wireshark保存抓包信息

    wireshark怎么抓包保存_wireshark保存抓包信息wireshark抓包使用wireshark抓包分析-抓包实用技巧前言本文整理一下日常抓包使用的一些方法及抓包分析的一些方法。本文基于wireshark2.2.6版本进行抓包处理。其他版本使用方式大同小异。自定义捕获条件wireshark可以将抓包数据保存到硬盘上。若需要长时间抓包的话,需要防止内存过大,因此一般需要指定一定大小切包,释放内存。在捕获-选项菜单中可以设置捕获包的一些配置。输入配置在…

    2022年9月6日
    5
  • 使用MySQL实现分页查询[通俗易懂]

    使用MySQL实现分页查询[通俗易懂]本文关键字:MySQL、分页查询、真分页、假分页、LIMIT。在项目开发当中,经常要实现分页功能,在面试时也会经常被问到:什么是分页。这是因为在一个页面上能够显示的数据是有限的,而存放在数据库中的数据往往很多,我们必须将这些数据安放到不同的页面中去。

    2022年6月29日
    23

发表回复

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

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