1. パラメーター コンストラクターなし - 単一リンク リストの初期化
template<typename DataType>
LinkList<DataType>::LinkList()
{
frist=new Node<DataType>;
frist->next=nullptr;
}
2. ヌル操作
单链表的判空操作只需判断单链表是否只有头结点,即判断frist->next是否为空。
3. トラバース動作
template<typename DataType>
void LinkList<DataType>::PrintList()
{
Node<DataType> * p=frist->next; //工作指针p初始化
while(p!=nullptr)
{
cout<<p->data<<"\t";
p=p->next; //指针后移
}
cout<<endl;
}
4. 単一リンクリストの長さを求める
template<typename DataType>
int LinkList<DataType>::length()
{
Node<DataType> * p=frist->next;
int count=;
while(p!=nullptr)ype
{
p=p->next;
count++;
}
return count;
}
5. ビット単位の検索
template<typename DataType>
DataType LinkList<DataType>::Get(int i)
{
Node<DataType> * p=frist->next;
int count=1;
while(p!=nullptr && count<i)
{
p=p->next;
count++;
}
if(p==nullptr)
throw"查找位置错误";
else
return p->data;
}
6. 値による検索
template<typename DataType>
int LinkList<DataType>::Locate(DataType x)
{
Node<DataType> * p=frist->next;
int count=1;
while(p!=nullptr)
{
if(p->data==x)
return count;
p=p->next;
count++;
}
return 0;
}
7. 挿入操作
template<typename DataType>
void LinkList<DataType>::Insert(int i,DataType x)
{
Node<DataType> * p=frist,*s=nullper;
int count=0;
while(p!=nullptr && count<i-1)
{
p=p->next;
count++;
}
if(p==nullptr)
throw"插入位置错误";
else
{
s=new Node<DataType>;
s->data=x;
s->next=p->next;
p->next=s;
}
}
8. 削除操作
template<typename DataType>
DataType LinkList<DataType>::Delete(int i)
{
DataType x;
Node<DataType> * p=frist,*q=nullptr;
int count=0;
while(p!=nullptr && count<i-1)
{
p=p->next;
count++;
}
if(p==nullptr || p->next==nullptr)
throw"删除位置错误";
else{
q=p->next; //将a2删除,这是就要把a1的指针指向a3
x=p->data;
p->next=q->next; //使指向a2的指针指向a3
delete q;
return x;
}
}
9. デストラクター - 単一リンクされたリストを破棄します。
template<typename DataType>
LinkList<DataType>::~LinkList()
{
Node<DataType> * p=frist;
while(frist!=nullptr)
{
frist=frist->next;
delete p;
p=frist;
}
}
10. コンストラクター - 単一リンクリストを作成する
(1). ヘッド挿入方法
template<typename DataType>
LinkList<DataType>::LinkList(DataType a[],int n)
{
frist=new Node<DataType>;
frist->next=nullptr; //初始化一个空链表
for(int i=;i<n;i++)
{
Node<DataType> * s=nullptr;
s=new Node<DataType>;
s->data=a[i];
s->next=frist->next;
frist->next=s;
}
}
(2). テール挿入方法
template<typename DataType>
LinkList<DataType>::LinkList(DataType a[],int n)
{
frist=new Node<DataType>;
Node<DataType> * r=frist;
* s=nullptr;
for(int i=0;i<n;i++)
{
s=new Node<DataType>;
s->data=a[i];
r->next=s;
r=s;
}
r->next=nullptr;
}