C 雙向線性鍊錶容器的實現

2021-07-04 09:36:30 字數 2284 閱讀 1383

// 雙向線性鍊錶容器

#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...