9
2005 年年 年年年年年年年年年年年年 年4年 年年年年年年年年年年年年年年年 「」 年 年年 西 [email protected] i.ac.jp 年年年年年年年年年年年 年年年年年年年年

2005 年度 データ構造とアルゴリズム 第 4 回 「再帰的データ構造:リスト構造」

Embed Size (px)

DESCRIPTION

2005 年度 データ構造とアルゴリズム 第 4 回 「再帰的データ構造:リスト構造」. 西尾 信彦 [email protected] 立命館大学情報理工学部 情報システム学科. typedef を覚えよう. 自分でデータ型の名前をつけられる struct xxxxx は長たらしい typedef 既存の型名 新しい型名; 例えば、 typedef struct _student student; - PowerPoint PPT Presentation

Citation preview

Page 1: 2005 年度 データ構造とアルゴリズム 第 4 回 「再帰的データ構造:リスト構造」

2005 年度データ構造とアルゴリズム

第 4 回「再帰的データ構造:リスト構

造」

西尾 信彦 [email protected]

立命館大学情報理工学部情報システム学科

Page 2: 2005 年度 データ構造とアルゴリズム 第 4 回 「再帰的データ構造:リスト構造」

typedef を覚えよう

• 自分でデータ型の名前をつけられる• struct xxxxx は長たらしい• typedef 既存の型名 新しい型名;• 例えば、

– typedef struct _student student;

– typedef struct _list { struct _list *next; int data;} *list, listelem;

Page 3: 2005 年度 データ構造とアルゴリズム 第 4 回 「再帰的データ構造:リスト構造」

リストの先頭と最後• 先頭要素を指すポインタが必要• リストの最後の要素はどこを指す?

– どこも指さない NULL– 自分を指す– ( ダミーの ) 先頭要素を指す

Page 4: 2005 年度 データ構造とアルゴリズム 第 4 回 「再帰的データ構造:リスト構造」

リストへの要素の挿入と削除• どちらもポインタを指し換えにより実現• リストと対象要素を与えられて処理する

– それだけでは済まない– 一つ前の要素も書き換えないと

• どこに入れるかで変わる処理– 先頭かそれ以外で処理が違うのが気持ち悪い– ダミーの先頭要素を用意すると解消する

Page 5: 2005 年度 データ構造とアルゴリズム 第 4 回 「再帰的データ構造:リスト構造」

二重リンクされたリスト• 次の要素を指すだけでなく、前の要素

も指す• 挿入や削除が対象要素だけでできる• 処理は倍の手間• 両端はどうする?

– ともに NULL– 両端をつなげて循環リスト

Page 6: 2005 年度 データ構造とアルゴリズム 第 4 回 「再帰的データ構造:リスト構造」

リストで実現するデータ構造• スタック

– LIFO Last In First Out

• キュー– FIFO First In First Out

• デク DEQ– Double Ended Queue

Page 7: 2005 年度 データ構造とアルゴリズム 第 4 回 「再帰的データ構造:リスト構造」

スタック• LIFO のデータ構造• Push :スタックに 1 つデータを積む• Pop :スタックから 1 つデータを取り出す• Top :スタックの一番上にあるデータを見

る• スタックのデータ構造

– リストそのもの• スタックへの操作を上記の 3 つに制限する

ことによってリストでスタックを実現する

Page 8: 2005 年度 データ構造とアルゴリズム 第 4 回 「再帰的データ構造:リスト構造」

キュー• 待ち行列を表現するデータ構造• FIFO 最初に並んだ人が最初にサービスさ

れる• Empty :キューが空かどうか見る• Enqueue :キューに 1 つデータを追加する• Dequeue :キューから 1 つデータを取り出

す• Peek: キューの先頭のデータを見る

Page 9: 2005 年度 データ構造とアルゴリズム 第 4 回 「再帰的データ構造:リスト構造」

デク DEQ

• 先頭にも最後にもデータを追加、取り出しできるデータ構造– 二重リンクされたリストで作成

• Unshift :リストの先頭にデータを追加• Push :リストの末尾にデータを追加• Shift :リストの先頭からデータを取り出す• Pop :リストの末尾からデータを取り出す