資料結構 迴圈鍊錶

2021-09-26 07:22:55 字數 1178 閱讀 1813

對於迴圈鍊錶,我是通過一道例題來學習的:

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

當然,我們可以用數學知識來求解,通過找規律什麼的應該是可以解的,但是我覺得咱寫**的應該對自己好點,比較頭髮不好保養,還是讓計算機來解決這個問題吧~

我們可以很明確的知道這裡我們需要用到迴圈來解決問題。那麼迴圈鍊錶就可以在這裡出場了:迴圈鍊錶其實很好理解,就是將之前的鍊錶頭尾相連。其他的地方和迴圈鍊錶幾乎一模一樣~

接下來就是將這個題目的**整理出來給大家了:

#include

#include

typedef

struct nodeperson;

/*初始化迴圈列表*/

person *

initlink

(int n)

cyclic->next = head;

return head;

}void

findaddkillk

(person *head,

int k,

int m)

/*用p來找到我們的起點*/

person *p = head;

while

( p->number != k)

/*找到我們需要刪除的結點*/

while

(p->next != p)

//此時的p指向我們需要刪除的結點

tail->next = p->next;

//將p的前乙個結點連向它的後乙個結點

printf

("出列表的人為%d"

, p->number)

;free

(p);

//釋放空間

p = tail->next;

}printf

("出列表的人為%d"

, p->number)

;free

(p);

//最後將自己給釋放

}int

main()

我是不會說我犯錯居然把取位址符曾經漏了,找不到錯差點崩潰的~

資料結構 迴圈鍊錶

近期我在學習資料結構,於是我自己整理了單鏈表 迴圈單鏈表 雙向鍊錶 雙向迴圈鍊錶的相關 以鞏固這段時間的學習,也希望能夠幫助初學者,希望大家在閱讀以下 時發現問題糾正於我,一起 cyclinklist.h ifndef cyclinklist h define cyclinklist h inclu...

資料結構 迴圈鍊錶

迴圈鍊錶的結點 typedef struct circularnodecircularnode 迴圈鍊錶結構 typedef struct circularlinklistcircularlinklist 在迴圈鍊錶的指定位置插入元素 void insertcircularlinklist circ...

資料結構 迴圈鍊錶

start reading 在知道熟悉單鏈表的操作後,我們知道鍊錶有乙個資料域存放具體的資料,有乙個next域存放後繼的位址,如果我們將尾結點的next域指向之前的任意乙個節點,那麼就形成了乙個環。下面我們就來說說迴圈鍊錶 如圖就是乙個迴圈鍊錶 在對迴圈鍊錶進行操作時要注意尾結點的後繼不是null,...