【C++/STL】list的实现(没有采用迭代器和空间配置器所实现的双向链表的基本功能)
来源:互联网 发布:哪些属于大数据项目 编辑:程序博客网 时间:2024/05/16 14:47
<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; //结构体_Nodefriend 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>
此实现仍有很多问题尚未解决,在后期会进行跟进改良,也希望大家指出错误提出建议,谢谢大家~
0 0
- 【C++/STL】list的实现(没有采用迭代器和空间配置器所实现的双向链表的基本功能)
- 【C++/STL】list的实现(采用空间配置器和迭代器)
- c++stl的list(双向链表)
- 【STL】实现简单的空间配置器
- 链表的基本功能实现
- C实现数组的基本功能
- 线性表基本功能的c语言实现
- 二叉树的基本功能实现(c++)
- 栈的基本功能实现(C语言)
- c语言单向链表的基本功能的实现
- JAVA用List实现Map的基本功能
- [STL]List的实现
- STL List 的实现
- 链表的建立和一些基本功能的实现
- c++stl库list简单的实现
- 实现单向链表的基本功能
- 链表队列基本功能的实现
- 【c++模板】模拟实现有模板的双向链表(List)(声明和定义分离)
- "errmsg" : "not authorized on admin to execute command { $eval: \"return 1111\" }"
- 用inno setup制作安装程序
- 你应该知道 O2O 是什么?
- android http status code
- 如何使用TestFlight进行Beta测试
- 【C++/STL】list的实现(没有采用迭代器和空间配置器所实现的双向链表的基本功能)
- 李彦宏200亿砸百度糯米后 才过了十天就……
- Linux如何上线和下线CPU
- Java Collection框架详解
- winform——文本文档
- 黑马day16 子jquery&子元素过滤选择器
- winfrom——文本内容存入流
- android 之.9.png ”点九” 图片制作方法
- 曝光补偿