
3.2 待ち行列(キュー) |
|||||||||||||||||||||||||||||||||||||
|
|
|||||||||||||||||||||||||||||||||||||
| 番号 | 以下をクリックすると,該当箇所にジャンプします |
| (1) | 考え方 |
| (2) | 配列によるキューの実現 |
| (3) | サイクリックなキュー |
| 番号 | 以下をクリックすると,該当箇所にジャンプします |
| (1) | 考え方 |
| (2) | 配列によるキューの実現 |
| (3) | サイクリックなキュー |
[Program 3−2] キュー動きを確認するプログラム
| //宣言分部 private string[] Que=new string[10]; private int QuePointer=0; // dequeue private string Deque() { if(QuePointer==0) {MessageBox.Show("キューが空です."); return "" } else { string R=Que[0]; QuePointer--; for(int i=0;i<QuePointer;i++) Que[i]=Que[i+1];// すべての要素をずらす return R; } } // enqueue private void Enque(string V) { if (QuePointer>=Que.Length) MessageBox.Show("キューが満杯です."); else Que[QuePointer++]=V; } private void 表示() { listBox1.Items.Clear(); for(int i=0;i<QuePointer;i++)listBox1.Items.Add(Que[i]); } private void button1_Click(object sender, System.EventArgs e) { Enque(textBox1.Text); 表示(); } private void button2_Click(object sender, System.EventArgs e) { string R=Deque(); label1.Text=R; 表示(); } |
| 番号 | 以下をクリックすると,該当箇所にジャンプします |
| (1) | 考え方 |
| (2) | 配列によるキューの実現 |
| (3) | サイクリックなキュー |

[Program 3−3] キュー動きを確認するプログラム
フォーム定義は[Program 3-2]と同じです。
| // 宣言分部 private const int MAXQUE = 10; private string[] QUE=new string[MAXQUE]; private int StartPointer; private int EndPointer; // 初期設定 private void Form1_Load(object sender, System.EventArgs e) { StartPointer=0; EndPointer=0; } // キュー内容の表示 private void 表示() { int i; listBox1.Items.Clear(); if(EndPointer==StartPointer) for(i=0;i<MAXQUE;i++)listBox1.Items.Add("----"); else if(EndPointer<StartPointer) { for(i=0;i<EndPointer;i++)listBox1.Items.Add(QUE[i]); for(i=EndPointer;i<StartPointer;i++)listBox1.Items.Add("----"); for(i=StartPointer;i<MAXQUE;i++)listBox1.Items.Add(QUE[i]); } else { for(i=0;i<StartPointer;i++)listBox1.Items.Add("----"); for(i=StartPointer;i<EndPointer;i++)listBox1.Items.Add(QUE[i]); for(i=EndPointer;i<MAXQUE;i++)listBox1.Items.Add("----"); } } private string Deque() { string SR=""; if(StartPointer!=EndPointer){ SR=QUE[StartPointer]; StartPointer=CountP(StartPointer); } else MessageBox.Show("キューが空です."); return SR; } private void Enque(string V) { int P = CountP(EndPointer); if(P!=StartPointer) { QUE[EndPointer]=V; EndPointer=P; } else MessageBox.Show("キューが満杯です."); } private int CountP(int P) { P++; if(P>=MAXQUE) P= 0; return P; } private void button1_Click(object sender, System.EventArgs e) { Enque(textBox1.Text); 表示(); } private void button2_Click(object sender, System.EventArgs e) { label1.Text=Deque(); 表示(); } |
| 番号 | 以下をクリックすると,該当箇所にジャンプします |
| (1) | 考え方 |
| (2) | 配列によるキューの実現 |
| (3) | サイクリックなキュー |