// 雙向線性鍊錶容器
#include #include #include using namespace std;
// 鍊錶類模板
templateclass list
~list(void)
list(list const& that) : m_head(null), m_tail(null)
list& operator = (list const& rhs)
return *this;
} // 獲取首元素
t& front(void)
t const& front(void) const
// 向首部壓入
void push_front(t const& data)
// 從首部彈出
void pop_front(void)
// 獲取尾元素
t& back(void)
t const& back(void) const
// 向尾部壓入
void push_back(t const& data)
// 從尾部彈出
void pop_back(void)
// 刪除所有匹配元素
void remove(t const& data)
}} // 清空
void clear(void)
// 判空
bool empty(void) const
// 大小
size_t size(void) const
// 下標運算子————****!
t& operator (size_t i)
t const& operator (size_t i) const
// 插入輸出流
friend ostream& operator << (ostream& os,
list const& list)
private:
// 節點類模板
class node
friend ostream& operator << (ostream& os, node const& node)
t m_data; // 資料
node* m_prev; // 前指標
node* m_next; // 後指標
}; // 判斷元素是否相等
bool equal(t const & a, t const& b) const
node* m_head; // 頭指標
node* m_tail; // 尾指標
public:
// 正向迭代器
class iterator
bool operator == (iterator const& rhs) const
bool operator != (iterator const& rhs) const
iterator& operator++ (void)
iterator const operator++ (int)
iterator& operator-- (void)
iterator const operator-- (int)
t& operator* (void) const
t* operator->(void) const
private:
node* m_head;
node* m_tail;
node* m_node;
friend class list;
}; // 獲取起始正向迭代器————指向第乙個元素
iterator begin(void)
// 獲取終止正向迭代器————指向最後乙個元素的下乙個位置
iterator end(void)
// 在正向迭代器前插入,返回指向新插入元素的迭代器
iterator insert(iterator loc, t const& data)
else
}// 刪除迭代器所指向的元素,並返回該元素之後的迭代器
iterator erase(iterator loc)
// 常正向迭代器
// 反向迭代器
// 常反向迭代器
};// 針對char const* 型別的成員特化版本
template<>
bool list::equal(char const* const& a, char const* const& b) const
雙向鍊錶(C實現)
list.h ifndef list h define list h typedef struct node node typedef struct list list initlist int insertnode list l,void data,int size int deletenode ...
雙向鍊錶(c 實現)
雙向鍊錶與單鏈表有許多的相似之處,但是也有不同之處。雙向鍊錶與單鏈表主要的不同在於 雙向鍊錶可以從兩個方向進行遍歷,但是單鏈表只能從頭節點遍歷到尾節點,不能從尾節點遍歷到頭節點,對於鍊錶中一些插入和刪除等操作,雙向鍊錶較單鏈表更為簡單些。所以,雙向鍊錶有其存在的特殊意義。下面是通過c 來實現雙向鍊錶...
雙向鍊錶 C 實現
雙向鍊錶在類中的實現 include include includeusing namespace std typedef int datatype struct node node pnext node ppre int data class list list const list l else...