十四 迴圈鍊錶的實現

2022-08-11 13:48:22 字數 1565 閱讀 1613

1、迴圈鍊錶簡介

概念上:

實現上:

迴圈鍊錶的繼承層次結構

2、迴圈鍊錶的實現思路

迴圈鍊錶的實現要點:

刪除位置為0時:

3、迴圈鍊錶的具體實現

#ifndef circlelist_h

#define circlelist_h

#include "linklist.h"

namespace dtlib

node* last() const // 獲得指向最後乙個結點的指標

void last_to_first()

public:

bool insert(const t& e)

bool insert(int i, const t& e)

return ret;

}bool remove(int i)

}else

this->destory(todel);

}else

}else

return ret;

}bool set(int i, const t& e)

t get(int i) const

bool get(int i, const t& e) const

int find(const t& e) const

slider = slider->next;

}// 異常安全,比較的時候就算發生異常,也不會造成迴圈鍊錶的狀態改變

return ret;

}void clear()

if(this->m_length == 1)}}

// 重新實現遍歷操作

bool move(int i, int step)

bool end()

~circlelist()

};}#endif // circlelist_h

4、迴圈鍊錶的應用
約瑟夫環問題

已知n個人(以編號1,2,3...n分別表示)圍坐在一張圓桌周圍。從編號為k的人開始報數,數到m的那個人出列;他的下乙個人又從1開始報數,數到m的那個人又出列;依此規律重複下去,直到圓桌周圍的人全部出列。

// n 人數, s 第幾號開始報數, m 報多少

void josephus(int n, int s, int m)

cl.move(s-1, m-1);

while(cl.length() > 0)

}int main()

5、小結
迴圈鍊錶是一種特殊的單鏈表

尾結點的指標域儲存了首結點的位址

特殊處理首元素的插入操作和刪除操作

重新實現清空操作和遍歷操作

迴圈鍊錶的實現

模擬單鏈表的實現方法,這裡我用乙個簡單案例來實現一下迴圈鍊錶的基本功能 1.用前插法建立乙個迴圈鍊錶 假設依次放入 1,2,3,4,5,那麼其內部儲存方式應為 5,4,3,2,1 後插法我就不寫了,和前插法一樣的,只是儲存方式是正序,可以自己實現一下。2.在第1個位置插入 6 3.查詢 3和 7是否...

迴圈鍊錶的實現

1.標準的迴圈鍊錶與一般鍊錶多了個游標,多了3個游標操作函式。2.迴圈鍊錶api的寫法與一般鍊錶大致一樣,只有0號節點的增加和刪除需要注意,還有一次節點的插入和最後乙個節點的刪除需要注意,刪除時光標的移動需要注意。3.迴圈鍊錶相對於一般鍊錶並無多大效能上的增強,只是讓鍊錶解決約瑟夫問題十分方便。ci...

雙向迴圈鍊錶的實現

其實雙向迴圈鍊錶與單鏈表的區別在於每個節點的結構發生了改變,具體的說是,每個節點多了乙個指標域,用於指向上乙個節點。其他的如鍊錶物件就不需要進行改變了。新的節點類 class lnode def init self,elem 0,prev none,next none self.prev prev ...