作者仅仅用不到100行代码就实现了双向链表。
包括以下功能:
1. 添加节点
2. 删除节点
3. 取得头节点
4. 取得尾节点
5. 取得下一个节点
6. 取得上一个节点
7. 链表是否为空的判断
8. 取得链表节点个数
该代码摘录自 IPMsg342r2
#ifndef __TLIST_H
#define __TLIST_H
struct TListObj {
TListObj *prior, *next;
};
class TList {
protected:
TListObj top;
int num;
public:
TList(void);
void Init(void);
void AddObj(TListObj *obj);
void DelObj(TListObj *obj);
TListObj *TopObj(void);
TListObj *EndObj(void);
TListObj *NextObj(TListObj *obj);
TListObj *PriorObj(TListObj *obj);
BOOL IsEmpty() { return top.next == ⊤ }
int Num() { return num; }
};
#endif //__TLIST_H
#include "TList.h"
TList::TList(void)
{
Init();
}
void TList::Init(void)
{
top.prior = top.next = ⊤
num = 0;
}
void TList::AddObj(TListObj * obj)
{
obj->prior = top.prior;
obj->next = ⊤
top.prior->next = obj;
top.prior = obj;
num++;
}
void TList::DelObj(TListObj * obj)
{
if (obj->next) {
obj->next->prior = obj->prior;
}
if (obj->prior) {
obj->prior->next = obj->next;
}
obj->next = obj->prior = NULL;
num--;
}
TListObj* TList::TopObj(void)
{
return top.next == &top ? NULL : top.next;
}
TListObj* TList::EndObj(void)
{
return top.next == &top ? NULL : top.prior;
}
TListObj* TList::NextObj(TListObj *obj)
{
return obj->next == &top ? NULL : obj->next;
}
TListObj* TList::PriorObj(TListObj *obj)
{
return obj->prior == &top ? NULL : obj->prior;
}
//测试代码
int main()
{
//有时间再写吧!
return 0;
}
by fervent 2013年9月6日