1. 程式人生 > >資料結構之約瑟夫環C語言實現

資料結構之約瑟夫環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的那個人又出列;依此規律重複下去,直到圓桌周圍的人全部出列。通