模擬實現 list

2021-07-30 14:50:40 字數 1821 閱讀 4454

鍊錶前面我已經寫過了,不過寫的是單鏈表,而c++庫中的list是雙鏈表,那麼,我們就來模擬實現一下雙鏈表,這樣對於庫中的list也會有更加深刻的了解。

那麼首先我們先來了解一下雙鏈表的結構,雙鏈表無非就是比單鏈表多了一條鏈,單鏈表只有一條指向下乙個節點的鏈,而雙鏈表會多一條指向前乙個節點的鏈。說白了就是多了乙個指標罷了。

而具體的函式功能還是那些,那麼我們就來實現這個鍊錶吧!

#include

using namespace std;

#include

#pragma once

typedef int datatype;

struct node //節點

datatype _data; //值

node* _pnext; //下乙個節點

node* _ppre; //上乙個節點

};class list

list(size_t n, const datatype&

data

= datatype())

{}list(const list

& l)

list

& operator=(const list

& l)

return

*this;

}~list()

//尾插

void pushback(const datatype&

data)

else

++_size;

}//尾刪

void popback()

else

if (_phead == _ptail)//如果只有乙個節點,刪除頭節點,將兩個指標都置空

else

--_size;

}//頭插

void pushfront(const datatype&

data)

else

++_size;

}//頭刪

void popfront()

else

if (_phead == _ptail)

else

--_size;

}//插入函式

void insert(node* pos, const datatype&

data)

else

}//刪除

void erase(node* pos)

else

if (pos==_phead)

else

if (pos == _ptail)

else

}void assign(size_t n, const datatype data

= datatype());

void clear()

void _destroylist()

}void printlist()

cout << endl;

}//access

node& front()

const node& front()const

node& back()

const node& back()const

size_t size()const

bool empty()const

private:

node* _phead;

node* _ptail;

size_t _size;

};void funtest()

int main()

模擬實現list

構造 介面 插入刪除 交換 清空 include using namespace std list的節點類 template class t struct listnode listnode ppre listnode pnext t val list的迭代器類 template classt,cl...

C 模擬實現List

雙向鍊錶 include includeusing namespace std typedef nodenode templatestruct node t data 鍊錶中的資料 node pnext 下乙個節點 node ppre 前乙個節點 templateclass list templat...

STL 模擬實現list

list是標準模板庫中的乙個容器,實際上是一條帶頭節點的雙向鍊錶。通過與迭代器的組合使用,使得工作效率大大提高。要注意 迭代器只是為了訪問 修改和遍歷物件,不對空間進行管理。pragma once include using namespace std 定義鍊錶結點結構體 templatestruc...