listtools.h
#ifndef LISTTOOLS_H
#define LISTTOOLS_H
namespace LinkedListSavitch
...{
template<class T>
class Node
...{
private:
T data;
Node<T> *link;
public:
Node()...{};
Node(const T& theData,Node<T>* theLink):data(theData),link(theLink)...{}
Node<T>* getLink() const...{return link;}
const T getData() const ...{return data;}
void setData(const T& theData)...{data=theData;}
void setLink(Node<T>* pointer)...{link=pointer;}
};
template<class T>
void headInsert(Node<T>*& head,const T& theData);
//前提条件:指针变量head指向
//链表的头节点.
//执行结果:一个包含数据theData的新节点
//被添加到链表的头部
template<class T>
void insert(Node<T>* afterMe,const T& theData);
//前提条件: afterMe指向链表中的某个节点。
//执行结果: 一个包含数据theData的新节点被添加到链表中afterMe所指向的
//节点之后。
template<class T>
void deleteNode(Node<T>* before);
//前提条件:指针before所指向的节点不是链表的最后一个节点。
//执行结果:指针before所指向的下一个节点已经从链表删除,
//并且相应的内存交还给自由堆。
template<class T>
void deleteFirstNode(Node<T>*& head);
//前提条件:指针head指向链表的第一个节点,
//并且链表中至少有一个节点。
//执行结果:指针head所指向的节点已经从链表中删除,
//并且相应的内存交还给自由堆。
template<class T>
Node<T>* search(Node<T>* head,const T& target);
//前提条件:指针head指向链表的头节点。
//最后一个节点中的指针变量值为NULL。
//==为类型T定义。
//(==操作符用作判断是否相等的准则)。
//如果链表为空,则head等于NULL.
//返回一个指针,该指针指向数据等于target的第一个节点。
//如果没有节点等于target,
//则函数返回NULL。
}//LinkListSavitch
#endif//LISTTOOLS_Hlisttools.cpp
#include "listtools.h"
#include <cstddef>
namespace LinkedListSavitch
...{
template<class T>
void headInsert(Node<T>*& head,const T& theData)
...{
head=new Node<T>(theData,head);
}
template<class T>
void insert(Node<T>* afterMe,const T& theData)
...{
afterMe->setLink(new Node<T>(theData,afterMe->getLink()));
}
template<class T>
void deleteNode(Node<T>* before)
...{
Node<T> *discard;
discard=before->getLink();
before->setLink(discard->getLink());
delete discard;
}
template<class T>
void deleteFirstNode(Node<T>*& head)
...{
Node<T> *discard;
discard=head;
head=head->getLink();
delete discard;
}
//使用cstddef;
template<class T>
Node<T>* search(Node<T>* head,const T& target)
...{
Node<T>* here=head;
if(here==NULL)//如果是空链表
...{
return NULL;
}
else
...{
while (here->getData()!=target && here->getLink()!=NULL)
here=here->getLink();
if(here->getData()==target)
return here;
else
return NULL;
}
}
}//LinkedListSavitchTestList.cpp
#include <iostream>
using std::cout;
using std::cin;
using namespace std;
#include "listtools.h"
#include "listtools.cpp"
using namespace LinkedListSavitch;
int main(char* EventArgs)
...{
Node<int> *head=new Node<int>(1,NULL);
/**//* head->setData(1);
head->setLink(NULL);*/
headInsert(head,2);
insert(head,3);
//headInsert(head,4);
Node<int> *display=head;
while (display->getLink()!=NULL)
...{
cout<<display->getData()<<" ";
display=display->getLink();
}

int f;
cin>>f;
return 0;
}
本文详细介绍了一个通用链表类的实现,包括插入、删除和搜索等核心功能。通过模板类实现,支持不同数据类型的链表操作。

被折叠的 条评论
为什么被折叠?



