迴圈鍊錶,約瑟夫環問題

2022-03-26 09:52:06 字數 760 閱讀 6460

約瑟夫(josephus)環問題:編號為1,2,3,…,n的n個人按順時針方向圍坐一圈,每人持有乙個密碼(正整數)。一開始任選乙個正整數作為報數的上限值m,從第乙個人開始按順時針方向自1開始順序報數,報到m時停止。報m的人出列,將他的密碼作為新的m值,從他在順時針方向上的下一人開始重新從1報數,如此下去,直到所有人全部出列為止。

建立n個人的單迴圈鍊錶儲存結構,執行結束後,輸出依次出隊的人的序號。

#include

#include

#include "malloc.h"

typedef struct nodenode;

typedef struct listlist;

list* init()

void insert(list *l, node *e)else

l->rear->next = l->front;

l->length++;

}void display(list *l)

}int main()

node *p = l->rear;

node *q = null;

int cnt = 1;

int rest = l->length;

while(rest > 0)

q = p->next;

printf("the out is %d\n", q->data);

p->next = p->next->next;

rest--;

}return 0;

}

約瑟夫環問題(迴圈鍊錶)

這是一道比較經典的迴圈鍊錶問題,在華為上機筆試中也出現過。約瑟夫環是乙個數學的應用問題 已知n個人 以編號1,2,3.n分別表示 圍坐在一張圓桌周圍。從編號為k的人開始報數,數到m的那個人出列 他的下乙個人又從1開始報數,數到m的那個人又出列 依此規律重複下去,直到圓桌周圍的人全部出列。includ...

約瑟夫環問題(迴圈鍊錶)

轉 約瑟夫環 是乙個數學的應用問題 已知n個人 以編號1,2,3.n分別表示 圍坐在一張圓桌周圍。從編號為k的人開始報數,數到m的那個人出列 他的下乙個人又從1開始報數,數到m的那個人又出列 依此規律重複下去,直到圓桌周圍的人全部出列。include include typedef struct n...

迴圈鍊錶 約瑟夫環問題

正好這幾天在看資料結構,覺得鍊錶應用挺廣的,特寫一例項。問題描述 選首領。n個遊戲者圍成一圈,從第乙個開始順序報數1,2,3.凡報到3者退出圈子,最後留在圈中的人為首領。思路 建立乙個包含n個節點的單迴圈鍊錶來模擬n個人圍成的圈。節點的資料域存放遊戲者的編號。在程式中,以刪除節點模擬人退出圈子的處理...