- ベストアンサー
可変長文字列で困ってます
宿題出で全くわかりません。 ここを実装っていうところがわかりません。 よろしくお願いします。 /* 単方向リストプログラム */ #include <stdio.h> #include <string.h> #include <stdlib.h> #include <assert.h> #include <crtdbg.h> /********************* リスト処理部 *********************/ /* リストセル 構造体定義 */ typedef struct cell { char *string; struct cell *next; } CELL, *PCELL; /* PCELL ListInsert(PCELL pos, const char *string) 指定されたセルの次に,新しいセルの挿入する PCELL pos : 挿入位置のセルを指すポインタ char *string : 新セルに含める文字列 戻り値: 新しく確保したセルのアドレス メモリ確保に失敗した場合にはNULL */ PCELL ListInsert(PCELL pos, const char *string) { PCELL pNewCell; pNewCell = calloc(1, sizeof(CELL)); if (pNewCell != NULL) { // ここを実装する } return pNewCell; } /* void ListDelete(PCELL pos) セルの削除.pos の指すセルの次のセルを削除する. PCELL pos : 削除するセルの直前のセルを指すポインタ */ void ListDelete(PCELL pos) { // ここを実装 } /* void ListDestory(PCELL header) リスト全体の削除 PCELL header : ヘッダセルへのポインタ */ void ListDestroy(PCELL header) { // ここを実装 }
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
★アドバイス ・宿題ですので頑張りましょう。ただし、少しだけアルゴリズムを教えましょう。 ・『ListInsert』の実装は CELL 構造体の next メンバに pNewCell のアドレスを セットして、CELL 構造体の string メンバに引数の string をメモリ確保した アドレスをセットします。 ・『ListDelete』の実装は CELL 構造体の next メンバのメモリを解放します。 CELL 構造体の string メンバのメモリ解放も行う。その後、CELL 構造体の メモリ領域も解放させる。 ・『ListDestroy』の実装は CELL 構造体の next メンバをたどっていき ListDelete 関数と 同じような処理を行う。 ・最後に、単方向リストの仕組みを紙に書いてイメージしてお勉強しましょう。 →頭の中で出来るようになりましょう。頑張って下さい。さようなら。
その他の回答 (2)
- asfd
- ベストアンサー率21% (25/117)
単方向リストですね。linked listとかともいいます。 基本的なデータ構造です。まぁ宿題ですので自分で色々調べて 下さい(^^; 検索すると色々出てくると思いますよ。ずばり答えもでてくるかも?
ことリスト構造に関しては、人に答えを教えてもらっただけでは 「絶対に」理解できません。 テキストや授業の内容を確認しながら、自分の頭をフル回転させて ウンウンうなりながら解いてください。