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的人出列,本程式結果為人員出列順序...