數據結構——約瑟夫環C語言鏈表實現

????????約瑟夫環問題由古羅馬史學家約瑟夫(Josephus)提出,他參加并記錄了公元66—70年猶太人反抗羅馬的起義。在城市淪陷之后,他和40名死硬的將士在附近的一個洞穴中避難。起義者表示“寧為玉碎不為瓦全”,約瑟夫則想“留得青山在不愁沒柴燒”。于是,約瑟夫建議41個人排成一個圓圈,由第1個人開始報數,每報數到第3人該人就必須自殺,然后再由下一個重新報數,直到所有人都自殺身亡為止。問:約瑟夫及其朋友應該站在哪個位置?、

????????n個人圍成一個圓圈,然后從第一個人開始,按:1,2,3,…,m報數,數到m的人出圈,并有出圈者的下一個人重新開始報數,數到m又要出圈,如此類推,直到所有人都出圈,打印出圈的次序,其中n和m為輸入數據

????????這個問題可以通過數學推理和遞歸算法來解決。通過不斷地計算,可以發現每次移除一個人后,剩下的人重新排列成一個新的圓圈,規模減小并且從下一個人開始。通過不斷地遞歸計算,可以找到最后一個人的位置。

? ? ? ? 本篇博客用C語言,利用循環單鏈表求解約瑟夫環問題。

? ? ? ? 引用的頭文件

#include<stdio.h>
#include<malloc.h>
#include<time.h>//計算執行時間 

????????在main函數中,首先輸入總人數count和報數規律num,然后調用Solve_lijie函數求解約瑟夫環問題。為了計算程序執行時間,使用了clock函數來記錄開始和結束時刻,然后計算差值得到執行時間。

int main()
{int count, num;double duration; Loop* L;printf("輸入總人數count和報數規律num:");scanf("%d%*c%d", &count, &num);//循環單鏈表求解clock_t start, finish;//長整型數 start = clock();Solve(L, count, num);finish = clock();//記錄前后時刻 duration = (double)(finish - start) / CLOCKS_PER_SEC;//這個是有定義的宏 printf("\n使用循環單鏈表存儲所用執行時間:%lf", duration);return 0; } 

結構體定義

typedef int ElemType;
typedef struct Josephus
{ElemType MEN;	struct Josephus* next;
}Loop;
// 循環單鏈表初始化
void Init(Loop* &L)
{L = (Loop *)malloc(sizeof(Loop));L -> next = L;	// 頭尾相連 
}void Create(Loop* &L, int count)
{if(count < 1){printf("介個是個空環\n");return;}Loop *s, *r;Init(L); //初始化頭節點 L->MEN = 1; r = L;	//指向頭節點 for(int i = 2; i <= count; i++){	//對頭節點后面的節點進行初始化并錄入數據 Init(s);s->MEN = i;s->next = L;//循環,尾部也是L r->next = s;//r指向頭節點 r = s;}
}void Display(Loop* &L)//用于檢測是否正常錄入數據 
{Loop *p = L;if(L == NULL)return;	printf("報數:\n");do{printf("%d\t", p->MEN);p = p->next;}while(p != L);//兜兜轉轉回到原點 printf("\n");return; 
}
void Solve(Loop* &L, int count, int num)
{Create(L, count);Display(L);int j;//循環,根據報數規律num讓成員出列,受總人數count影響//每殺一個,count--; 每到第num個,就打印后free一個 Loop *p, *r;r=p = L;while(r->next != L)r = r->next;for(int i = count; i > 1; i--){j = 1;do{		r = p;	//形成一前一后兩指針 p = p->next;j++;}while(j < num);// 不符合出列條件。此時兩指針各下移一個單位r->next = p->next;printf("這個人死了: %d\n", p->MEN);free(p);p = r->next;//符合條件。此時后指針后續鏈接前指針的后續,釋放前指針p,然后恢復前后位置順序。}printf("獲勝者是%d\n", p->MEN);
}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/43313.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/43313.shtml
英文地址,請注明出處:http://en.pswp.cn/web/43313.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

dledger原理源碼分析(四)-日志

簡介 dledger是openmessaging的一個組件&#xff0c; raft算法實現&#xff0c;用于分布式日志&#xff0c;本系列分析dledger如何實現raft概念&#xff0c;以及dledger在rocketmq的應用 本系列使用dledger v0.40 本文分析dledger的日志&#xff0c;包括寫入&#xff0c;復制…

liunx下通過設備文件設置串口波特率,并收發

在Linux下&#xff0c;你可以通過串口設備文件設置串口波特率&#xff0c;并進行數據的收發。 確認串口設備文件 首先&#xff0c;確認你要使用的串口設備文件&#xff0c;一般情況下串口設備文件的命名規則為/dev/ttyS0、/dev/ttyS1等&#xff0c;具體的設備文件名可能會有所…

Linux 網絡文件系統 NFS:配置與管理指南

Linux 網絡文件系統 NFS&#xff1a;配置與管理指南 網絡文件系統&#xff08;NFS&#xff09;是一種分布式文件系統協議&#xff0c;允許用戶在網絡上跨不同計算機和操作系統共享文件和存儲資源。NFS 提供了強大的數據共享功能&#xff0c;廣泛應用于企業級存儲解決方案中。本…

網站SEO百度搜索排名—通過關鍵字提升網站流量

添加網站關鍵字 <meta name"keywords" content"系統通過搜索到的關鍵字XXXXXXXXX"> <meta name"description" content"網站的介紹內容XXXXXXXXXXXXXXXXX"> <title>平臺名稱XXXXXXX</title> 在 百度站點管理 …

STM32串口通訊(RS232、RS485、TTL)詳解

前言 STM32串口&#xff08;Serial Communication Interface&#xff09;是STM32微控制器中用于串行通信的接口&#xff0c;通常指的是USART&#xff08;通用同步異步收發器&#xff09;或UART&#xff08;通用異步收發傳輸器&#xff09;。這些接口允許STM32微控制器與其他設…

跟我從零開始學STL(STL代碼基礎01)---string容器

引言 小伙伴們大家好&#xff0c;又到了新的篇章了&#xff0c;感謝大家的支持&#xff01;今天我們要學一個新的篇章&#xff0c;STL。在編程領域&#xff0c;STL&#xff08;Standard Template Library&#xff0c;標準模板庫&#xff09;是C語言中非常重要的一部分。它為我們…

zabbix 學習筆記

文章目錄 Zabbix 安裝Ubuntu 18.04.1 server 安裝Zabbix 4.0Centos7 安裝Zabbix3.4Centos7 安裝zabbix4.2Centos7.1908安裝zabbix 基于ngixDebian11安裝zabbix6.0LTS 基于PostgreSQL和NGINXAlmaLinux9.2使用國內清華源在線安裝zabbix6.0.18LTS 基于MySQL和NGINXUbunut22.04使用…

crewAI中通過Ollama調用本地模型的兩種方式

0 背景 crewAI中默認使用的gpt4的模型&#xff0c; 在環境中配置OPENAI_API_KEY即可使用。 但openai的api畢竟是要花錢的&#xff0c; 況且現在對大陸地區做了封禁&#xff0c; 使用起來不是那么方便。 而Ollama可以方便的運行本地的大模型&#xff0c; 既不用花錢&#xff0c…

圖文講解IDEA如何導入JDBC驅動包

前言 學習JDBC編程,勢必要學會如何導入驅動包,這里筆者用圖文的方式來介紹 視頻版本在這里 50秒教你怎么導入驅動包然后進行JDBC編程的學習_嗶哩嗶哩_bilibili 忘記錄音頻了,大伙湊合著看 下載驅動包 https://mvnrepository.com/artifact/mysql/mysql-connector-java 去中…

GB28181設備如何添加

簡介 此篇描述視頻網關&#xff08;中間件&#xff09;接入大華、海康、ONVIF設備&#xff08;NVR、攝像頭&#xff09;、GB28181設備步驟和流程。 閱讀本文檔之前建議先閱覽視頻網關&#xff08;中間件&#xff09;用戶使用手冊。 接入方式和說明 視頻網關&#xff08;中間…

Flutter——最詳細(GestureDetector)使用教程

背景 組件手勢檢測&#xff0c;單擊、雙擊、長按、松開、移動、橫向拖動、豎向拖動等事件 屬性作用onTap單擊onDoubleTap雙擊onLongPress長按onPanUpdate拖動實時更新onHorizontalDragDown橫向點擊onVerticalDragDown豎向點擊 GestureDetector(onTap: () > setState(() >…

論文學習_Getafix: learning to fix bugs automatically

1. 引言 研究背景:現代生產代碼庫極其復雜并且不斷更新。靜態分析器可以幫助開發人員發現代碼中的潛在問題(在本文的其余部分中稱為錯誤),這對于在這些大型代碼庫中保持高代碼質量是必要的。雖然通過靜態分析盡早發現錯誤是有幫助的,但修復這些錯誤的問題在實踐中仍然主要…

ZP-UHZ系列頂裝式磁翻板液位計

一、用途及特點 ZP-UHZ系列磁浮子液位計是一種能就地指示或遠傳顯示與控制的物位儀表&#xff0c;它廣泛用于石油、化工、輕工、電力、核工業以及食品、醫藥等工業中&#xff0c;對各種塔、罐、槽、箱等容器中介質的液位進行指示和控制。 ZP-UHZ系列磁浮子液位計的指示部分及發…

jmeter-beanshell學習7-props獲取全局變量和設置全局變量

繼續寫點不痛不癢的小東西。第一篇寫了vars設置變量&#xff0c;但是vars只能作用在同一個線程組。跨線程組情況比較少&#xff0c;要是用到跨線程組&#xff0c;有個pros&#xff0c;用法和vars一樣。 在setup線程組設置變量a&#xff0c;執行的時候&#xff0c;jmeter會先執行…

第二證券:轉股溢價率是什么意思?高好還是低好?

轉股溢價率是指可轉債在商場上的交易價格相對于其轉股價值的溢價份額&#xff0c;能夠用來衡量投資者為取得將債券轉換為股票權力而付出的額定金額&#xff0c;是可轉債的重要指標。 轉股溢價率的核算公式為&#xff1a;溢價率&#xff1d;&#xff08;轉債價格-轉股價值&…

MySql性能調優01-[數據結構和索引]

數據結構和索引 什么是索引索引的種類常見索引數據結構和區別二叉樹 紅黑樹 什么是索引 索引的種類 在Mysql中索引是在存儲引擎層實現的&#xff0c;而不是在服務層實現的 按數據結構分&#xff1a;Btree索引、Hash索引、Full-text索引按存儲結構分&#xff1a;聚簇索引、非聚…

【Python百日進階-Web開發-Peewee】Day296 - 查詢示例(五)聚合2、遞歸

文章目錄 14.6.13 列出每個指定設施的預訂總小時數 List the total hours booked per named facility14.6.14 列出每位會員在 2012 年 9 月 1 日之后的首次預訂 List each member’s first booking after September 1st 201214.6.15 生成成員名稱列表,每行包含成員總數 Produc…

閑話銀行家舍入法,以及在程序中如何實現

前言 相信對于四舍五入的舍入法&#xff0c;大家都耳熟能詳&#xff0c;但對于銀行家舍入法&#xff0c;可能就會比較少接觸了&#xff01; 可是在金融界&#xff0c;銀行家舍入法可是大名鼎鼎的主角之一&#xff0c;主要應用于金融領域和涉及貨幣計算的場合。 那么&#xf…

異步輪詢 Web API 的實現與 C# 示例

在現代軟件開發中&#xff0c;異步輪詢 Web API 是一種常見的做法&#xff0c;尤其是在需要定期從服務器獲取數據更新的場景下。C# 作為一種功能強大的編程語言&#xff0c;提供了豐富的異步編程支持&#xff0c;使得實現異步輪詢變得相對簡單。本文將介紹如何使用 C# 快速實現…

Google Guava Cache簡介

目錄 簡介和Redis的區別 簡介 Google Guava 是一個開源的 Java 庫&#xff0c;其中提供了一系列強大的工具來簡化 Java 開發工作。其中&#xff0c;Guava Cache 組件提供了一個內存緩存的實現&#xff0c;可以顯著提高應用程序的性能。這是一個高效且靈活的緩存解決方案&#…