雙向鍊錶 已更新)

2022-08-13 00:30:29 字數 3021 閱讀 4289

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