第137回 Queue と Stack について

公開日:2015-04-26

1. 概要

独り言によるプログラミング講座、「第137回 Queue と Stack について」です。

値を複数持ちたい場合、配列やリストを使いますが、先に入れた値を先に出したり、後から入れたものを先に出す、などのルールを持たせたものが、キュー(Queue:順番を待つ列) と スタック(Stack:積み重ね) になります。

お店でレジの前に並ぶことがあると思いますが、あれがキュー構造です。最初に列に入った人が、最初に列から出ていきます。時間がかかる処理のリクエストを溜めるのによく使用します。

スタックは、本を上に積み重ねてんでいくような構造で、後に積んだものが、最初に取り出せます。メソッド・関数を呼び出す際に、元の呼び出し元が誰かを保持するために使われています。return した際に呼び出し元に処理が戻れるのは、呼び出し元をスタックに溜めているためです。キューに比べると利用頻度は少ないかもしれません。

2. 動画


3. 動画中に書いたソース

Form1.cs
using System;
using System.Collections;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            //★独り言によるプログラミング講座

            //■Queue と Stack について
            /*
            Queue queue = new Queue();

            //値の格納
            queue.Enqueue("abc");
            queue.Enqueue(999);

            //MessageBox.Show(queue.Count.ToString());

            //値の取得(値も削除される)
            object o1 = queue.Dequeue();
            object o2 = queue.Dequeue();

            //先頭は削除されないので、2回とも同じ値になる
            //object o1 = queue.Peek();
            //object o2 = queue.Peek();

            MessageBox.Show(o1.ToString());
            MessageBox.Show(o2.ToString());
            //MessageBox.Show(queue.Count.ToString());
            */

            /*
            Queue<string> queue = new Queue<string>();
            queue.Enqueue("abc");
            queue.Enqueue("999");
            */

            try {
                Stack stack = new Stack();
                stack.Push(1);
                stack.Push(2);
                stack.Push(3);

                MessageBox.Show(stack.Peek().ToString());
                
                object o1 = stack.Pop(); //3
                object o2 = stack.Pop(); //2 
                object o3 = stack.Pop(); //1


                MessageBox.Show(o1.ToString());
                MessageBox.Show(o2.ToString());
                MessageBox.Show(o3.ToString());
            } catch (Exception ex) {
                MessageBox.Show(ex.ToString());
            }

            this.Dispose();
        }
    }
}