約瑟夫環 單鏈表

2021-08-20 17:23:48 字數 1449 閱讀 2040

/*此演算法將頭指標head也進行data賦值*/

#include

typedef struct node      //定義結構體

linknode,*link;

int main()

void josephu(link head,int n,int k,int m)      //此演算法將頭指標head賦予data值,以便於迴圈鍊錶結點的刪除.

p->next=null;                      //建立乙個單向鍊錶

link x=head;                         //列印單向鍊錶

printf("佇列順序:");

while(x)

printf("\n");

p->next=head;                 //將單向鍊錶轉化為迴圈鍊錶

p=head;

for(i=1; inext;

}printf("出隊順序:");

while(p->next!=p)

printf("%d ",p->data);          //列印出隊順序

r->next=p->next;

free(p);

p=r->next;

}printf("%d\n",p->data);            //列印最後乙個結點的資料

free(p);

/*此演算法沒有將頭指標head進行data賦值*/

#include

typedef struct node                   //定義結構體

linknode,*link;

int main()

void josephu(link head,int n,int k,int m)     //此演算法頭指標head沒有進行賦data值;

r->next=null;                      //建立乙個單向鍊錶

link x=head->next;                       //列印單向鍊錶

printf("佇列順序:");

while(x)

printf("\n");

r->next=head->next;                 //將單向鍊錶轉化為迴圈鍊錶

link q;

p=head->next;

for(i=1; inext;

}printf("出隊順序:");

while(p->next!=p)

printf("%d ",p->data);          //列印出隊順序

q->next=p->next;

free(p);

p=q->next;

}printf("%d\n",p->data);            //列印最後乙個結點的資料

free(p);

}

單鏈表實現約瑟夫環

語塞夫環問題 問題來歷 據說著名猶太歷史學家 josephus有過以下的故事 在羅馬人占領喬塔帕特後,39 個猶太人與josephus及他的朋友躲到乙個洞中,39個猶太人決定寧願死也不要被敵人抓到,於是決定了乙個自殺方式,41個人排成乙個圓圈,由第1個人開始報數,每報數到第3人該人就必須自殺,然後再...

單鏈表實現約瑟夫環

約瑟夫環是乙個數學的應用問題 已知n個人 以編號1,2,3 n分別表示 圍坐在一張圓桌周圍。從第乙個人開始報數,數到k的那個人出列 他的下乙個人又從1開始報數,數到k的那個人又出列 依此規律重複下去,直到圓桌只剩下乙個人。那麼如何用單鏈表來實現約瑟夫環呢,首先我們需要構建乙個帶環鍊錶,定義乙個指標c...

單鏈表實現約瑟夫環

約瑟夫環 以五個節點的帶環單鏈表 最後乙個節點指向第乙個節點 為例子 1 從煉表頭開始,先刪除第二個節點 2 從刪除節點的下乙個節點開始,再往後找第二個節點,然後刪除。3 一直重複過程2,直到剩下乙個節點,返回該節點。listnode joecircle listnode phead,int m i...