‫このレッスンでは､ スタックとQについてお話します｡
‫スタックとQは､ コンピュータサイエンスにおけるデータ構造です｡
‫データ構造とは､ 効率的なアクセスや変更を可能にするデータ整理・管理・保存形式のことである｡
‫それぞれのデータ構造は､ そこに挿入するデータを保存し､ 管理するための独自の方法を持っています｡
‫データ構造にはさまざまな種類がありますが､ このレッスンでは､ 非常に一般的で､ 何らかの場面でデータを扱いたいときに便利な2つのデータ構造について見ていきます｡
‫最初にお話しするデータ構造は､ その名前からしてスタックです｡
‫スタックは､ データを積み重ねる形で保存します｡
‫この岩を積み重ねた写真を見てみると､ 積み重ねた岩を落下させることなく､ 簡単に最初の岩を取ることができます｡
‫でも､ 真ん中にあるものを取り出すのは不可能です｡
‫最初の岩は､ 積み上げた岩を倒さずに簡単に取ることができますが､ 真ん中の岩を取るのは不可能です｡
‫だから､ 先着順か後入れ先出しなんです｡
‫スタックは基本的に先頭から順にデータを追加､ 削除していきます｡
‫このように､ スタックという概念は､ 数学的アルゴリズムやOSによるデータ管理において､ 通常または非常に頻繁に使用されています｡
‫スタックの使用例としては､ 例えば､ データの反転などがあります｡
‫つまり､ スタックを使ってデータや数値を反転させるのは､ とても簡単なことなのです｡
‫例えば､ ユーザーからの入力をそのままスタックに格納し､ 上から順にデータを削除していけば､
‫データが反転していきます｡
‫そこで､ 例えばブラウザの戻るボタンがあります｡
‫だから､ チュートリアルやチュートリアルを見ている間､ ブラウザはあなたがクリックしたウェブサイトのスラッシュウェブページを保存し､
‫戻るボタンを押すと､ あなたが行った最後のページをロードします｡
‫そして､ その前の1つは､ ここにあるのは1つの教科書的な例ですが､ 便利に使えるということです｡
‫また､ 多くのアプリケーションにある「取り消し」「やり直し」ボタンも､ 基本的に実行した内容をスタックに保存し､
‫その実行したアクションを取り消すというものです｡
‫つまり､ スタックもQもリストや辞書のようなコレクションなんですね｡
‫スタックには独自の操作があり､ 例えばデータの操作や管理に利用することができます｡
‫そして､ これから見ていくものが押されるように収納されています｡
‫そこで､ pushメソッドを使って､ スタックにデータを追加することができます｡
‫もちろん､ データは常に上に追加されます｡
‫次にpopですが､ popメソッドを使うと､ スタックの一番上からデータを取り出すことができます｡
‫そして最後に､ スタックの一番上にあるオブジェクトデータを削除せずに返すpeekメソッドがあります｡
‫QSは､ 空港のチェックインで最初に来た人が最初にサービスを受けるとか､ レストランのドライブスルーで前の車が最初に注文して､
‫新しい車が来たら列の後ろで待たなければならず､ 私たちは最後にサービスを受けるとか､ 実際の生活の中でのQと同じように機能するわけです｡
‫そこで､ データが来る順番が重要な場合にQを使うことにしています｡
‫そのため､ データは後ろからしか追加できず､ 前からは削除され､ 真ん中の要素にはアクセスできない｡
‫それは､ FIFO方式です｡
‫つまり先入れ先出しで､ 例えばOSではメッセージ､ IOリクエスト､ マウス操作などをキューイングして､
‫来た順に実行できるようにします｡
‫そして､ Webリクエストを管理し､ それをひとつひとつ処理するサーバー｡
‫つまり､ ビデオゲームにおけるハンドルの混雑や入力のキューイング､ 例えば「ストリートファイター」のようにコンボ攻撃がある格闘ゲームでは､
‫ユーザーの入力を把握して､ 実行するコンボを決定する必要があるのですね｡
‫ユダヤ人は､ 保存しているデータを操作したり管理したりするために､ それぞれ独自の操作を行っています｡
‫例えば､ NQメソッドを使えば､ キューにデータを追加することができる｡
‫もちろん､ データは常にキューの後ろに追加されますので､ 稀にしか発生しません｡
‫いわば後方で｡
‫次に､ キュー方式です｡
‫queueメソッドを使って､ キューの先頭からデータを削除することができます｡
‫そして最後に､ キューの先頭にあるオブジェクトやデータを削除せずに返すpeakメソッドがあります｡
‫つまり､ 覗き込むだけで､ 他に何もせず､ ただそこに何があるのかを見ているだけなのですね｡
‫そして､ それを使うことができる｡
‫そこで次は､ C-Sharpでスタックとキューを実際にどのように実装し､ 利用できるかを見ていきます｡