資料結構 迴圈鍊錶 約瑟夫環 的建立及C語言實現

2021-09-01 18:29:37 字數 1105 閱讀 7288

1.鍊錶的使用,還可以把鍊錶的兩頭連線,形成了乙個環狀鍊錶,稱為迴圈鍊錶。和它名字的表意一樣,只需要將表中最後乙個結點的指標指向頭結點,就形成了乙個環。

2.題意是:已知 n 個人(以編號1,2,3,…,n分別表示)圍坐在一張圓桌周圍,從編號為 k 的人開始順時針報數,數到 m 的那個人出列;他的下乙個人又從 1 還是順時針開始報數,數到 m 的那個人又出列;依次重複下去,要求找到最後出列的那個人。

例如有 5 個人,要求從編號為 3 的人開始,數到 2 的那個人出列:

解析:1,2,3,4,5個人:

第一輪(3,1)(4,2)-->4出列;

第二輪(5,1)(1,2)-->1出列;

第三輪(2,1)(3,2)-->3出列;

第四輪(5,1)(2,2)-->2出列;

第五輪5出列;

**:

#include #include//定義5個人的結構體

typedef struct node person;

//初始化操作

person *initlink(int n)

cyclic->next = head;//首尾相連

return head;

}//找到鍊錶第乙個結點的上乙個結點,為刪除做準備

void findandkillk(person *head, int k, int m)

person *p = head;

//找到編號為k的人

while (p->number != k)

while (p->next != p)

tail->next = p->next;

printf("出列人的編號:%d\n", p->number);

free(p);

p = tail->next;//繼續使用p指標指向出列編號的下乙個編號,遊戲繼續

}printf("出列人的編號為:%d\n", p->number);

free(p);

}int main()

報錯:

待解決:

資料結構 迴圈鍊錶,約瑟夫環

一 迴圈鍊錶 include stdio.h include stdlib.h typedef struct node node 初始化迴圈鍊錶 void ds init node pnode 初始化迴圈鍊錶,pnode 鍊錶上 else 返回結點所在位置 int ds search node pn...

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

已知n個人,編號1到n,圍坐在一張圓桌周圍,從k開始報數,數到m的人出列,下乙個人又從k開始報數,到m出列,直至全出列。步驟 1.建立乙個有n個鏈節點無頭節點的迴圈鍊錶 2.確定第乙個報數人位置 3.不斷從鏈中刪除節點至鍊錶為空 n為總人數,k為第乙個報數人,m為出列者喊的數 linklist p,...

C資料結構迴圈鍊錶實現約瑟夫環

c資料結構迴圈鍊錶實現約瑟夫環 本文 均在turbo c 2.0 的環境下執行通過,並得到正確結果,本程式為用迴圈鍊錶實現約瑟夫環,即有m個人站成乙個圓環,從某人 佇列第乙個 開程式設計客棧始報數,約定從某數開始的第n個人出列,他的下乙個再從一開始報,然再乙個報道n的人出列,本程式結果為人員出列順序...