3

C で機能的に純粋な連結リストを作成するにはどうすればよいですか? リンクされたリストは私がやるべきことですか? オブジェクトのリストを取得しようとしていますが、外部の状態を変更せずに関数からリストに項目を追加する方法が思いつきません。

私は基本的にこれが欲しい:

void AddItemToList(Item item);

発信者がどのリストに追加されているかを気にすることなく、どこからでも呼び出せるようにする。

今私はちょうど持っています:

void AddTypeToList(entityType_t *type, entityType_t *listHead)
{
    type->next = listHead;
    listHead = type;
}

void RegisterEntityType(entityType_t *type)
{
    AddTypeToList(type, typeList);
}

しかし、これは明らかに機能的ではありません (またはそうですか?)RegisterEntityTypeは を変更しているためですtypeList。(これはグローバルですentityType_t

4

1 に答える 1

1

一般的に言えば、別の機能が必要です。

List AddItemToList(List list, Item item);

元のリストを変更せずに、項目が追加された新しいリストを返す必要があるためです。これには、作成および破棄する中間リストを追跡するためにガベージコレクターが必要であるなど、他の質問が含まれます。

関数型プログラミングの手法を実装するのに C が最適な言語だとは思いません。すべてをゼロから構築する必要があります。明らかに理想的な選択肢は、純粋な関数型プログラミング言語、または少なくとも C++、C#、Python などの関数型手法をサポートするプログラミング言語です。

この質問を確認したいかもしれません。

これが(どういうわけか)役立つことを願っています。

于 2013-05-31T10:56:08.343 に答える