#ifndef vlyflist_h_
#define vlyflist_h_
namespace vlyflist
t data;
node* prev;
node* next;
};//迭代器
class iteretor
//前置++
iteretor& operator++()
//後置++
iteretor& operator++(int)
//前置--
iteretor& operator--()
//後置--
iteretor& operator--(int)
//解引用
t& operator*() const
//==
bool operator==(const iteretor& it) const
//!=
bool operator!=(const iteretor& it) const
private:
node* current; //當前所指資料
};vlyflist() : thesize(0)
vlyflist(const vlyflist& l)
~vlyflist()
delete head;
delete tail;
} //拷貝賦值
vlyflist& operator=(const vlyflist& l)
return *this;
} //==
bool operator==(const vlyflist& l)
//頭插
void push_front(t& x)
//尾插
void push_back(t& x)
//訪問第乙個元素
t& front()
const t& front() const
//訪問最後乙個元素
t& back()
const t& back() const
//頭刪
void push_back()
//尾刪
void push_front()
//刪第i個節點
void deletei(size_t i)
//第乙個節點迭代器
iterator begin()
//tail的迭代器
iterator end()
//向第i個位置插入節點i>0,返回新節點的迭代器
iteretor insert(unsigned i, t& x)
//鍊錶初始化
void init()
size_t size() const
bool empty() const
//迭代器
private:
node* head;
node* tail;
size_t thesize;
};}#endif
更新後的雙向鍊錶,上面的鍊錶慘不忍睹,看看下面重構的吧
實在忍不住,模仿stl寫了個閹割版的list,還沒加迭代器,等搞完stl原始碼再說吧。
#pragma once
#include namespace vlyf
; node* next;
node() = default;
node(key const& k) : key(k) {}
};template class list
;public:
list()
~list();
linktype begin() const
linktype end() const
linktype search(t const&) const;
linktype erase(linktype position);
void insert(linktype position, t const& x);
void pushback(t const& x)
void pushfront(t const& x)
void popfront()
void popback()
void clear();
void remove(t const& x);
void unique();
void delete(t const& x);
protected:
void transfer(linktype position, linktype first, linktype last);
};template inline list::linktype list::search(t const& k) const
return p;
}template inline void list::insert(list::linktype position, t const& x)
template inline void list::delete(t const& x)
template inline list::linktype list::erase(list::linktype position)
template inline void list::clear()
head->next = head;
head->prev = head;
}template inline void list::remove(t const& x)
first = tmp;}}
template inline void list::unique()
}template inline void list::transfer(linktype position,
linktype first,
linktype last)
} // namespace vlyf
mysql 雙向鍊錶 雙向鍊錶
雙向鍊錶是鍊錶變型,相比於單鏈表導航或者是向前和向後的兩種方式。以下是重要的術語來理解雙向鍊錶的概念 link 鍊錶的每個鏈路儲存資料稱為乙個元素。linkedlist linkedlist包含連線鏈結到名為首先第乙個鏈結,並稱為最後的最後乙個鏈結 last 雙向鍊錶表示 按照如上圖中所示,以下是要...
雙向鍊錶(鍊錶)
雙向鍊錶 每個節點包含指向後繼節點的指標和指向前驅節點的指標。繼承關係圖 實體圖 duallinklist.h duallinklist 雙向鍊錶類模板 成員變數 node 節點實體 m header 頭節點 m length 鍊錶長度 m step 步進長度 m current 當前節點前乙個節點...
雙向鍊錶 3 反轉雙向鍊錶
雙向鍊錶的反轉過程,可以參考下面的例圖。a 原始雙向鍊錶 b 反轉後的雙向鍊錶 下面是乙個用於反轉雙向鍊錶的簡單方法。所需要做的事情就是交換每個節點的前向指標和後向指標,然後調整鍊錶的頭指標和尾指標。include struct node 對鍊錶進行反轉 void reverse node head...