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_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_H
listtools.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;
}
}
} // LinkedListSavitch
#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;
}
}
} // LinkedListSavitch
TestList.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;
}
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;
}