【C++/STL】list的实现(没有采用迭代器和空间配置器所实现的双向链表的基本功能)
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了【C++/STL】list的实现(没有采用迭代器和空间配置器所实现的双向链表的基本功能),小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2706字,纯文字阅读大概需要4分钟。
内容图文
<span style="font-size:18px;">#include <iostream> using namespace std; //没有采用迭代器和空间配置器所实现的双向链表的基本功能 template<class _Ty> //定义模板类 class list //list类 { public: typedef size_t size_type; //类型重定义 protected: struct _Node; //结构体_Node friend struct _Node; //友元 typedef _Node* _Nodeptr; //类型重定义 struct _Node //结构体定义 { _Nodeptr _Next,_Prev; _Ty _Value; }; protected: _Nodeptr _Head; size_type _Size; public: _Nodeptr _Buynode(_Nodeptr _Narg = 0, _Nodeptr _Parg = 0)//购买结点 { _Nodeptr _S = (_Nodeptr)malloc(sizeof(_Node)); _S->_Next = _Narg != 0 ? _Narg : _S;; _S->_Prev = _Parg != 0 ? _Parg : _S; return (_S); } public: size_type size() const //长度 { return (_Size); } bool empty() const //判空 { return (size() == 0); } explicit list():_Head(_Buynode()), _Size(0) //list无参构造函数 {} explicit list(size_type _N, const _Ty& _V):_Head(_Buynode()), _Size(0) //list构造函数 { insert(_N, _V); } _Nodeptr begin() //第一个节点 { return _Head->_Next; } _Nodeptr end() //头结点 { return _Head; } void insert(_Nodeptr _P,const _Ty& _X) //插入结点 { _Nodeptr _S = _P; _S->_Prev = _Buynode(_S,_S->_Prev); _S = _S->_Prev; _S->_Prev->_Next = _S; _S->_Value = _X; ++_Size; } void insert(size_type _M, const _Ty& _X) //插入_M个_X结点 { for(;0 < _M;--_M) { insert(begin(),_X); } } void push_front(const _Ty& _X) //头插 { insert(begin(), _X); } void pop_front() //头删 { erase(begin()); } void push_back(const _Ty& _X) //尾插 { insert(end(), _X); } void pop_back() //尾删 { erase(end()->_Prev); } void assign(size_type _N, const _Ty& _X) //重新插入 { clear(); insert(_N, _X); } _Nodeptr erase(_Nodeptr _P) //删除结点 { _Nodeptr _S = _P++; _S->_Prev->_Next = _S->_Next; _S->_Next->_Prev = _S->_Prev; free(_S); --_Size; return (_P); } void clear() //清除 { _Nodeptr _P = _Head->_Next; while(_P != _Head) { _Head->_Next = _P->_Next; _P->_Next->_Prev = _P->_Prev; free(_P); _P = _Head->_Next; } _Head->_Next = _Head->_Prev; _Size = 0; } void show() //打印 { _Nodeptr _P = _Head->_Next; while(_P != _Head) { cout<<_P->_Value<<"-->"; _P = _P->_Next; } cout<<"Over"<<endl; } ~list() //析构函数 { clear(); free(_Head); _Head = 0, _Size = 0; } }; void main() { list<int> mylist(5,1); mylist.show(); mylist.insert(2,4); mylist.show(); mylist.push_front(3); mylist.show(); mylist.push_back(4); mylist.show(); mylist.pop_front(); mylist.show(); mylist.pop_back(); mylist.show(); mylist.clear(); mylist.show(); mylist.assign(2,3); mylist.show(); }</span>
此实现仍有很多问题尚未解决,在后期会进行跟进改良,也希望大家指出错误提出建议,谢谢大家~
版权声明:本文为博主原创文章,未经博主允许不得转载。
原文:http://blog.csdn.net/qaz3171210/article/details/46834147
内容总结
以上是互联网集市为您收集整理的【C++/STL】list的实现(没有采用迭代器和空间配置器所实现的双向链表的基本功能)全部内容,希望文章能够帮你解决【C++/STL】list的实现(没有采用迭代器和空间配置器所实现的双向链表的基本功能)所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。