ある本にリストについてのっていたのですが、その本に
ソースがのっていたのですが、わかりません。
ソースは、下記に載せたのがすべてです。
リストについてですが、char line[256];は、データの部分で
すか?p->prev->next = p->next;これは、かなり複雑ですね
こんな参照の方法ありましたっけ?
p->next->prev = p->prev;これも同じです。
p->next = c
c->prev = p
c->prev->next = p;
上記の3つですが、pとcを代入していますよね、pとcというのは
要素のどの部分でもないですよね。
prevやnextだったら、要素の部分なのでそれをつなぎ換えたり
して、リストを組むというのは想像がつくのですが、pとcっていう
のは、ただ漠然としていますよね。どこを指しているかわかりま
せんよね。char ptr[20];と同じようにptrには、先頭のアドレスが
入っていたように、pとcには、何か具体的な情報が入っている
のでしょうか?
/* 両隣へポインターをつなぐ */
p->prev = c->prev;
p->next = c;
/* 両隣のポインターをつなぎ換える */
c->prev->next = p;
c->prev = p;
上記も複雑ですね・・・
解説お願いします・・・
free(p);はメモリの解放ですか?
リスト
*prevは前の要素へのポインター
*nextは後ろの要素へのポインター
typedef struct list_t {
char line[256];
struct list_t *prev;
struct list_t *next;
} LIST;
delete_line(LIST *p)
{
p->prev->next = p->next;
p->next->prev = p->prev;
free(p);
}
insertt_line(LIST *c, LIST *p)
{
/* 両隣へポインターをつなぐ */
p->prev = c->prev;
p->next = c;
/* 両隣のポインターをつなぎ換える */
c->prev->next = p;
c->prev = p;
}
ご指導よろしくお願いします。
A 回答 (4件)
- 最新から表示
- 回答順に表示
No.4
- 回答日時:
同じような質問があり、回答がたくさん出てます、参考にどうぞ。
http://www2.realint.com/cgi-bin/tarticles.cgi?po …
参考URL:http://www2.realint.com/cgi-bin/tarticles.cgi?po …
No.3
- 回答日時:
>pとcっていうのは、ただ漠然としていますよね。
どこを指しているかわかりませんよね。>char ptr[20];と同じようにptrには、先頭のアドレスが入っていたように、pとcには、何か具体的な情報が入っているのでしょうか?
漠然としていていいのです。
例えばprintfにしても、何を表示するかが決まっているわけではありませんよね?
具体的な情報は、呼び出す側が引数で指定するのです。
insertt_lineの場合、100行目と101行目の間に1行挿入させたければ、cには101行目のデータのアドレスを、pには挿入するデータのアドレスを渡すという決まりが存在する事になります。
No.2
- 回答日時:
> マルチポストですか?
日下部陽一さんって、あのヘミ猫のvoidさんなんですかね?
だとしたら初心者向けに易しく解説するなんてことはきっとないでしょう。参考書を変えてみたらどうですか。
そうじゃなくても、何冊か読んで色々と試しているうちになんとなくわかってくるものだと思います。
No.1
- 回答日時:
>リストについてですが、char line[256];は、データの部分ですか?
そうです。
わからないときは、図を描いてみましょう。
このリストの要素(構造体)は、次の要素へのポインタと、ひとつ前の要素へのポインタと(今回とくに関係ないデータ)を持っています。
それぞれの要素のイメージは、「 ←|p|→ 」こんな感じ。これの左右に同じような要素が連なります。
リストがつながっているなら、右向き、左向きの矢印が一本づつ、計2本が要素と要素の間にはさまれた感じになります。
>p->prev->next = p->next;
これはリストから要素pを消す作業でしょう。「pの1個前の要素から見て、次の要素はpの次の要素」といえばいいのかな?
>pとcっていうのは、ただ漠然としていますよね
pやcはリストの要素(を示すポインタ)です。
printf("%x",p);や、printf("%x",p->next);
などすると、16進数でアドレスが表示されますから、見てみましょう。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- 大学・短大 C言語線形リストの問題です 3 2022/12/22 00:45
- C言語・C++・C# c言語の問題です 3 2023/01/10 16:15
- C言語・C++・C# leetcode21 1 2022/04/21 11:53
- 英語 the fee is a bit too large considering our interne 3 2022/06/18 14:02
- Visual Basic(VBA) 複数シートの複数列に入力されているデータを重複なしで抽出するVBAを作りたいです。 9 2022/06/17 10:33
- C言語・C++・C# C言語 leetcode21 Merge Two Sorted Lists 2 2022/04/24 19:35
- その他(動画サービス) 動画配信サービスのAmazon Prime と U-NEXTとの比較について 4 2023/04/15 11:31
- Visual Basic(VBA) 前回ご教授いただいたコードに覚えたてのループ処理で品名りんごAから順に20回for nextでループ 7 2023/01/13 22:01
- Visual Basic(VBA) Changeイベントで複数セルへの貼り付けおよび値削除時に1個目のセルのみエラーになる 3 2022/12/21 09:07
- テレビ 「ケーズデンキ」でテレビ買った方、教えてください 1 2023/06/06 20:50
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
応用情報技術者試験の令和元年...
-
インクリメント演算子のみを用...
-
右ビットシフト
-
Windows formアプリで データグ...
-
Linux Cプログラミングを学ぶた...
-
プログラミングについて。 1つ...
-
Stuck
-
Notepad++の関数リスト表示でC...
-
Linuxでの開発環境構築や設定の...
-
[C言語]fputsとfprintfの違い
-
Notepad++の関数リスト表示の変...
-
システムエンジニアの適正について
-
どちのほうがすきですか?
-
gccを行ってもexeファイルが生...
-
c言語
-
C言語 配列と関数の練習問題
-
こんなことてしますか??
-
C++6.0でのresource.hについて
-
c言語
-
MACで動く実行ファイルをWindow...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
同一ページ移動時ハンバーガー...
-
jQueryを複数設置した場合の優...
-
アコーディオンで多階層のメニ...
-
jqueryで開閉メニューの状態をc...
-
CSSプルダウンメニューとjQuery...
-
サイトでタブをスライドで切り...
-
jQueryプラグインが動かない
-
JavascriptからPHPへのAjax通信...
-
Javascriptを使ってQRコード読...
-
Selenium4でボタンをクリックで...
-
要素内を常に一番下を表示させたい
-
jQueryを使いformでsubmitした...
-
階層別の組織図の自動作成について
-
JavaScriptでtabindexの変更っ...
-
Googleマップに複数のピンを立...
-
SQLのmaxで求めた値を変数に代...
-
パソコンで動くjavascriptがス...
-
readyStateが4にならない原因
-
AjaxでJSONを受信すると、文字...
-
変数にドットをいれることはか...
おすすめ情報