C言語(又はC++)でのリスト構造について詳しく教えて欲しいです。new演算子からわからないです。
new演算子がわからないレベルでしたら、C言語かC++のどちらかに絞った方が良いと思います。new演算子はC言語には無いC++の機能です。

C言語(又はC++)でのリスト構造について詳しく教えて欲しいです。new演算子からわからないです。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答3件
0
まずC言語にはnew 演算子はありません。
C++でのリスト構造には、stlで用意されたコンテナとしてstd::listが存在します。たいていの場合は、それを利用します。
Cでリスト構造を作成するには、多くの場合、構造体のポインタをメンバとして持ちます。例えば次の様な形です。
C
1struct No { 2 int n; 3 struct No* next; 4}
この場合、nextにNo構造体のポインタを格納することで、リスト構造を作成します。
例えばこのように使用します。
C
1struct No number; 2struct No* pNum = &number; 3for ( i = 2; i < 11; i++) { 4 pNum->n = i; 5 pNum->next = (struct No*)malloc(sizeof(struct No));/* C++の場合はnewでもOK */ 6 pNum = pNum->next; 7}
こうすることで、1から10までの数字のリストができたことになります。
(上のコードは適当に書いているので、間違っているかも)
なおリストと配列の違いは、メモリ上で隣り合うかどうかです。
配列の場合、10個の要素は必ず隣り合うメモリに展開されますが、リストの場合はポインタを保持しているだけなので、隣り合ってはいません。
配列に対して、リストを使用するメリットは、データの挿入に強いことです。
例えば1と2の間に、100を挿入したい場合、配列の場合は2がある場所の後ろすべてを1つずつ、ずらして行かなければならないのに対し、リストの場合は、次の要素のポインタを変更するだけで対処できます。
投稿2015/11/18 10:34
編集2015/11/19 03:54総合スコア1040
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
リスト構造を使う時、1つ1つの要素をnewで確保することは多いですが、必ずしもそうしなければならないわけではないです。
このことを念頭に下記を見られるとよいと思います。
投稿2015/11/18 05:11
編集2015/11/18 08:55総合スコア23274
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
とりあえず、以下のページを見ると理解が進むと思います
投稿2015/11/18 04:43
総合スコア924
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。