数据结构之链表 (C++类模板实现)
来源:互联网 发布:windows双网卡配置种类 编辑:程序博客网 时间:2024/05/28 18:43
简述
前面用c写的链表主要使用泛型指针(void *)存储数据的地址,索引到不同类型的数据,而用C++类模板实现后可以直接存储数据,编译器会根据定义好的数据类型动态分配空间。
实现
//链表节点template<class T>class LinkNode{public:T data;LinkNode<T> *next;};//链表template <class T>class LinkList{public://初始化LinkList();//指定位置插入元素void insert_LinkList(int pos, T val);//头部插入void Fush_Front(T val);//尾部插入void Fush_Back(T val);//指定位置删除void RemoveByPos_LinkList(int pos);//头删void Pop_Front();//尾删void Pop_Back();//获得链表大小int size_LinkList();//根据指定位置获得数据T data_LinkList(int index);//值删除void RemoveByVal(T val);//遍历链表void Show_LinkList(void(*MyPrint)(T val));//析构函数~LinkList();private:LinkNode<T> mHeader;int mSize;};//初始化template <class T>LinkList<T>::LinkList(){this->mHeader.next = NULL;this->mSize = 0;}//指定位置插入元素template <class T>void LinkList<T>::insert_LinkList(int pos, T val){if (pos < 0 || pos > this->mSize){pos = this->mSize;}//创建新节点LinkNode<T>* newnode = new LinkNode<T>;newnode->data = val;newnode->next = NULL;//辅助指针LinkNode<T>* current = &(this->mHeader);for (int i = 0; i < pos; i++){current = current->next;}//新节点入链表newnode->next = current->next;current->next = newnode;this->mSize++;}//头部插入template <class T>void LinkList<T>::Fush_Front(T val){insert_LinkList(0, val);}//尾部插入template <class T>void LinkList<T>::Fush_Back(T val){insert_LinkList(this->mSize, val);}//指定位置删除template <class T>void LinkList<T>::RemoveByPos_LinkList(int pos){if (this->mSize == 0){return;}if (pos < 0 || tpos > this->mSize){pos = this->mSize;}//找到被删除节点的前一个节点LinkNode<T>* current = &(this->mHeader);for (int i = 0; i < pos; i++){current = current->next;}//缓存被删除节点LinkNode<T>* pDel = current->next;//建立新的前后驱关系current->next = current->next->next;//释放被删除节点delete pDel;this->mSize--;}//头删template <class T>void LinkList<T>::Pop_Front(){if (this->mSize == 0){return;}RemoveByPos_LinkList(0);}//尾删template <class T>void LinkList<T>::Pop_Back(){if (this->mSize == 0){return;}RemoveByPos_LinkList(this->mSize - 1);}//获得链表大小template <class T>int LinkList<T>::size_LinkList(){return this->mSize;}//获得数据template <class T>T LinkList<T>::data_LinkList(int index){if (this->mSize == 0){return -1;}if (index < 0 || index >= this->mSize){return -1;}LinkNode<T>* current = &(this->mHeader);for (int i = 0; i < index; i++){current = current->next;}return current->data;}//值删除template <class T>void LinkList<T>::RemoveByVal(T val){if (this->mSize == 0){return;}//辅助指针变量LinkNode<T>* prev = &(this->mHeader);LinkNode<T>* current = prev->next;while (current != NULL){if (current->data == val){prev->next = current->next;delete current;this->mSize--;break;}prev = current;current = current->next;}}//遍历链表template <class T>void LinkList<T>::Show_LinkList(void(*MyPrint)(T val)){if (this->mSize == 0){return;}LinkNode<T>* current = this->mHeader.next;while (current != NULL){MyPrint(current->data);current = current->next;}}//析构函数template <class T>LinkList<T>::~LinkList(){cout << "调用析构函数" << endl;LinkNode<T>* current = this->mHeader.next;while (current != NULL){LinkNode<T>* pNext = current->next;delete current;current = pNext;}}
阅读全文
0 0
- [数据结构]链表的实现(c++/类模板)
- 数据结构之链表 (C++类模板实现)
- <C/C++数据结构>双向链表(C++模板实现)
- [数据结构] 顺序表的实现(c++/类模板)
- 数据结构—类模板实现链表
- 数据结构之单循环链表C++(模板)
- 数据结构之链表(C实现)
- 数据结构之链表(C实现)
- [数据结构]线性表之顺序表的类模板实现
- [数据结构]线性表之单链表的类模板实现
- 数据结构之顺序表——C++模板类实现
- 数据结构(c++)栈的模板类(使用链表实现)
- [数据结构]二叉树之二叉链表的类模板实现
- [数据结构]循环链表(c++/类模板)用例JosephRing
- 数据结构(C++)最小优先权队列实现<模板类>
- [数据结构]栈的实现(c++/类模板)
- 数据结构学习:单向链表的模板类实现
- 数据结构——静态链表模板类实现
- 数据结构之动态数组 (C++类模板实现)
- 命令模式
- mongdb的插入深入
- ioc 代码
- 动态输出一个任意行列的表格
- 数据结构之链表 (C++类模板实现)
- 以后需要注意的一些Java开发规范
- Java进阶--Integer与int的种种比较
- USB之high-speed high-bandwidth endpoint
- Html学习-之bootstrap,datatables,datatimepicker,java string截取
- vue.js
- Web API接口 FileReader学习笔记
- erlang底层c定时器设计-Erlang源码学习二
- jq部分特效效果