C++の単一リンクリストの削除とシーケンシャルストレージのデータ構造の比較

1.単一リンクリストのテーブル全体を削除するアルゴリズムの考え方は次のとおりです。

1. ノード p と q を宣言します;
2. 最初のノードを p に割り当て、次のノードを q に割り当てます;
3. ループして p を解放し、q を p に割り当てます。

template<typename DataType>
LinkList<DataType>::~LinkList()
{
    
    
   Node<DataType>*p=frist;
   while (first != nullptr)
   {
    
    
      first = first->next;
      delete p;     //c语言中使用free释放p
      p=first;
   }
};

2. シングルリンクリスト構造とシーケンシャルストレージ構造のメリットとデメリット

· ストレージの割り当て方法、時間パフォーマンス、スペース パフォーマンスの 3 つの側面から比較します。
ストレージ割り当て方法:
1. シーケンシャルストレージ構造は、連続ストレージユニットを使用して、
線形テーブルのデータ要素をシーケンシャルに格納します。
2. 単一リンクリストはリンクストレージ構造を採用しており、線形リストの要素を格納するために任意のストレージユニットのグループを使用します。
時間パフォーマンス:
ルックアップ

1. 順次ストレージ構造 0(1)
2. 単一リンクリスト 0(n) の
挿入と削除
1. 順次ストレージ構造は、平均してテーブルの長さの半分の要素を移動する必要があり、時間は 0(n) )
2. 単一リンクリストは計算中である 特定の位置のポインタが解放された後、挿入および削除時間はわずか 0 (1)
スペースパフォーマンス:
1. シーケンシャルストレージ構造は、ストレージスペースを事前に割り当てる必要があります。分割数が大きいとスペースの無駄が発生しやすく、分割数が小さいとオーバーフローが発生しやすくなります。
2. 単一リンクリストは記憶領域を割り当てる必要はなく、存在する限り割り当てることができ、
要素の数は制限されません。
上記の比較に基づいて、次のような経験的な結論を導き出しました。
1. 線形テーブルが頻繁な検索を必要とし、挿入や削除がほとんどない場合は、シーケンシャル ストレージ構造を使用する必要があります。
2. 頻繁に挿入と削除が必要な場合は、単一リンクのリスト構造を使用する必要があります。

1. 例えばゲーム開発において、ユーザーが登録した個人情報は、登録時のデータ挿入を除き、読み込まれる場合がほとんどであるため、シーケンシャルな保存構造を考慮する必要があります。
2. ゲーム内のプレイヤーの武器や装備のリストは、プレイヤーのゲームプロセス中にいつでも追加または削除できますが、この時点では、連続保存を使用するのは適切ではありません。単一リンクのリスト構造がその強みを発揮できます。
3. 線形リスト内の要素の数が大幅に変化する場合、またはサイズがまったく不明な場合は、記憶領域のサイズを考慮する必要がないように、単一リンクのリスト構造を使用するのが最善です。
4. 線形テーブルのおよその長さが事前にわかっている場合 (たとえば、1 年が 12 か月で、1 週間が月曜日から日曜日までの 7 日で構成されている場合)、この順次ストレージ構造の効率は大幅に高くなります。
つまり、線形リストの逐次記憶構造と単結合リスト構造にはそれぞれ一長一短があり、単純にどちらが良くてどちらが悪いとは言えず、どのデータを総合的にバランスさせる必要がある。要件とパフォーマンスを満たし、達成するために実際の状況に応じて使用する構造。

おすすめ

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