迴圈鍊錶:最後乙個結點的指標域的指標又指回第乙個結點的鍊錶;
迴圈單鏈表與單鏈表的區別在於:表中最有乙個節點的指標不再是null, 而改為指向頭結點(因此要對我們原來的mylist稍作修改), 從而整個鍊錶形成乙個環.
因此, 迴圈單鏈表的判空條件不再是頭結點的指標是否為空, 而是他是否等於頭結點;
下面是mylist.h的完整**與解析, 由於**較多, 希望能夠仔細閱讀, 但其實下面的大部分**都與前面類似只是對其中幾處稍作修改, 遇到與單鏈表的不同之處, 我會與++符號作為注釋指出:
[cpp]view plain
copy
#ifndef mylist_h_included
#define mylist_h_included
#include
#include
using
namespace std;
//迴圈鍊錶
//前向宣告
template
class mylist;
template
class listiterator;
//鍊錶節點
template
class node
type data; //資料域:節點資料
node *next; //指標域:下乙個節點
};
//鍊錶
template
class mylist
; template
mylist::mylist()
template
mylist::~mylist()
// ++ 釋放到鍊錶的空節點
delete tmp;
} //這一步與前一版鍊錶相同
template
void mylist::insertfront(const type &data)
template
void mylist::insert(const type &data, int index)
// 插入鍊錶
node*newnode = new node(data);
newnode->next = searchnode->next;
searchnode->next = newnode;
} template
void mylist::remove(const type &data)
previous = searchnode;
} }
//注意判空條件
template
bool mylist::isempty() const
//顯示鍊錶中的所有資料(測試用)
template
ostream &operator<
return os;
} //listiterator 除了判空函式的判空條件之外, 沒有任何改變
template
class listiterator
//過載 *operator
const type &operator*() const
throw (std::out_of_range);
type &operator*() throw (std::out_of_range);
//過載 ->operator
const node*operator->() const
throw (std::out_of_range);
node*operator->() throw (std::out_of_range);
//過載 ++operator
listiterator &operator++() throw (std::out_of_range);
//注意:此處返回的是值,而不是reference
listiterator operator++(int) throw (std::out_of_range);
bool isempty() const;
private:
const mylist&list;
node*currentnode;
};
template
bool listiterator::isempty() const
template
const type &listiterator::operator*() const
throw (std::out_of_range)
template
type &listiterator::operator*()
throw (std::out_of_range)
template
const node*listiterator::operator->() const
throw (std::out_of_range)
template
node*listiterator::operator->()
throw (std::out_of_range)
template
listiterator&listiterator::operator++()
throw (std::out_of_range)
template
listiteratorlistiterator::operator++(int)
throw (std::out_of_range)
#endif // mylist_h_included
附-測試**:
[cpp]view plain
copy
int main()
資料結構基礎 11 迴圈鍊錶的設計與實現
迴圈鍊錶 最後乙個結點的指標域的指標又指回第乙個結點的鍊錶 迴圈單鏈表與單鏈表的區別在於 表中最有乙個節點的指標不再是null,而改為指向頭結點 因此要對我們原來的mylist稍作修改 從而整個鍊錶形成乙個環.因此,迴圈單鏈表的判空條件不再是頭結點的指標是否為空,而是他是否等於頭結點 下面是myli...
資料結構基礎 之 迴圈鍊錶
迴圈鍊錶是一種首尾相接的鍊錶。1 單迴圈鍊錶 在單鏈表中,將終端結點的指標域null改為指向表頭結點或開始結點即可。2 多重鏈的迴圈鍊錶 將表中結點鏈在多個環上。帶頭結點的單迴圈鍊錶 非空表 空表判斷空鍊錶的條件是head head next 僅設尾指標的單迴圈鍊錶 用尾指標rear表示的單迴圈鍊錶...
資料結構 迴圈鍊錶
近期我在學習資料結構,於是我自己整理了單鏈表 迴圈單鏈表 雙向鍊錶 雙向迴圈鍊錶的相關 以鞏固這段時間的學習,也希望能夠幫助初學者,希望大家在閱讀以下 時發現問題糾正於我,一起 cyclinklist.h ifndef cyclinklist h define cyclinklist h inclu...