單鏈表實現約瑟夫環

2021-08-18 21:29:24 字數 603 閱讀 1327

約瑟夫環是乙個數學的應用問題:已知n個人(以編號1,2,3…n分別表示)圍坐在一張圓桌周圍。從第乙個人開始報數,數到k的那個人出列;他的下乙個人又從1開始報數,數到k的那個人又出列;依此規律重複下去,直到圓桌只剩下乙個人。

那麼如何用單鏈表來實現約瑟夫環呢,首先我們需要構建乙個帶環鍊錶,定義乙個指標cur來記錄當前節點位置,定義prev來記錄前乙個節點位置,當迴圈到第k次時,將prev和cur的下乙個節點鏈結,記錄cur的下乙個節點,然後釋放cur,再次迴圈。直到剩下最後乙個節點。

typedef

struct slistnode

slistnode;

slistnode* slistjosephcircle(slistnode* phead, int k)

tail->_next = phead;

while (phead->_next!=phead)

phead = cur->_next;

prev->_next = phead;

free(cur);

cur = phead;

}return phead;

}

單鏈表實現約瑟夫環

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

單鏈表實現約瑟夫環

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

單鏈表實現約瑟夫環

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