Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
学ぶ 要素の追加 | データ構造の実装
C構造体
セクション 5.  3
single

single

要素の追加

メニューを表示するにはスワイプしてください

単方向リンクリストを実用的にするには、ノードを追加する必要があります。ノードをリストに挿入するロジックを実装します。新しいノードを作成し、それらを接続し、リストに統合することで、要素を追加するたびにリストが動的に成長します。

この実践的なアプローチにより、内部で何が起こっているのかを正確に理解できます。

ノード挿入の実装

ノードを作成するシンプルな関数を記述します。この関数は以下を行います:

  • ノードのデータフィールドに格納される型 int の数値を引数として受け取る;
  • ノードのサイズを考慮して動的に割り当てられたメモリ領域へのポインタを作成する;
  • ノードのメモリ割り当てが成功したかどうかを確認する;
  • 必要な値(関数の引数)をデータフィールドに格納する;
  • 次のポインタは NULL にする(この関数は1つのノードのみを作成するため);
  • 関数は値が格納されたメモリ領域へのポインタを返す。

AddNewNode() 関数はポインタへのポインタを受け取ります。これは、リストの先頭(head)ノードへのポインタの値や、新しいノードに格納される値を変更できるためです:

void AddNewNode(struct Node** head, int value) 
{
	...
}

リストが空の場合(*head == NULL)、リストの先頭(*head)へのポインタを新しいノード(newNode)を指すように更新します。この場合、newNodeが最初のノード(ヘッドノード)となります。 リストが空でない場合は、ループを使って最後のノードを探します。

現在のノードはバッファノードの役割を果たし、これを使ってリストを順にたどり、どこにも指していないノード(*next == NULL)を見つけます。

struct Node* current = *head;

while (current->next != NULL) 
{
    ...
}

最終的に、新しいノード newNode を最後のノードにする必要があります。つまり、current->nextnewNode に設定します。これで newNode がリストの最後のノードになります。

課題として、既存のノードに新しいノードを追加する関数を考えて追加してください。

タスク

スワイプしてコーディングを開始

関数 addNewNode を作成し、単方向リンクリストの末尾に新しいノードを追加します。

関数内の手順:

  1. 変数 struct Node* newNode を宣言し、createNode(value) を用いて新しいノードを作成します。
  2. *head == NULL でリストが空かどうかを確認します。
  3. リストが空の場合、newNode*head を代入します。
  4. リストが空でない場合、struct Node* current を宣言し、*head を代入します。
  5. while ループを使い、current->nextNULL になるまでリストを走査します。
  6. 最後のノードに到達したら、current->next = newNode とします。

解答

Switch to desktop実践的な練習のためにデスクトップに切り替える下記のオプションのいずれかを利用して、現在の場所から続行する
すべて明確でしたか?

どのように改善できますか?

フィードバックありがとうございます!

セクション 5.  3
single

single

AIに質問する

expand

AIに質問する

ChatGPT

何でも質問するか、提案された質問の1つを試してチャットを始めてください

some-alt