欧美一区二区三区,国内熟女精品熟女A片视频小说,日本av网,小鲜肉男男GAY做受XXX网站

約瑟夫環算法

錢浩然2年前19瀏覽0評論

約瑟夫環算法?

約瑟夫環指的是,n個人按編號順序圍成一個環,設置一個數字m,其中m<n(一般m取0-9之間的數);并從環中的第一個人開始,按順時針數數,每數了m個位置,排在m號的位置上的人出列,然后從出列的位置的下一個位置上的人開始數,一直到環中剩下最后一個人為止。

算法步驟:

(1)確定存儲結構:由于是一個環,所以建立一個循環鏈表

(2)設置指針個數:設置一個頭指針*front永遠指向第一個結點(按數字順序的話是指向環中最小的那個節點也可又從0開始數),再設置一個尾指針*prior用于指向報數的人的位置,每報一次數,尾指針指向下一個節點,數到m號時,則刪除該節點,并將尾指針指向下一個節點,一直循環下去。

定義節點類型:

typedef struct Node

{

int data;

struct Node *next;

struct Node *front;

struct Node *prior;

}Node,*LinkList;

(3)向鏈表插入n個人(采用尾插法):

LinkList Create_cirlce()

{

LinkList L,r,p;

L = (Node *) malloc ( sizEOF (Node)); //初始化鏈表

L->next = L;

r = L; //r始終指向最后一個結點

int n;

while ( scanf ( "%d" ,&n) != EOF)

{

p = (Node *) malloc ( sizeof (Node));

p->data = n;

p->next = r->next;

r->next = p;

r = p;

}

r->next = L;

return L;

}

(4)根據指針判斷鏈表是否已出列到最后一個:判斷*prior->next!=L

(5)利用循環遍歷出出列的人:此時需利用兩個循環,外循環代表遍歷到最后一個所需要的循環次數,內循環代表遍歷出列的人

void Josephus(int n,int m){

for(int i=0;i<n-1;i++){

for(int j=0;i<m-1;j++){

Next();//遍歷出出列的人

cout<<"出列的人是:"<<current;//顯示出當前出列的人的位置

java判斷鏈表是否環,約瑟夫環算法