雙向迴圈鍊錶的實現

2022-09-15 10:42:11 字數 2131 閱讀 5745

雙向迴圈鍊錶的實現

收藏我要投稿

在使用鍊錶來解決約瑟夫問題的時候,用到了迴圈鍊錶。迴圈鍊錶又分為單向迴圈鍊錶與雙向迴圈鍊錶,約瑟夫問題採用單項迴圈鍊錶可以得到很好的而解決了,但是單向鍊錶的很大的缺陷仍然存在,那就是在刪除的時候需要兩個併排指標同步移動。雙向鍊錶就可以解決這個問題,因為在雙向鍊錶中的每乙個結點都有兩個指標域來分別指向其前驅和後繼。這樣子在遍歷鍊錶時不用兩個指標,直接使用乙個就好,當鎖定位置後,取出其前驅然後再儲存當前位置最後做刪除操作就好了。

結點型別不變,存在兩個指標:

[cpp]  

#pragma once  

#include

using namespace std;  

template

class linknode //節點類  

linknode(const t& item,linknode*ptr = null)//資料與指標一同初始化的建構函式,依舊指標域預設引數為空  

~linknode(){}  

};  

迴圈鍊錶的關鍵是環的形成,而最好的方式就是在建立鍊錶的時候就形成環狀,筆者採用的是帶有頭結點的鍊錶,所以在建構函式中就可以建立乙個環出來:

[cpp]  

template

list::list()  

在每一次的插入和刪除之後需要把首尾連線起來,其餘操作可看做是普通鍊錶。

#pragma once  

#include"linknode.h"  

#include

using namespace std;  

template//繼承的過程中,加上此句派生類依然為類模板  

class list  

;  template

list::list()  

template

list::list(list& l)  

destptr->next = first;//首尾相接 建立迴圈  

first->prior = destptr;  

}  template

list::~list()  

template

void list::makeempty() //全部銷毀指標資源  

}  template

int list::length() const  

return count;  

}  template

linknode* list::gethead() const  

template

linknode* list::search(t x) const  

return null;  

}  template

linknode* list::locate(int i) const  

return current;//指向第i個元素的指標  

}  template

bool list::getdata(int i,t& x) const   //引數中有下標值的一般先判斷其下標值是否合法  

template

bool list::setdata(int i,t& x)  

template

bool list::insert(int i,t& x)  

template

linknode* list::remove(int i,t& x)  

template

bool list::isempty() const  

template

void list::input(t endtag)  

last->next = first;  //重新首尾連線  

first->prior = last;  

}  template

void list::output()//輸出  

}  template

void list::sort()//最小選擇 排序  

}  }  }  

template

void list::operator= (list&l)  

destptr->next = first;//首尾相接 迴圈  

first->prior = destptr;  

}  

雙向迴圈鍊錶的實現

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

雙向迴圈鍊錶 java實現

雙向迴圈煉表示意圖 雙向迴圈鍊錶實現 public class doublelink private int size 鍊錶長度 public nodehead 頭節點 constructor public doublelink 獲取鍊錶的長度 return public int size 判斷鍊錶...

C 實現雙向迴圈鍊錶

雙向迴圈鍊錶 除錯正常,所有功能均測試 節點類 template class listnode listnode type d,listnode n nullptr,listnode p nullptr data d next n prev p void setdata type d 雙向迴圈鍊錶 ...