数据结构-单链表
举个栗子owo
#include<iostream>
using namespace std;
template<typename DataType>
struct Node
{
DataType data;
Node<DataType>*next;
};
template<typename DataType>
class LinkList{
public:
LinkList();
~LinkList();
LinkList(DataType a[],int n);
DataType get(int i);//按位查找
int locate(DataType x);//按值查找
void Insert(int i,DataType x);
DataType Delete(int i);
void Empty();
void PrintList();
private:
Node<DataType>*first;
};
template<typename DataType>
LinkList<DataType>::LinkList(DataType a[],int n)
{
first=new Node<DataType>;
first->next=nullptr;
Node<DataType>*rear=first;
for( int i = 0;i<n; i ++)
{
Node<DataType>*s=nullptr;
s=new Node<DataType>;
s->data=a[i];
s->next=rear->next;
rear->next=s;
rear=s;
}
}
template<typename DataType>
LinkList<DataType>::LinkList()
{
first=new Node<DataType>;
first->next=nullptr;
}
template<typename DataType>
void LinkList<DataType>::Empty()
{
if(first->next==nullptr)
cout<<"空"<<endl;
else cout<<"不为空"<<endl;
}
template<typename DataType>
LinkList<DataType>::~LinkList()
{
Node<DataType>*p=first;
while(first !=nullptr)
{
first=first->next;
delete p;
p=first;
}
}
template<typename DataType>
void LinkList<DataType>::PrintList()
{
Node<DataType>*p=first->next;
while(p!=nullptr)
{
cout<<p->data<<" ";
p=p->next;
}
cout<<endl;
}
//按位查找
template<typename DataType>
DataType LinkList<DataType>::get(int i)
{
Node<DataType>*p=first->next;
for(int j=0;j<i;j++)
{
if(j==i-1)cout<<p->data<<endl;
p=p->next;
}
}
//按值查找
template<typename DataType>
int LinkList<DataType>::locate(DataType x)
{
Node<DataType>*p=first->next;
int count=1;
while(1)
{
if(p->data==x) return count;
p=p->next;
count++;
}
return 0;
}
template<typename DataType>
void LinkList<DataType>::Insert(int i,DataType x)
{
Node<DataType>*p=first,*s=nullptr;
for(int j=0;j<i;j++)
{
p=p->next;
}
if(p==nullptr) throw"插入错误";
s=new Node<DataType>;
s->data=x;
s->next=p->next;
p->next=s;
}
template<typename DataType>
DataType LinkList<DataType>::Delete(int i)
{
DataType x;
Node<DataType>*p=first,*s=nullptr;
for(int j=0;j<i-1;j++)
{
p=p->next;
}
if(p==nullptr) throw"删除错误";
s=p->next;
x=s->data;
p->next=s->next;
delete s;
return x;
}
int main()
{
int r[5]={1,2,3,4,5},i,x;
LinkList<int>L{r,5};
cout<<"当前线性表是否为空:"<<endl;
L.Empty();
cout<<"当前线性表为:"<<endl;
L.PrintList();
cout<<"按位查找:"<<endl;
cin>>x;
L.get(x);
cout<<"按值查找:"<<endl;
cin>>i;
cout<<L.locate(i)<<endl;
cout<<"插入操作:"<<endl;
cin>>i>>x;
L.Insert(i,x);
cout<<"当前线性表为:"<<endl;
L.PrintList();
cout<<"删除操作:"<<endl;
cin>>i;
cout<<"删除节点的值为:"<<L.Delete(i)<<endl;
cout<<"当前线性表为:"<<endl;
L.PrintList();
}