double linked list雙向鍊錶

2021-07-11 11:47:15 字數 1976 閱讀 5747

[tags] c++總結

1. 節點結構體

struct doulistnode 

};

2. 類宣告
class doulist ;
(1)建構函式

doulist::doulist() 

doulist::doulist(const doulist& src)

**注意拷貝建構函式中要寫m_head = null; m_tail = null;

每次定義乙個成員函式都要考慮特殊值和邊界情況

此處呼叫了過載運算子=

拷貝建構函式是關鍵,每次出現記憶體問題都應當重點檢查拷貝建構函式

(2)過載運算子=

void doulist::operator

=(const doulist& other)

m_tail = q;

}

(3)清空,析構中直接呼叫clear()即可

void doulist::clear() 

} m_head = m_tail = null;

}doulist::~doulist()

(4)空鍊錶的判斷,當頭節點和尾節點為同一節點時為空

bool doulist::empty() const
(5)列印的形式

string doulist::to_str() const  else 

result +=

"]";

} return result;

}

(6)獲得元素(m_head->elem 和m_tail->elem)

int doulist::front() const 

int doulist::back() const

(7)從鍊錶的頭插入元素(重要)

void doulist::push_front(const int& e) 

doulistnode* t =

new doulistnode(e, null, m_head);

m_head->prev = t;

m_head = t;

}

(8)從鍊錶的尾插入元素(重要)

void doulist::push_back(const int& e) 

doulistnode* t =

new doulistnode(e, m_tail, null);

m_tail->next = t;

m_tail = t;

}

(9)從頭pop(重要)

void doulist::pop_front()
(10)從尾pop(重要)

void doulist::pop_back()
(11)友元函式

std::ostream& operator

<<(std::ostream& out, const doulist& list)

記得不能寫成:ostream& doulist::operator<<(std::ostream& out, const doulist& list)

會報錯:

『std::ostream& doulist::operator<<(std::ostream&, const doulist&)』 must take exactly one argument

因為友元函式不屬於該類

在寫每乙個成員函式的時候首先應該想清楚特殊情況和邊界情況, 盡量避免出現過多的記憶體問題

學會利用已有的成員函式,增加**的可讀性,同時也簡化**

雙鏈表(Double Linked LIst

雙鏈表屬於鍊錶的一種,有兩個指標域,分別指向直接後繼和直接前驅。所有在遍歷雙向鍊錶時,從任意乙個節點開始,都可以很方便的訪問它的前驅節點和後繼節點。使用這種方式解決了單鏈表中不能使用反向遍歷的問題。在雙鏈表中,每個節點包含三個部分 struct node head null 基本的運算形式 增加 刪...

mysql 雙向鍊錶 雙向鍊錶

雙向鍊錶是鍊錶變型,相比於單鏈表導航或者是向前和向後的兩種方式。以下是重要的術語來理解雙向鍊錶的概念 link 鍊錶的每個鏈路儲存資料稱為乙個元素。linkedlist linkedlist包含連線鏈結到名為首先第乙個鏈結,並稱為最後的最後乙個鏈結 last 雙向鍊錶表示 按照如上圖中所示,以下是要...

雙向鍊錶 3 反轉雙向鍊錶

雙向鍊錶的反轉過程,可以參考下面的例圖。a 原始雙向鍊錶 b 反轉後的雙向鍊錶 下面是乙個用於反轉雙向鍊錶的簡單方法。所需要做的事情就是交換每個節點的前向指標和後向指標,然後調整鍊錶的頭指標和尾指標。include struct node 對鍊錶進行反轉 void reverse node head...