資料結構系列之鍊錶 迴圈鍊錶(約瑟夫環)

2021-07-28 14:47:53 字數 1273 閱讀 1798

已知n個人,編號1到n,圍坐在一張圓桌周圍,從k開始報數,數到m的人出列,下乙個人又從k開始報數,到m出列,直至全出列。

步驟:

1.建立乙個有n個鏈節點無頭節點的迴圈鍊錶

2.確定第乙個報數人位置

3.不斷從鏈中刪除節點至鍊錶為空

//n為總人數,k為第乙個報數人,m為出列者喊的數

linklist p,r,list,curr;

//p為當前節點,r為輔助節點,指向p的前驅節點,list為頭節點

//建立迴圈鍊錶

p=(linklist)malloc(sizeof(lnode));

p->data=0;

p->link=p;

curr=p;

for(int i=1;ilinklistt=(linklist)malloc(sizeof(lnode));

t->data=i;

t->link=curr->link;

curr->link=t;

curr=t;

//把指標移到第乙個報數的人

r=curr;

while(k--){

r=p;

p=p->link;

while(n--){

for(ints=m-1;s--;r=p,p=p->link);

r->link=p->link;

printf("%d->",p->data);//出列者

free(p);

p=r->link;

int main(){

josephus(13,4,5);

return 0;

執行結果:

資料結構鍊錶之迴圈鍊錶 4

迴圈鍊錶定義 迴圈鍊錶的構建 class node def init self,item self.item item self.next none first node aa second node bb third node cc forth node dd fifth node ee firs...

golang資料結構之用迴圈鍊錶解決約瑟夫環問題

josephu.go package link import fmt type kid struct func addkid num int kid cur kid if num 1 for i 1 i num i if i 1 else cur.next tmpkid cur tmpkid cur...

資料結構之迴圈鍊錶

迴圈鍊錶是資料結構中煉表的一種形式。相對於單向鍊錶,將單向鍊錶的尾結點的指標域指向該單向鍊錶的頭結點,就構成了迴圈鍊錶。可以這麼理解,單向鍊錶就是一張單程火車票,比如你要從北京坐火車去上海,路上經過濟南 南京,此時北京 濟南 南京 上海就構成了單向鍊錶的四個結點,如下圖所示。但是,單向鍊錶是有去無回...