【代码】模板实现双向链表的去重、拼接、合并、排序
来源:互联网 发布:蚌埠学院网络教学平台 编辑:程序博客网 时间:2024/06/09 14:19
/*模板实现双向链表的去重、拼接、合并、排序*/#pragma once#include<iostream>template <class T>struct Node{T _data;Node<T> *_next;Node<T> *prev;};template <class T>class SeqList{public:SeqList():_head(NULL),_tail(NULL){}SeqList(const SeqList & l){}SeqList& operator = (const SeqList & l){}~SeqList(){_Clear();}void PushBack(const T &x){Node<T>* tmp = new Node<T>;InitNode(tmp, x);if (_head == NULL){_head = _tail = tmp;}else{_tail->_next = tmp;tmp->prev = _tail;_tail = _tail->_next;}}void Unique()//去重{Node<T>*cur = _head;while (cur){Node<T>*tmp = cur->_next;while (tmp){Node<T>*DelTmp = tmp;if (cur->_data == tmp->_data){if (tmp->_next){cur->_next = tmp->_next;tmp->_next->prev = cur;}else{cur->_next = NULL;}tmp = tmp->_next;DelTmp->_next = NULL;DelTmp->prev = NULL;delete DelTmp;}elsetmp = tmp->_next;}cur = cur->_next;}}void Sort()//排序{Node<T>*Cur = _head;while (Cur){Node<T>*CurNext = Cur->_next;while (CurNext){if (Cur->_data > CurNext->_data){swap(Cur->_data, CurNext->_data);}CurNext = CurNext->_next;}Cur = Cur->_next;}}void Splice(Node<T>*pos, Node<T>*begin, size_t size)//拼接{Node<T>*end = begin;while (--size){end = end->_next;}if (end->_next){end->_next->prev = NULL;}end->_next = pos->_next;begin->prev = pos;if (pos->_next){pos->_next->prev = end;}pos->_next = begin;}void Splice(Node<T>*pos, SeqList &l){Node<T>*begin = l.Gethead();Node<T>*end = l.Gettail();end->_next = pos->_next;begin->prev = pos;if (pos->_next){pos->_next->prev = end;}pos->_next = begin;}void Merge(SeqList &l)//合并{Splice(_tail, l);Sort();l._head = NULL;l._tail = NULL;}void InitNode(Node<T>*_node,const T &x){_node->prev = NULL;_node->_next = NULL;_node->_data = x;}Node<T>* Gettail(){return _tail;}Node<T>*Gethead(){return _head;}protected:void _Clear(){Node<T>*cur = _head;while (cur){Node<T>*tmp = cur;cur = cur->_next;tmp->prev = NULL;tmp->_next = NULL;delete tmp;}}Node<T> *_head;Node<T> *_tail;};
电脑没电了,如有不足希望批评指正,如有疑问也可以提问。
本文出自 “pawnsir的IT之路” 博客,请务必保留此出处http://10743407.blog.51cto.com/10733407/1751104
0 0
- 【代码】模板实现双向链表的去重、拼接、合并、排序
- 【C++】模版实现双向链表的各种操作(如:逆置、去重Unique、分类(冒泡)、合并)
- js史上最简单的数组合并去重排序
- JavaScript内置对象Array的扩展(去重,排序,合并)
- 剑指offer:合并两个排序的链表 代码实现
- 两个有序数组的合并排序,Java代码实现,并去重复,考虑空间利用率问题
- 单链表的合并【去重】
- 数组合并+数组去重+数组排序
- 两个List合并去重,并排序
- 模板实现双向链表
- 模板实现双向链表
- list的拼接与去重
- 关于两表之拼接,去重
- java实现两个数组合并去重
- 【规范代码】关于vector的去重及排序
- 用最少的代码做到数组去重、排序
- js实现去重代码
- XXFSDDX HDU6119 区间合并模板(交叉区间去重)
- 【总结】C++静态成员函数及测试用例
- 解决 NSObjCRuntime的问题
- 【探索】VS下虚继承实现的方法-1
- 【探索】VS下实现虚继承的方法-2
- 关于mybatis的collection映射问题
- 【代码】模板实现双向链表的去重、拼接、合并、排序
- 基于hadoop与spark的大数据分析实战——第二章、Spark部署与安装
- 【干货】C++通过模板特化实现类型萃取实例--实现区分基本类型与自定义类型的memcpy
- 【代码】模板实现动态线性表(无类型萃取)
- 【技巧】通过适配器模式完成栈的数据结构
- 【代码】模板动态线性表&类型萃取
- 【干货】share智能指针的模拟实现
- 【一张大大的图片】类和对象知识点总结
- 【智能指针的延伸】两种定制删除器的实现方法