#include
using namespace std;
// 实现链表增删查改
template
class Linklist
{
template
friend ostream &operator<<(ostream &out, Linklist &ra);
private:
T m_data;
Linklist *m_next;
public:
Linklist(T data = 0);
~Linklist();
void List_add(T const &ra);
void List_del(T &ra);
T *List_find(T &ra);
void List_change(T &ra, T &rb);
};
template
Linklist::Linklist(T data)
{
m_data = data;
m_next = NULL;
}
template
Linklist::~Linklist()
{
delete m_next;
}
template
void Linklist::List_add(T const &ra)
{
Linklist *newl = new Linklist(ra);
Linklist *cur = this;
if (cur->m_next == NULL || ra <= cur->m_next->m_data)
{
newl->m_next = cur->m_next;
cur->m_next = newl;
return;
}
while (cur->m_next != NULL)
{
if (ra <= cur->m_next->m_data)
{
newl->m_next = cur->m_next;
cur->m_next = newl;
return;
}
cur = cur->m_next;
}
cur->m_next = newl;
}
template
void Linklist::List_del(T &ra)
{
Linklist *cur = this;
while (cur->m_next != NULL)
{
if (cur->m_next->m_data == ra)
{
Linklist *temp = cur->m_next;
cur->m_next = cur->m_next->m_next;
delete temp;
return;
}
cur = cur->m_next;
}
}
template
T *Linklist::List_find(T &ra)
{
Linklist *cur = this;
while (cur != NULL)
{
if (cur->m_data == ra)
{
return &(cur->m_data);
}
cur = cur->m_next;
}
return NULL;
}
template
void Linklist::List_change(T &ra, T &rb)
{
Linklist *cur = this;
while (cur != NULL)
{
if (cur->m_data == ra)
{
cur->m_data = rb;
return;
}
cur = cur->m_next;
}
}
template
ostream &operator<<(ostream &out, Linklist &ra)
{
Linklist *cur = &ra;
while (cur != NULL)
{
out << cur->m_data << ' ';
cur = cur->m_next;
}
return out;
}
// 实现按数据域内容排序的链表功能,在List_add()函数中进行修改
//...
// 以下为新增代码
//...
// 修改后的List_add()函数,实现有序插入
/*
template
void Linklist::List_add(T const &ra)
{
Linklist *newl = new Linklist(ra);
Linklist *cur = this;
if (cur->m_next == NULL || ra <= cur->m_next->m_data)
{
newl->m_next = cur->m_next;
cur->m_next = newl;
return;
}
while (cur->m_next != NULL)
{
if (ra <= cur->m_next->m_data)
{
newl->m_next = cur->m_next;
cur->m_next = newl;
return;
}
cur = cur->m_next;
}
cur->m_next = newl;
}
*/
//...