实现代码:
#include <iostream>
using namespace std;
template<class DataType>
struct Node
{
DataType data;
Node<DataType> * next;
};
template<class DataType>
class LinkList
{
public:
LinkList();
~LinkList();
int Length() const;
void print();
void insert(DataType data,int index = 1);
void deleteByIndex(int index);
void deleteByData(DataType data);
void updateByIndex(DataType data,int index);
void updateByData(DataType olddata,DataType newdata);
DataType searchByIndex(int index) const;
int searchByData(DataType data) const;
private:
Node<DataType> *first;
int length;
};
template<class DataType>
LinkList<DataType>::LinkList()
{
first = new Node<DataType>;
first->next = NULL;
length = 0;
}
template<class DataType>
LinkList<DataType>::~LinkList()
{
while(NULL != first)
{
Node<DataType> *p = first;
first = first->next;
}
}
template<class DataType>
int LinkList<DataType>::Length() const
{
return length;
}
template<class DataType>
void LinkList<DataType>::print()
{
Node<DataType> *p = first->next;
while(NULL != p)
{
cout << p->data << " ";
p = p->next;
}
cout << endl;
}
template<class DataType>
void LinkList<DataType>::insert(DataType data,int index)
{
if(index > length + 1)
{
throw "位置出错!";
}
else
{
Node<DataType> *p = first;
for(int i = 1; i < index; i++)
{
p = p->next;
}
Node<DataType> *temp = new Node<DataType>;
temp->data = data;
temp->next = p->next;
p->next = temp;
length++;
}
}
template<class DataType>
void LinkList<DataType>::deleteByIndex(int index)
{
if(index > length)
{
throw "位置出错!";
}
else
{
Node<DataType> *p = first;
for(int i = 1; i < index; i++)
{
p = p->next;
}
Node<DataType> *temp = p->next;
p->next = temp->next;
delete temp;
length--;
}
}
template<class DataType>
void LinkList<DataType>::deleteByData(DataType data)
{
Node<DataType> *p = first;
while(NULL != p->next)
{
if(data == p->next->data)
{
Node<DataType> *temp = p->next;
p->next = temp->next;
delete temp;
length--;
}
p = p->next;
}
}
template<class DataType>
void LinkList<DataType>::updateByIndex(DataType data,int index)
{
if(index > length)
{
throw "位置出错!";
}
else
{
Node<DataType> *p = first;
for(int i = 0; i < index; i++)
{
p = p->next;
}
p->data = data;
}
}
template<class DataType>
void LinkList<DataType>::updateByData(DataType olddata,DataType newdata)
{
Node<DataType> *p = first;
while(NULL != p->next)
{
p = p->next;
if(p->data == olddata)
{
p->data = newdata;
}
}
}
template<class DataType>
DataType LinkList<DataType>::searchByIndex(int index) const
{
if(index > length)
{
throw "位置出错!";
}
else
{
Node<DataType> *p = first;
for(int i = 0; i < index; i++)
{
p = p->next;
}
return p->data;
}
}
template<class DataType>
int LinkList<DataType>::searchByData(DataType data) const
{
int index = 0;
Node<DataType> *p = first;
while(NULL != p->next)
{
p = p->next;
index++;
if(data == p->data)
{
return index;
}
}
return 0;
}
int main()
{
LinkList<int> ll;
cout << "初始长度:" << ll.Length() << endl;
cout << "头插0-9:\n";
for(int i = 0; i < 10; i++)
{
ll.insert(i);
}
ll.print();
cout << "在第6位插入7,第7位插入4:\n";
ll.insert(7,6);
ll.insert(4,7);
ll.print();
cout << "删除第2位:\n";
ll.deleteByIndex(2);
ll.print();
cout << "删除所有7:\n";
ll.deleteByData(7);
ll.print();
cout << "修改所有4为44:\n";
ll.updateByData(4,44);
ll.print();
cout << "修改第4位为88:\n";
ll.updateByIndex(88,4);
ll.print();
cout << "5的位置是:" << ll.searchByData(5) << endl;
cout << "第5个数据是:" << ll.searchByIndex(5) << endl;
cout << "当前长度:" << ll.Length() << endl;
return 0;
}
运行结果:
g++ linklist.cpp -o linklist
./linklist
初始长度:0
头插0-9:
9 8 7 6 5 4 3 2 1 0
在第6位插入7,第7位插入4:
9 8 7 6 5 7 4 4 3 2 1 0
删除第2位:
9 7 6 5 7 4 4 3 2 1 0
删除所有7:
9 6 5 4 4 3 2 1 0
修改所有4为44:
9 6 5 44 44 3 2 1 0
修改第4位为88:
9 6 5 88 44 3 2 1 0
5的位置是:3
第5个数据是:44
当前长度:9