一个封装的链表模板类
来源:互联网 发布:怎么海淘 知乎 编辑:程序博客网 时间:2024/06/06 12:30
由于工作中经常用到链表,所以自己封装了个简单的链表模板类。以便使用
/*
* 链表模板
*/
#pragma once
#define NULL 0
template <class T> class PtrList
{
public:
PtrList() { pFirst = 0; }
PtrList(PtrList &p) { pFirst = p.pFirst; }
void AddNode (T &t); // 增加结点
void RemoveNode (T &t); // 移除结点
void RemoveAll (); // 移除所有结点
T * FindNode (T &t); // 查找结点
T * GetNode(); // 遍历结点
~PtrList();
protected:
struct Node{
Node *pNext;
T *Pt;
};
Node * pFirst;
};
template <class T>
void PtrList<T>::AddNode(T &t)
{
Node *temp = new Node;
temp->Pt = &t;
temp->pNext = pFirst;
pFirst = temp;
}
template <class T>
T * PtrList<T>::FindNode(T &t)
{
for (Node *p = pFirst; p; p = p->pNext)
{
if ( *(p->Pt) == t)
return p->Pt;
}
return NULL;
}
/*
* 调用者可通过循环调用此函数以遍历所有结点。
*
*/
template<class T>
T * PtrList<T>::GetNode()
{
if (pFirst == NULL)
return NULL;
Node *p = pFirst;
pFirst = pFirst->pNext;
return p->Pt;
}
template <class T>
void PtrList<T>::RemoveNode(T &t)
{
Node *q = 0;
if ( *(pFirst->Pt) == t)
{
q = pFirst;
pFirst = pFirst->pNext;
}
else
{
for (Node *p = pFirst; p->pNext; p = p->pNext)
if ( *(p->pNext->Pt) == t)
{
q = p->pNext;
p->pNext = q->pNext;
break;
}
}
if (q)
{
delete q;
q = 0;
}
}
template <class T>
void PtrList<T>::RemoveAll()
{
Node *p = 0;
while (p = pFirst)
{
pFirst = pFirst->pNext;
delete p;
p = 0;
}
}
template <class T>
PtrList<T>::~PtrList()
{
Node *p = 0;
while (p = pFirst)
{
pFirst = pFirst->pNext;
delete p;
p = 0;
}
}
使用方法:
PtrList <int> List, List1; // 模板实例化
int i = 34, j = 35, k = 36;
List.AddNode(i); // 增加结点
List.AddNode(j);
List.AddNode(k);
List.RemoveNode(j); // 移除结点
List1 = List; // 此句为了后面的遍历所使用
while (1)
{
int *dd = List1.GetNode(); // 通过while遍历所有结点
if (dd == 0)
break;
}
- 一个封装的链表模板类
- 用类模板封装链表
- liferay中站点的建立及封装一个Util类用于站点模板的引用
- 利用TableModel封装一个表的类
- 一个封装的Ajax类
- smarty的一个封装类
- 一个封装的jacob类
- CException 类的一个封装
- Gson封装的一个类
- CList封装模板类
- 一个仿Java类封装的std::list封装类
- 页面模板的标记封装
- 一个封装的不错的串口类
- 一个封装的实用的EXCEL类
- 一个简单的Fibonacci类的封装
- 封装的一个完整的分页类
- 封装的一个网络判断的类
- 对二叉树的基本操作的类模板封装
- 什么是KDJ指标
- 我的春节
- 向Visual Basic程序员介绍My命名空间
- 如何用VB6写COM组件
- [VBS]转换二进制数据为字符串常用办法
- 一个封装的链表模板类
- Tomcat5.5启动时提示“The Apache Tomcat Native library which allows optimal performance in production environments was not found”
- MicrosoftVBscript运行时错误(完整版)共121个
- "无法找到资源"
- VB制作的可以限制输入的文本框
- 已调试好的asp程序在VB中转换为组件的技巧
- vb中使用Windows Forms
- FTP服务器如何实现安全性
- 利用vbs脚本设置IE的打印页眉页脚信息