模拟实现list
来源:互联网 发布:金石软件win10 编辑:程序博客网 时间:2024/06/07 10:14
list是类库中的一个类,可以将其视为双向链表。
使用它的好处是在任何位置增加或删除元素都很快
缺点是不支持随机存取
话不多说,直接上代码:
代码后面都有注释,希望看完可以对你有帮助。
#include<iostream>#include<assert.h>#include<windows.h>using namespace std;#pragma oncetypedef int DataType;struct Node{Node(const DataType& data):_data(data), _next(NULL), _pre(NULL){}DataType _data; //值Node* _next; //下一个节点Node* _pre; //上一个节点};class List{public:List():_head(NULL), _tail(NULL), _size(0){}List(size_t n, const DataType& data){}List(const List& l){}List& operator=(const List& l){if (this != &l){}return *this;}//尾插void PushBack(const DataType& data){//构造一个新的节点Node* _node = new Node(data);//链表为空if (NULL == _head){_head = _tail = _node;}//链表不为空else{_tail->_next = _node; //先将新节点链接到尾部_node->_pre = _tail;_tail = _tail->_next; //将尾节点向后移}++_size;}//尾删void PopBack(){//链表为空直接返回if (_head == NULL)return;//链表中只有一个节点else if (_head == _tail){delete _tail;_tail = _head = NULL;}//链表中有多个节点else{_tail = _tail->_pre;delete _tail->_next;_tail->_next = NULL;}--_size;}//头插void PushFront(const DataType& data){Node* _node = new Node(data);if (_head == NULL)_head = _tail = _node;else{_node->_next = _head;_head->_pre = _node;_node = _head;}++_size;}//头删void PopFront(){//链表为空if (_head == NULL)return;//链表中只有一个节点else if (_head == _tail){delete _head;_head = _tail = NULL;}//链表中有多个节点else{_head = _head->_next;delete _head->_pre;_head->_pre == NULL;}--_size;}//任意位置的插入void Insert(Node* pos, const DataType& data){//此处需要注意assert和if检验的区别assert(pos);assert(data);if (pos == _tail){//相当于尾插PushBack(data);}else{Node* _node = new Node(data);//先建立起_node pos pos->_next的三角关系_node->_next = pos->_next;pos->_next->_pre = _node;pos->_next = _node;_node->_pre = pos;++_size;}}//任意位置的删除void Erase(Node* pos){assert(pos);if (_head == NULL)return;else if (_head == pos)PopFront();//头删else if (_tail == pos)PopBack();else{pos->_pre->_next = pos->_next;pos->_next->_pre = pos->_pre;delete pos;pos == NULL;--_size;}}void DestoryList(){size_t size = _size;while (size){PopFront();--size;}}void Clear(){DestoryList();_size = 0;}void PrintList(){Node* cur = _head;size_t size = _size;while (size){ cout << cur->_data << "";cur = cur->_next;--size;}cout << endl;}Node Front(){return *_head;}const Node Front()const{return *_head;}Node Back(){return *_tail;}const Node Back()const{return *_tail;}size_t Size(){return _size;}bool Empty(){return 0 == _size;}private:Node* _head;Node* _tail;size_t _size;};
测试部分只是测试了简单的头插、头删、尾插、尾删。
读者有兴趣可自行测试
void FunTest(){List l;l.PushFront(1);l.PrintList();l.PushBack(2);l.PushBack(3);l.PushBack(4);l.PushBack(5);l.PushBack(6);l.PushBack(7);l.PushBack(8);l.PrintList(); l.PopBack();l.PrintList();l.PopFront();l.PrintList();}int main(){FunTest();system("pause");return 0;}
阅读全文
0 0
- <STL>模拟实现List
- C++::模拟实现List
- STL-模拟实现List
- 模拟实现 list
- list模拟实现
- 模拟实现list(迭代器)
- 【STL】模拟实现list
- 模拟实现list(iterator)
- 模拟实现list(迭代器)
- list简单模拟实现
- 模拟实现list
- 数据结构::模拟STL实现list
- 模板类模拟实现List
- 模拟实现STL中的list
- 模拟实现STL中的list
- STL模拟实现List+迭代器
- 【STL】list的应用和模拟实现
- 【STL】 list的应用及模拟实现
- spring AOP的实现原理(动态代理)
- NEUQOJ 1198: 三进制小数
- 管理 Java 类路径
- hdu 6222
- org.springframework.validation.BindException:
- 模拟实现list
- 分割树叶(数字图像处理)
- OpenCV入门学习之读取usb摄像头图像,实时显示
- C语言队列之链队列
- ORACLE 查看用户会话,强制结束,并删除用户.
- PyTorch的dropout设置训练和测试模式
- Yilia主题+实现文章目录
- 监听器listener
- sublime3注册码