90 likes | 266 Views
2005 年度 データ構造とアルゴリズム 第 4 回 「再帰的データ構造:リスト構造」. 西尾 信彦 nishio@cs.ritsumei.ac.jp 立命館大学情報理工学部 情報システム学科. typedef を覚えよう. 自分でデータ型の名前をつけられる struct xxxxx は長たらしい typedef 既存の型名 新しい型名; 例えば、 typedef struct _student student;
E N D
2005年度データ構造とアルゴリズム第4回「再帰的データ構造:リスト構造」2005年度データ構造とアルゴリズム第4回「再帰的データ構造:リスト構造」 西尾 信彦 nishio@cs.ritsumei.ac.jp 立命館大学情報理工学部 情報システム学科
typedefを覚えよう • 自分でデータ型の名前をつけられる • struct xxxxxは長たらしい • typedef 既存の型名 新しい型名; • 例えば、 • typedef struct _student student; • typedef struct _list { struct _list *next; int data;} *list, listelem;
リストの先頭と最後 • 先頭要素を指すポインタが必要 • リストの最後の要素はどこを指す? • どこも指さない NULL • 自分を指す • (ダミーの)先頭要素を指す
リストへの要素の挿入と削除 • どちらもポインタを指し換えにより実現 • リストと対象要素を与えられて処理する • それだけでは済まない • 一つ前の要素も書き換えないと • どこに入れるかで変わる処理 • 先頭かそれ以外で処理が違うのが気持ち悪い • ダミーの先頭要素を用意すると解消する
二重リンクされたリスト • 次の要素を指すだけでなく、前の要素も指す • 挿入や削除が対象要素だけでできる • 処理は倍の手間 • 両端はどうする? • ともにNULL • 両端をつなげて循環リスト
リストで実現するデータ構造 • スタック • LIFO Last In First Out • キュー • FIFO First In First Out • デク DEQ • Double Ended Queue
スタック • LIFOのデータ構造 • Push:スタックに1つデータを積む • Pop:スタックから1つデータを取り出す • Top:スタックの一番上にあるデータを見る • スタックのデータ構造 • リストそのもの • スタックへの操作を上記の3つに制限することによってリストでスタックを実現する
キュー • 待ち行列を表現するデータ構造 • FIFO 最初に並んだ人が最初にサービスされる • Empty:キューが空かどうか見る • Enqueue:キューに1つデータを追加する • Dequeue:キューから1つデータを取り出す • Peek:キューの先頭のデータを見る
デク DEQ • 先頭にも最後にもデータを追加、取り出しできるデータ構造 • 二重リンクされたリストで作成 • Unshift:リストの先頭にデータを追加 • Push:リストの末尾にデータを追加 • Shift:リストの先頭からデータを取り出す • Pop:リストの末尾からデータを取り出す