#include <iostream>
using namespace std;
template <typename DataType>
class LinkList
{
struct Node
{
DataType data;
Node * next;
};
private:
Node * first;
public:
LinkList();
~LinkList(){}
DataType Delete(int i);
void Insert(int i, DataType);
int Locate(DataType x);//按值查找
DataType Get(int i);//按位查找
int Length();
void PrintLinkList();
};
template <typename DataType>
LinkList <DataType>::LinkList()
{
first = new Node;
first->next = NULL;
}
template <typename DataType>
DataType LinkList <DataType>::Delete(int i)
{
Node * p = first;
int counter = 0;
DataType x;
while(p && counter < i)
{
p = p->next;
counter++;
}
if(!p && !(p->next))
throw "位置";
else
{
Node * q = p->next;
x = q->data;
p->next = q->next;
delete q;
return x;
}
}
template <typename DataType>
void LinkList <DataType>::Insert(int i, DataType x)
{
Node * p = first;
int counter = 0;
while(p && counter < i)
{
p = p->next;
counter++;
}
if( !p )
throw "位置";
else
{
Node * temp = new Node;
temp->data = x;
temp->next = p->next;
p->next = temp;
}
}
template <typename DataType>
int LinkList <DataType>::Locate(DataType x)//按值查找,返回序号
{
Node * p = first->next;
int counter = 0;
while( p )
{
if( p->data == x)
return counter;
else
{
counter++;
p = p->next;
}
}
cout<<"在该链表中找不到相应的值!"<<'\t';
return 0;
}
template <typename DataType>
DataType LinkList <DataType>::Get(int i)//按位查找,返回值
{
Node * p = first->next;
int counter = 0;
while( p && counter < i)
{
counter++;
p = p->next;
}
if(!p)
throw "位置";
else
return p->data;
}
template <typename DataType>
int LinkList <DataType>::Length()
{
Node * p = first->next;
int counter = 0;
while( p )
{
counter++;
p = p->next;
}
return counter;
}
template <typename DataType>
void LinkList <DataType>::PrintLinkList()
{
Node * p = first->next;
while( p )
{
cout<<p->data<<'\t';
p = p->next;
}
cout<<endl;
}
int main()
{
LinkList <int> ll;
cout<<"插入前链表的长度为: "<<ll.Length()<<endl;
cout<<"Insert:"<<endl;
ll.Insert(0,1);
ll.Insert(1,2);
ll.Insert(2,3);
ll.Insert(3,4);
ll.Insert(4,5);
cout<<"插入后链表的长度为: "<<ll.Length()<<endl;
cout<<"遍历输出链表: "<<endl;
ll.PrintLinkList();
cout<<"Delete:"<<endl;
ll.Delete(2);
cout<<"删除后遍历输出链表: "<<endl;
ll.PrintLinkList();
cout<<"查找值为4的元素序号: "<<endl;
cout<<ll.Locate(4)<<endl;
cout<<"查找值为6的元素序号: "<<endl;
cout<<ll.Locate(6)<<endl;
cout<<"查找序号为4的元素值: "<<endl;
cout<<ll.Get(3)<<endl;
}
C++ 单链表基本操作
最新推荐文章于 2022-07-13 19:30:02 发布