初歩的な話ですが、双方向リストを表現するときってどう作ります?
私は特に指定がなければ上記の形を取ります。頭一個分の領域が無駄になりますが、リストが空の時でも特別な分岐が要らず、同様に処理できるためです。
struct list_item {
struct list_item *next, *prev;
}
struct list {
struct list_item head;
//other data
}
for (p = list.head.next; p != list.head; p = p->next) {
//do_something...
}
ところが今日、こんな形の双方向リストを見かけました。形は似ていますが、最後のメンバが異なります。
絵にすると対称で綺麗ですがねえ。tailの存在にメリットがなく、無駄に見えます。
この形式にする理由があったんでしょうけど、何だろうか、全く思いつかない。そもそもtailってどう使ってたんだろうか?
< | 2008 | > | ||||
<< | < | 04 | > | >> | ||
日 | 月 | 火 | 水 | 木 | 金 | 土 |
- | - | 1 | 2 | 3 | 4 | 5 |
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | - | - | - |
合計:
本日: