鍊錶前面我已經寫過了,不過寫的是單鏈表,而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...