使用迴圈鏈表實現約瑟夫環(圍圈報數問題)

来源:http://www.cnblogs.com/callmebill/archive/2016/06/18/5597200.html
-Advertisement-
Play Games

剛開始學C,碰到經典的圍圈報數問題,現先將實現代碼附下: #include<stdio.h>#include<stdlib.h> struct LNODE{ //鏈表定義 int data; struct LNODE *next;};typedef struct LNODE Lnode;typede ...


剛開始學C,碰到經典的圍圈報數問題,現先將實現代碼附下:

#include<stdio.h>
#include<stdlib.h>

struct LNODE{            //鏈表定義
 int data;
 struct LNODE *next;
};
typedef struct LNODE Lnode;
typedef struct LNODE *LinkList;
struct LNODE *create(int s[])      //創建單項迴圈鏈表
{
 struct LNODE *head=NULL,*p=NULL,*last=NULL;
 int i=0;
 head=(struct LNODE *)malloc(sizeof(struct LNODE));
 if(!head)
 printf("memory allocation error!");
 if(s[0]!=0)
 {
  
  head->data=s[0];
  head->next=head;
  last=head;
   i++;
  while(s[i]!=0)      //判斷是否為0,為0則結束
  {
   p=(struct LNODE*)malloc(sizeof(struct LNODE));
   last->next=p;
   p->data=s[i];  
   p->next=head;
   last=p;
   i++;
  }
 }
 return head;
}
void printlist(struct LNODE *head)    //列印迴圈鏈表
{
 struct LNODE *q;
 int i;
 printf("the linked list is :\n");
 if(!head)
  printf("NULL");
 else
 {
  q=head;
  do
  {
   printf("%d\t",q->data);
   q=q->next;
  }while(q!=head);
 }
 printf("\n");
 
}
  
  
int main()
{
 int  circlelist[100],n,i,k=1;
 printf("please input the number:");
 scanf("%d",&n);      //輸入人數
 getchar();
 for(i=0;i<n;i++)
  circlelist[i]=i+1;      //給每個人編號
 circlelist[i]=0;        //最後值賦0
 for(i=0;i<=n;i++)
  printf("%d\t",circlelist[i]);    //列印編號
 LinkList p=NULL,q=NULL;
 p=create(circlelist);
 printlist(p);          //列印編號鏈表
 while(p->data!=p->next->data)    //自身與自身相等時退出迴圈
 {
  if(k!=3)                //設置報到數3的人退出
  {
   k++;
   q=p;
   p=p->next;
  }
  else
  {
   k=1;
   printf("%d\t",p->data);      //列印先後推出的人員編號
   q->next=p->next;        //刪除報3的人員結點
   p=q->next;
  }
 }
 printf("\n%d\n",p->data);

}

剛開始指針定義時都沒有賦值為NULL,調試沒錯誤,可是卻無法執行。

書中說,建議定義時如果暫時不使用指針,先賦值為NULL,我覺得最好這樣做,而且,在使用指針時,都應該判斷一下是否為空。


 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 普通上傳 view: Controller: Ajax上傳 用普通的ajax提交表單的時候,不能把文件流傳到後端去,所以要用到jquery.form.js jquery.form.js到官網下載或者從這裡下載:http://pan.baidu.com/s/1c2JS60C view: Control ...
  • 原文: "Controller methods and views" 作者: "Rick Anderson" 翻譯: "謝煬(Kiler)" 校對: "孟帥洋(書緣)" 、 "張仁建(第二年.夏)" 、 "許登洋(Seay)" 、 "姚阿勇(Dr.Yao)" 、 "婁宇(Lyrics)" 我們已經初 ...
  • 無錫一個2線城市,本地人,今年29了~自身情況老婆快生小孩啦~ 當前公司技術部搬去上海了~我由於家庭情況不能去上海,領導留我在無錫繼續做~但身邊一個人交流不方便便有了離職想法。 主要想找個公司長期發展,不想換來換去,現在有2家公司都發了off. A公司,9.5K,離家進一點走過去10分鐘,大小休(2 ...
  • 昨天Insus.NET有實現《使用ViewModel來實現多個Model傳送至視圖》http://www.cnblogs.com/insus/p/5594134.html 那今天Insus.NET想使用另一種方法來實現這個傳遞多個model至視圖中去。ExpandoObject動態對象。一些數據還是 ...
  • 我們在開發微信相關的應用的時候,一般需要完善的基礎模塊支持,包括微信公眾號,微信企業號,以及一些業務模塊的支持,一般隨著功能的增多,我們需要非常清晰的界定他們的關係。模塊的分拆以及合併往往需要考慮的代碼的重用,而且儘量做到簡單而不重覆。本篇隨筆基於我的微信框架的各個模塊的功能介紹以及他們關係的描述。 ...
  • 分類:C#、VS2015 創建日期:2016-06-18 使用教材:(十二五國家級規劃教材)《C#程式設計及應用教程》(第3版) 一、使用別人已經設計好的類簡化你的代碼編寫工作量 當讓你去處理一堆亂七八糟的事情時,要把它弄的有條理,首先需要“先把它分成幾大部分”(劃分為不同的“命名空間”或者“包”) ...
  • 本文內容全部出自《Python基礎教程》第二版,在此分享自己的學習之路。 lxx___歡迎轉載:http://www.cnblogs.com/Marlowes/p/5538341.htmllxx___ Created on Marlowes 本章將會給讀者展示一些例子,這些例子會使用多種Python ...
  • 引言 - sclog 總的設計思路 sclog在之前已經內置到simplec 簡易c開發框架中一個日誌庫. 最近對其重新設計了一下. 減少了對外暴露的介面. 也是C開發中一個輪子. 比較簡單, 非常適合學習理解,最後自己寫一個自己喜歡的日誌庫. 首先分析分級設計的總的思路. 主要是圍繞上面思路設計. ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...