ITPub博客

首页 > 数据库 > 数据库开发技术 > 基于模板类的链表(转)

基于模板类的链表(转)

原创 数据库开发技术 作者:subid 时间:2007-08-16 19:52:56 0 删除 编辑
基于模板类的链表(转)[@more@]基于模板类的链表

链表的使用,克服了许多基于数组表的局限性,但是传统的使用C描述的链表,使用起来也有一定的局限性,而基于C++模板类构建的链表,方便,快速,能应付很多情况。

现在,DarkSpy就将写好的基于模板类的链表帖上来,如果发现有什么错误,请随时更正我哦。^_^

// 基于模板类的链表 (C) 2001 CONEOS Software Inc.
// by DarkSpy
#include

template
class Node
{
Node *next;
protected:
T data;
public:
Node(){};
Node(Node *t, T & d); //初始化模板类

void InsertNode(Node *p, T d); //插入一个结点
void DeleteNode(Node *&p, T d); //删除一个指定结点
Node *MakeNode(Node *p, T & d); //构建链表
void Show(Node *p); //打印链表
};

template
Node::Node(Node *t, T & d) : next(t), data(d) //初始化动作
{ }


template
void Node::InsertNode(Node *p, T d)
{
while(p->next) p = p->next; //插入结点

next = new Node[sizeof(Node)];
p->next = new Node[sizeof(Node)]; //给新结点分配空间
p->next->data = d; //指针指向当前结点的下一结点,然后将当前结点指向新的结点
p->next->next = p->next;
next = p->next;
next->next = NULL;
}

template
void Node::DeleteNode(Node * & p, T d) //删除结点
{
Node *temp = p; //保存表
Node *pre = NULL;
while(temp!=NULL && temp->data!=d) //遍历表寻找匹配键值
{
pre = temp;
temp = temp->next;
}

if(temp!=NULL)
{
if(pre==NULL) p = p->next; //表示如果在头结点找到键值

else pre->next = pre->next->next;//如果在以后结点找到键值
delete temp; //删除匹配结点
}
}

template
Node *Node::MakeNode(Node *p, T & d) //构建链表
{
Node *NEW;
NEW = new Node(p, d); //给新结点分配空间
return NEW;
}

template
void Node::Show(Node *p) //遍历结点并打印
{
while(p){
cout<

data<<;
p = p->next;
}
}

main ()
{
Node obj, *p;
p = NULL;
for(int i=1; i<=10; i++)
p = obj.MakeNode(p, i);

obj.InsertNode(p, 32);
obj.InsertNode(p, 200);

obj.Show(p); cout<<;
obj.DeleteNode(p, 10);
obj.DeleteNode(p, 32);
obj.InsertNode(p, 120);
obj.Show(p);
}

是不是很简单呢?这段代码稍稍修改就可以应用在许多方面,我们可以使用Node来建立字典等等有用的功能。

DarkSpy 2001/04/27

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/10796304/viewspace-962550/ ,如需转载,请注明出处,否则将追究法律责任。

上一篇: 算法于效率(转)
请登录后发表评论 登录
全部评论
  • 博文量
    276
  • 访问量
    398016