日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

CircleList

發布時間:2025/4/5 编程问答 17 豆豆
生活随笔 收集整理的這篇文章主要介紹了 CircleList 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

    • 1 循環鏈表的實現
      • 1.1 什么是循環鏈表
      • 1.2 循環鏈表的邏輯構成
      • 1.3 循環鏈表的繼承層次結構
      • 1.4 循環鏈表的實現思路
      • 1.5 循環鏈表的實現要點
    • 2 代碼實現
    • 3 循環鏈表的應用

1 循環鏈表的實現

1.1 什么是循環鏈表

概念上:

  • 任意數據元素都有一個前驅和一個后繼。
  • 所有的數據元素的關系構成一個邏輯上的環。

實現上:

  • 循環鏈表是一種特殊的單鏈表。
  • 尾結點的指針保存了首結點的地址。

1.2 循環鏈表的邏輯構成

1.3 循環鏈表的繼承層次結構

1.4 循環鏈表的實現思路

  • 通過模板定義CircleList類,繼承自LinkList類。
  • 定義內部函數last_to_first(),用于將單鏈表首尾相連。
  • 特殊處理:首元素的插入操作和刪除操作。
  • 重新實現:清空操作和遍歷操作。

1.5 循環鏈表的實現要點

插入位置為0時:

  • 頭結點和尾結點均指向新結點。
  • 新結點成為首結點插入鏈表。

刪除位置為0時:

  • 頭節點和尾結點指向位置為1的結點。
  • 安全銷毀首結點。

2 代碼實現

CircleList.h

#ifndef CIRCLELIST_H #define CIRCLELIST_H#include "LinkList.h"namespace LemonLib {template < typename T > class CircleList : public LinkList<T> { protected:typedef typename LinkList<T>::Node Node;Node* last() const{return this->position(this->m_length - 1)->next;}void last_to_first() const{last()->next = this->m_header.next;}int mod(int index) const{return (this->m_length == 0) ? 0 : (index % this->m_length);}public:bool insert(int index, const T& e){bool ret = true;index = index % (this->m_length + 1); // 由于是循環列表,所以i的值可以比較大ret = LinkList<T>::insert(index, e); // 調用父類的插入函數if (ret && (index == 0)) // 插入成功,并且插入的是第0個位置{last_to_first(); // 首尾相連}return ret;}bool insert(const T& e){return insert(this->m_length, e);}bool remove(int index){bool ret = true;index = mod(index);if (index == 0) // 刪除的為第0個元素{Node* toDel = this->m_header.next;if (toDel != NULL) // 刪除的結點有效{this->m_header.next = toDel->next;this->m_length--;if (this->m_length > 0) // 當前的結點個數大于1{last_to_first();if (this->m_current == toDel){this->m_current = toDel->next;}}else // 當前僅有一個結點{this->m_header.next = NULL;this->m_current = NULL;}this->destroy(toDel);}else // 刪除的結點無效{ret = false;}}else{ret = LinkList<T>::remove(index);}return ret;}bool get(int index, T& e) const{return LinkList<T>::get(mod(index), e);}T get(int index) const{return LinkList<T>::get(mod(index));}bool set(int index, const T& e){return LinkList<T>::insert(mod(index), e);}int find(const T& e){int ret = -1;/* 不能以如下的方式實現find函數,如果我們先把循環鏈表編程單鏈表,然后調用* 父類的find函數,如果在父類的find函數進行比較時(會重載比較操作符)拋出* 出了異常,那么我們就無法保證異常安全性,也就是拋出異常后我們的循環鏈表* 無法從單鏈表恢復為循環鏈表,也就是破壞了對象的狀態,不是異常安全的。* last()->next = NULL;* ret = this->find(e);* last_to_first();*/Node* slider = this->m_header.next;for (int i=0; i<this->m_length; i++){if (slider->value == e){ret = i;break;}slider = slider->next;}return ret;}bool move(int index, int step){return LinkList<T>::move(mod(index), step);}bool end(){return (this->m_length == 0) || (this->m_current == NULL);}void clear(){while (this->m_length > 1){remove(1); // 為了提高效率}if (this->m_length == 1){Node* toDel = this->m_header.next;this->m_header.next = NULL;this->m_current = NULL;this->m_length = 0;this->destroy(toDel);}}~CircleList(){clear();} }; }#endif // CIRCLELIST_H

3 循環鏈表的應用

約瑟夫環問題:

main.cpp

#include <iostream>#include "SmartPointer.h" #include "Exception.h" #include "Object.h" #include "List.h" #include "SeqList.h" #include "StaticList.h" #include "DynamicList.h" #include "Array.h" #include "StaticArray.h" #include "DynamicArray.h" #include "LinkList.h" #include "StaticLinkList.h" #include "Pointer.h" #include "SmartPointer.h" #include "SharedPointer.h" #include "CircleList.h"using namespace std; using namespace LemonLib;void joseph(int num, int start, int step) {CircleList<int> cl;for (int i=1; i<=num; i++){cl.insert(i);}cl.move(start-1, step-1);while (cl.length() > 0){cl.next();cout << cl.current() << endl;cl.remove(cl.find(cl.current()));} }int main() {joseph(41, 1, 3);return 0; }

總結

以上是生活随笔為你收集整理的CircleList的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 国产又大又黑又粗免费视频 | 日韩诱惑 | 激情一区二区三区 | 羞羞网站在线看 | 亚洲一区二区三区午夜 | 少妇高潮21p | 自拍偷拍第八页 | 亚洲一区二区三区四 | 久久短视频 | 青青草综合视频 | 日本r级电影在线观看 | 无码熟妇αⅴ人妻又粗又大 | 一边摸一边抽搐一进一出视频 | 国产激情在线视频 | 亚洲天堂最新 | 侵犯女教师一区二区三区 | 欧美网站在线观看 | 97影音| 黄色性生活一级片 | 国产麻豆影视 | 老司机在线观看视频 | av一区二区三区四区 | 日本黄色aaa | 成人激情视频在线 | 亚洲另类在线观看 | 狠狠干2020 | 久久国产网 | 国产精品电影网站 | 色偷偷av男人的天堂 | 好吊操视频这里只有精品 | 日韩一区二区在线观看 | 日本视频网址 | wwwwww国产| 一级大毛片 | 无码少妇一区二区三区 | 欧美精品在欧美一区二区 | 亚洲欧美乱日韩乱国产 | 91看片看淫黄大片 | 欧美日韩一区二区在线观看 | 精品视频站长推荐 | 操操日日 | 91精品婷婷国产综合久久蝌蚪 | 老熟妇仑乱一区二区视频 | 午夜精品偷拍 | 四季av日韩精品一区 | 国产绿帽刺激高潮对白 | 91看片视频| 国产婷婷色一区二区三区 | 欧美性受xxxx黑人xyx性 | www.国产com| 美女黄色真播 | 久久六六| 粉嫩aⅴ一区二区三区四区五区 | 黑白配高清国语在线观看 | 精品无码成人久久久久久免费 | 黄色喷水视频 | 亚洲成人黄色网址 | 一区二区三区在线观 | 爱爱爱爱网站 | 亚洲第一页色 | 国产精品一区二区电影 | 国产精品扒开做爽爽爽的视频 | 国产精品福利导航 | 野外(巨肉高h) | 国产一级二级 | re久久| 蜜桃色一区二区三区 | 老牛影视av牛牛影视av | 一级黄色性生活视频 | 亚洲天堂网一区 | jjzz黄色片| 草草影院国产第一页 | 久久久久久久久久久久 | 在线看免费 | 女性裸体不遮胸图片 | 成人免费视频播放 | 精品乱码一区二区三区 | www天天操| 小色哥网站 | 用我的手指扰乱你 | 欧美 亚洲 一区 | 日韩aaaaa | 天天拍夜夜操 | 色网址在线观看 | www.香蕉视频 | 国产精品自拍小视频 | 女人黄色片 | 樱桃国产成人精品视频 | 国产一区二区三区在线观看 | 啊v视频在线 | 日韩一区av在线 | 欧美一区一区 | 国产96视频 | 成人污视频 | 国产一级片黄色 | 特级西西444www大精品视频 | 538任你躁在线精品免费 | 午夜激情久久 | 变态另类一区二区 |