アプリ版:「スタンプのみでお礼する」機能のリリースについて

--(装置A)--(装置B)---(装置C)---
           |
           ---(装置E)---

上の例のように途中で分岐があるリスト構造を
あらわすために、C言語でどのような構造体をもつべきでしょうか?

(装置A),(装置B),(装置C)のつながりだけをリスト構造で持つ場合は、

struct device {
int no;
char name[NAME_SIZE];
device_t *next; //次の device 構造体へのポインタ
};

のような構造体を使いリスト構造にできましたが、
(装置A),(装置B),(装置C)のつながりと
(装置A),(装置B),(装置E)のつながりの両方に対応する(分岐のある構造にも対応する)
ためには、どのようなつくりにすればよいでしょうか?

できれば、サンプルなどでおしえていただけますとありがたいです。

よろしくお願い致します。

A 回答 (3件)

device_t *next;


だと1つしか持てないわけだから複数持てるように
device_t **next;
で複数持てるようにすればいいです。

仮に装置Bのdevice_tだとして
next = malloc(sizeof(device_t *) * 3);
next[0] = 装置C;
next[1] = 装置E;
next[2] = NULL;


next_num = 2; // int
next = malloc(sizeof(device_t *) * next_num);
next[0] = 装置C;
next[1] = 装置E;

とか。
    • good
    • 0

struct device {


int no;
char name[NAME_SIZE];
struct device *right; //右の device 構造体へのポインタ
struct device *bottom; //下の device 構造体へのポインタ
};
    • good
    • 0

分岐の分だけポインタを持てばいいだけです。


具体例は既に出た通り。

余談になりますが
例示された様な、枝分かれする(合流しない)構造は「木」(tree)と呼びます。
木を使ったプログラムも参考にしましょう。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!