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 ...