第137回 Queue と Stack について
公開日:2015-04-26 更新日:2019-05-11
1. 概要
独り言によるプログラミング講座、「第137回 Queue と Stack について」です。
値を複数持ちたい場合、配列やリストを使いますが、先に入れた値を先に出したり、後から入れたものを先に出す、などのルールを持たせたものが、キュー(Queue:順番を待つ列) と スタック(Stack:積み重ね) になります。
お店でレジの前に並ぶことがあると思いますが、あれがキュー構造です。最初に列に入った人が、最初に列から出ていきます。時間がかかる処理のリクエストを溜めるのによく使用します。
スタックは、本を上に積み重ねてんでいくような構造で、後に積んだものが、最初に取り出せます。メソッド・関数を呼び出す際に、元の呼び出し元が誰かを保持するために使われています。return した際に呼び出し元に処理が戻れるのは、呼び出し元をスタックに溜めているためです。キューに比べると利用頻度は少ないかもしれません。
値を複数持ちたい場合、配列やリストを使いますが、先に入れた値を先に出したり、後から入れたものを先に出す、などのルールを持たせたものが、キュー(Queue:順番を待つ列) と スタック(Stack:積み重ね) になります。
お店でレジの前に並ぶことがあると思いますが、あれがキュー構造です。最初に列に入った人が、最初に列から出ていきます。時間がかかる処理のリクエストを溜めるのによく使用します。
スタックは、本を上に積み重ねてんでいくような構造で、後に積んだものが、最初に取り出せます。メソッド・関数を呼び出す際に、元の呼び出し元が誰かを保持するために使われています。return した際に呼び出し元に処理が戻れるのは、呼び出し元をスタックに溜めているためです。キューに比べると利用頻度は少ないかもしれません。
2. 動画
3. 動画中に書いたソース
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();
}
}
}