140 likes | 247 Views
ロビーサーバーとネットワークに使われるデータ構造の構築. ノードライブラリとキューの構築. 04a1016 大嶽 優. データ構造論. データ構造とは、使用するデータの形態を定義し、扱う方法という意味 である。 サーバーでは多くのデータが行き来し、管理しなくてはならないので効率的なデータ構造が必要不可欠である。. Node1. Node2. Node3. Node4. Node5. link. link. link. link. 連結リストとノード. ・データが連結されて、鎖のようにつながったものを定義します
E N D
ロビーサーバーとネットワークに使われるデータ構造の構築ロビーサーバーとネットワークに使われるデータ構造の構築 ノードライブラリとキューの構築 04a1016 大嶽 優
データ構造論 • データ構造とは、使用するデータの形態を定義し、扱う方法という意味 である。 • サーバーでは多くのデータが行き来し、管理しなくてはならないので効率的なデータ構造が必要不可欠である。
Node1 Node2 Node3 Node4 Node5 link link link link 連結リストとノード ・データが連結されて、鎖のようにつながったものを定義します ・ノードはデータの最小最小単位であり、リンクでつながれているとします。 ・メモリ構造ではなくそれぞれに付加されたアドレスによって連結される。
スタックとキュー ●スタック s4 LIFO(last Input First Out)構造 s3 s2 s1 ●キュー s4 FIFO(First Input First Out)構造 s3 s2 s1
ノードライブラリ struct NODE { void *data; int size; NODE *prv; NODE *next; }; date:データの内容 size:データのサイズ、チェックなどに使える prv:前のノードのポインタ next:後のノードのポインタ
ノード生成 ノードにメモリ割り当て Y ノードがNULLか 終了 N ノード初期化 次のノードとリンク 前のノード ノードリターン
ノードを連結から取り出す Y 前と次のノードがNULLか? 終了 N Y 前のノードがNULLか? N Prvの次のノードにNextを連結 一番前のノードを検索 NEXTノードが NULLか? Y N NextのPrvに連結 一番前のノードをリターン
ノードの間に1つのノードを挿入 Y 前のノードが NULLか? 引数ノードのNEXT, PrvをNULLに指定 N 次のノードに前のノードの NEXTを指定 前のノードのNEXTに 引数ノードを指定 Y 次のノードが NULLか? N 次のノードのPRVに 引数ノードを指定 引数ノードのNEXTに次のノードを指定 引数ノードのPrvに前のNEXTを指定
キューライブラリ キューの設計 struct QUEUE { NODE *head; NODE *tail; int count; }; Head:キューの連結リストの先頭のノードへのポインタ Tail:末尾のノードへのポインタ Int:ノードの個数(誤り検出用
キューのリセット関数 キューがNULLか? 終了 N Y キューカウンタ >0か? キューの先頭が NULLか? Y N キューカウンタを0に指定 次のノードを先頭ノードの Nextに指定 先頭ノードリセット 終了 N キューカウンタ <0ならば 先頭ノード解除 Y キューの先頭をNextに キューカウンタ=0 キューカウンタ-1 終了 キューの末尾をNULL指定
キューに1つのノードを挿入 N キューの末尾と 先頭がNULLか? キューの末尾のノード検索 Y キューの末尾がNULL ではなく、先頭がNULLか? キューの先頭 ノード検索 N ノード生成 Y ノードが NULLか? 終了 N Y キューの先頭が NULLか? 生成されたノードを 先頭に指定 N N データがあるか? ノードのデータを NULLに指定 Y ノードにデータコピー キューカウンタ++
キューの最初のノードをピック Y キューがNULLか? 終了 N ノードの戻り値に キューの先頭を指定 キューの先頭が NULLか? N Y ノードの戻り値は先頭ノード、 キューの先頭は戻り値を指定 Y ノードの戻り値が NULLか? N Y キューの末尾が ノードの戻り値か? キューの末尾と先頭を NULLに指定 N キューカウンター1 キューの先頭ノード指定 ノードリターン
動作テスト • キューから先頭ノードをピックする関数とデータをピックする関数をテストする。 • 1000000個のデータを格納し、110000個のデータを出力する。 • 正確性を確かめるためにテキストデータで出力し、確認する。
まとめ • データ構造は、考えは簡単だが設計するとなると構造化や一般化が非常に難しいことがわかった。 • ポインタを多用するため、十分なテストを行わないと思いがけないエラーが出てくる可能性がある。 • 今回のライブラリを生かせるようなデータベースとの連携をする方法も考えたい。