資料結構之約瑟夫環C語言實現
資料結構,是很重要的一門學科,每年考研,資料結構是各大院校必考的科目。當然,資料結構,最令人頭疼的就是演算法設計題了。為了幫助大家理解和掌握資料結構常見的演算法,學長推出系列文章,為大家分享這些重要演算法的C語言完成實現,大家有條件的話,可以在電腦上除錯執行,加深對演算法的理解和掌握。
關於怎麼快速學C/C++,可以加下小編的C/C++學習裙:341+636+727,不管你是小白還是大牛,小編我都歡迎,不定期分享乾貨,歡迎初學和進階中的小夥伴。
每天晚上20:00都會開直播給大家分享C/C++遊戲程式設計學習知識和路線方法,群裡會不定期更新最新的教程和學習方法,最後祝所有程式設計師都能夠走上人生巔峰,讓程式碼將夢想照進現實
下面先為大家分享約瑟夫環的C語言實現。
#include
#include
typedef struct LNode{
int data; // 密碼
int order; // 序號
struct LNode *next;
}LNode;
void main()
{
struct LNode *head;//head為頭指標
struct LNode *p1,*p2;
int i,j,m,n;
printf("輸入人數: ");//輸入人數
scanf("%d",&n);
//為了簡化程式碼,建表的時候使用一個空的Node作為表頭,建好以後刪除。
p1=(struct LNode*)malloc(sizeof(LNode));
head = p1;
for(i=1;i< =n;i++)
{
p1->next =(struct LNode*)malloc(sizeof(LNode));
printf("輸入第 %d 個人的密碼: ",i);//輸入密碼
scanf("%d",&p1->next->data);
p1->next->order = i;
p1 = p1->next;
}
p1->next = head->next; // 首尾相連,此時p1指向連結串列的尾
//刪除空表頭
p2 = head->next; //此時p2指向連結串列的頭
delete head;
printf("輸入上限: ");
scanf("%d",&m);//輸入上限
printf("出列順序:");
while(p2->next != p2){//當人數大於1個的時候
for(j=1;j < m;j++)//執行至第m個,因為p2指向的是第1個,所以只要跑m-1次,就指向了第m個
{
p1 = p2;
p2 = p2->next;
}
printf(" %d",p2->order); //第m個人出列
m = p2 ->data;
p1 -> next = p2 ->next;//刪除第m個結點
delete p2;
p2 = p1 ->next;
}
printf(" %d ",p2->order); //輸出佇列的最後一個人
delete p2; // 清空佇列的最後一個
}
相關推薦
資料結構之約瑟夫環C語言實現
資料結構,是很重要的一門學科,每年考研,資料結構是各大院校必考的科目。當然,資料結構,最令人頭疼的就是演算法設計題了。為了幫助大家理解和掌握資料結構常見的演算法,學長推出系列文章,為大家分享這些重要演算法的C語言完成實現,大家有條件的話,可以在電腦上除錯執行,加深
資料結構之約瑟夫環
約瑟夫斯問題(有時也稱為約瑟夫斯置換),是一個出現在電腦科學和數學中的問題。在計算機程式設計的演算法中,類似問題又稱為約瑟夫環。 有個囚犯站成一個圓圈,準備處決。首先從一個人開始,越過個人(因為第一個人已經被越過),並殺掉第k個人。接著,再越過個人,並殺掉第k個人。
資料結構——簡單約瑟夫環
約瑟夫環問題 問題描述:約瑟夫環問題是,編號為1,2,3,…,n的n個人按順時針方向圍坐一圈,每人持有一個密碼。開始時任選一個正整數作為報數上限值m,從第一個人開始順時針方向自1開始順序報數,報到m時停止報數。報m的人出列,將他的密碼作為新的m值,從他在順時針方向上的下一
Python實現資料結構佇列約瑟夫環問題
問題描述: 人們站在一個等待被處決的圈子裡。 計數從圓圈中的指定點開始,並沿指定方向圍繞圓圈進行。 在跳過指定數量的人之後,執行下一個人。 對剩下的人重複該過程,從下一個人開始,朝同一方向跳過相同數量
資料結構:約瑟夫環
約瑟夫環 問題描述: 約瑟夫環(約瑟夫問題)是一個數學的應用問題:已知n個人(以編號1,2,3...n分別表示)圍坐在一張圓桌周圍。從編號為k的人開始報數,數到m的那個人出列;他的下一個人又從1開始報數,數到m的那個人又出列;依此規律重複下
約瑟夫環 C語言 單循環鏈表
node 前驅 輸入 truct sizeof -- 描述 reat 約瑟夫 /*---------約瑟夫環---------*/ /*---------問題描述---------*/ /*編號為1,2,…,n的n個人圍坐一圈,每人持一個密碼(正整數)。 一開始
約瑟夫環C語言程式 day1
約瑟夫環問題,n個人圍著一張桌子,從1開始報數,規定報道第k數的人自殺,接著下一給重新開始報數。這裡n=41,k=3。 #include<stdio.h> #include<stdlib.h> typedef int EleType; typedef struct L
約瑟夫環 C語言
#include<stdio.h> int main() { int m,n,i,j,k=0,a[100]={0}; scanf("%d%d",&n,&m); if(n>=1&&m<=1000000) { for(i=0;i&l
約瑟夫環--C語言
約瑟夫(Joseph)問題的一種描述是:編號為1,2,3,…,n的n個人按順時針方向圍坐一圈。每人持有一個密碼(正整數)。一開始任選一個正整數作為報數上限值m,從第一個人開始按順時針方向自1開始順序報數,報到m時停止報數,令其出列,將他的密碼作為新的m值,從他在順時針方向上的下一個人開始
約瑟夫環——C語言迴圈連結串列模擬
約瑟夫問題已知n個人圍城一週,編號1,2,3,.......,n,從1號開始報數,每隔k個人報到數的人出列。常見解決方法,遞迴或迴圈連結串列模擬迴圈連結串列模擬程式碼#include<stdio.h> //以30個人為例 ,每7個人出列為例 #include
資料結構之帶優先順序的佇列(C語言實現)
#include"PQueue.h" int main() {PNode head;InitPQueue(&head);Item item = { 3, 6 };Push(&head, item);item.data = 5;item.prio = 3;Push(&head, item
資料結構之--圖的講解與C語言實現
資料結構–圖 圖是研究資料元素之間的多對多的關係。在這種結構中,任意兩個元素之間可能存在關係。即結點之間的關係可以是任意的,圖中任意元素之間都可能相關。圖的應用極為廣泛,已滲入到諸如語言學、邏輯學、物理、化學、電訊、電腦科學以及數學的其它分支。 圖的定義
數據結構之約瑟夫問題(循環鏈表)(C++版)
單鏈表 字母 exit 循環鏈表 urn list ext struct 插入 #include <iostream>#include <stdlib.h>using namespace std; typedef char ElemType;type
資料結構線性表之約瑟夫環&&多項式求和&&差&&積&&導數&&給變數賦值小練習
問題描述 約瑟夫環(約瑟夫問題)是一個數學的應用問題:已知n個人(以編號1,2,3…n分別表示)圍坐在一張圓桌周圍。從編號為k的人開始報數,數到m的那個人出列;他的下一個人又從1開始報數,數到m的那個人又出列;依此規律重複下去,直到圓桌周圍的人全部出列。通常
數據結構(一)線性表循環鏈表之約瑟夫環
cli amp tlist isp alloc 個人 pla 初始 ont (一)前提 41個人報數,1-3,當誰報數為3,誰就去嗝屁。現在獲取他們嗝屁的順序 (二)實現結構 順序:3->1->5->2->4 (三)代碼實現 #def
數據結構設計——約瑟夫環問題
判斷 IE .... stdio.h malloc str 分享圖片 win log 本篇文章中所有數據結構都是後期整理的,如有問題歡迎指正,轉載請註明出處http://www.cnblogs.com/a1982467767/p/8893553.html 約瑟夫環問題實現
迴圈佇列之約瑟夫環
此問題的要求為:n個人圍坐一圈,從第一個人開始數,每數到k,這個人就出列,圈中的下一個人重新從1開始計數,直到剩餘人數不足k人 下面我畫圖來加深理解(抱歉目前還不會用電腦繪製動畫,只好手動繪製,比較粗糙,之後有時間我改進下!!(看起來像個效果器上面的一堆旋鈕哈哈哈 下面附上完整
Java藍橋杯之約瑟夫環
import java.util.ArrayList; public class Test8 { /** * @param args * 約瑟夫環 * * 幸運數字 */ public static void main(String[]
順序表之約瑟夫環(josephus)
1.問題描述 n個犯人站成一個圈,從第s個人開始數起,每數到第d個犯人,就拉出來斬了,然後再從下一個開始數d個,數到的人再處決,………………,直到剩下最後一個犯人就予以赦免。 2.演
約瑟夫環(c++版)
問題描述 約瑟夫環(約瑟夫問題)是一個數學的應用問題:已知n個人(以編號1,2,3…n分別表示)圍坐在一張圓桌周圍。從編號為1的人開始報數,數到m的那個人出列;他的下一個人又從1開始報數,數到m的那個人又出列;依此規律重複下去,直到圓桌周圍的人全部出列。通