プログラム再構成に関する 特許申請について

データ構造と
アルゴリズム
第六回
知能情報学部
新田直也
双方向リスト

連結リスト

双方向リスト
双方向リストの構造体
struct CELL {
int value;
struct CELL *next;
struct CELL *prev;
}
内容
次ページのアドレス
前ページのアドレス
CELL
value
next
prev
1ページに相当
(構造体)
双方向リストの insert

insert(k,e)は?
※ p は k 個目の要素を指す
p
*(p->prev)
p->prev->value
p->prev->next
p->prev->prev
新しいページのURLを r とすると…
r->next = p;
r->prev = p->prev;
p->prev->next = r;
p->prev = r;
*p
p->value
p->next
p->prev
r->value
r->next
r->prev
双方向リストの delete

delete(k)は?
*(p->prev)
※ p は k 個目の要素を指す
p
*p
p->prev->value
p->prev->next
p->prev->prev
p->next->prev = p->prev;
p->prev->next = p->next;
*(p->next)
p->value
p->next
p->prev
p->next->value
p->next->next
p-next->prev
木構造

木: 閉路(サイクル)を持たない連結グラフ.
節,ノード,頂点
辺,エッジ
閉路
→「木」である
→「木」でない
木構造の例

木は典型的なデータ構造





ファイルシステム
数式
図形
XML
計算過程
(a + b) * c + (d / e)
グループ1
+
/
*
+
a
グループ3
c
グループ2
d
e
b
グループ4
グループ5
各部の名称(1)

ラベル,根,葉,親,子,兄弟:
(a + b) * c + (d / e)
根
ラベル
+
/
*
親
+
子
a
c
b
兄弟
d
e
葉
各部の名称(2)

祖先,子孫,部分木,レベル:
(a + b) * c + (d / e)
+
祖先
/
*
子孫
+
a
部分木
レベル0
c
b
d
レベル1
e
レベル2
レベル3
木の種類

順序木: 兄弟間で順序づけられている木.
+
1:
*
+
a

c
b
2:
1:
d
(a + b) * c + (d / e)
/
e
2:
順序が変わると意味が変わる
無順序木: 兄弟間に順序がない木.
順序に意味がない
二分木

二分木: すべての節点が子をたかだか2つしか持
たない順序木.
(a + b) * c + (d / -e)
+
子が2個
/
*
+
a
c
b
d
子が2個
-
子が1個
e
子が0個
二分木の表現(1)

例によってWebで...
二分木の表現(2)
struct node {
char value;
struct node *left;
struct node *right;
}
ラベル
左の子のアドレス
右の子のアドレス
1ノードに相当
(構造体)