データ構造 C++ 単一リンクリストの実現と関連操作

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;
}

おすすめ

転載: blog.csdn.net/qq_51344334/article/details/114527421