日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

约瑟夫环之循环链表实现

發布時間:2025/6/15 编程问答 19 豆豆
生活随笔 收集整理的這篇文章主要介紹了 约瑟夫环之循环链表实现 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

約瑟夫環是一個數學的應用問題:已知n個人(以編號1,2,3...n分別表示)圍坐在一張圓桌周圍。從編號為k的人開始報數,數到m的那個人出列;他的下一個人又從1開

報數,數到m的那個人又出列;依此規律重復下去,直到圓桌周圍的人全部出列。現編寫循環鏈表程序來實現約瑟夫環問題并輸出每次出列的結果~

用循環鏈表模擬此過程即可:1、建表;2、模擬出列規則。

下面還是老套路,直接貼上源碼+注釋~

Code:

[cpp]?view plaincopyprint?
  • #include<iostream>??
  • using?namespace?std;??
  • ??
  • typedef?struct?List??
  • {??
  • ????int?data;??
  • ????struct?List?*next;??
  • }List,?*Lnode;??
  • ??
  • void?Josephus(int?n,?int?k,?int?m)//n:有n個人,編號1-n;k:從編號為k的人開始報數;m:數到m的人出列。??
  • {??
  • ????Lnode?first,?now,?pre,?temp;//first:頭節點;now:始終代表當前指針位置;pre:now的前驅節點;temp:新創建的節點。??
  • ????//創建一個節點的循環鏈表??
  • ????first?=?(Lnode)malloc(sizeof(List));??
  • ????first->data?=?1;??
  • ????first->next?=?first;??
  • ????now?=?first;??
  • ????//創建循環鏈表,編號為1-n???
  • ????for(int?iFirst?=?2;?iFirst?<=?n;?iFirst++)??
  • ????{??
  • ????????temp?=?(Lnode)malloc(sizeof(List));??
  • ????????temp->data?=?iFirst;?//給每個節點編號為1-n。??
  • ????????//將當前指針的后繼賦給新創建的節點的后繼(即新節點的后繼為默認的“頭節點”first)。??
  • ????????temp->next?=?now->next;?????????
  • ????????now->next?=?temp;????//將斷開的連接修復好。??
  • ????????now?=?temp;?????????//移動當前指針,繼續建表過程。??
  • ????}??
  • ????//將當前指針位置初始化,指向編號為1處。??
  • ????now?=?now->next;??
  • ????//當前指針指向編號為k處。??
  • ????while(--k)???
  • ????{??
  • ????????pre?=?now;??
  • ????????now?=?now->next;??
  • ????}??
  • ????//模擬出列過程。??
  • ????printf("The?Line?is?:?");??
  • ????while(n--)??
  • ????{??
  • ????????for(int?j?=?1;?j?<?m;?j++)??
  • ????????{//當前指針指向第m個報數的人。??
  • ????????????pre?=?now;??
  • ????????????now?=?now->next;??
  • ????????}??
  • ????????//刪除并輸出出列的編號。??
  • ????????pre->next?=?now->next;??
  • ????????if(now->next?==?now)?printf("%d\n\n",?now->data);//當剩余一個節點時,換行。??
  • ????????else?printf("%d->",?now->data);??
  • ????????first?=?now->next;???//出列后,第一個報數的人。??
  • ????????free(now);??//釋放刪除的節點。??
  • ????????now?=?first;????//當前指針轉移到第一個報數的人,繼續出列的過程。??
  • ????}??
  • }??
  • ??
  • int?main()??
  • {??
  • ????Josephus(9,?1,?5);??
  • ????return?0;??
  • }??


  • 總結

    以上是生活随笔為你收集整理的约瑟夫环之循环链表实现的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。