2. 環佇列(Circular Queue)運作系統

namespace Q2
{
    public partial class Form1 : Form
    {
        int SIZE = 6;
        int L = 0;
        int R = 4;
        int N = 2;

        string rd()
        {
            return new Random().Next(1, 1000).ToString();
        }

        void init()
        {
            tb = new TextBox[SIZE];
            flowLayoutPanel1.Controls.Clear();
            for (int i = 0; i < SIZE; i++)
            {
                var t = new TextBox();
                tb[i] = t;
                t.Location = new Point(i * 40, 40);
                t.Width = 40;
                t.Height = 40;
                t.Margin = Padding.Empty;
                flowLayoutPanel1.Controls.Add(t);
            }
        }

        TextBox[] tb;
        public Form1()
        {
            InitializeComponent();
            init();
            tb[4].Text = rd();
            tb[5].Text = rd();
        }

        private void button3_Click(object sender, EventArgs e)
        {
            Close();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            if (N == SIZE - 1)
            {
                SIZE *= 2;
                var old = tb;
                init();

                for (int i = 0; i < L; i++)
                {
                    tb[i].Text = old[i].Text;
                }
                for (int i = L + 1; i < SIZE / 2; i++)
                {
                    var k = old[i].Text;
                    tb[SIZE / 2 + i].Text = k;
                }
                R = (SIZE / 2 + L + 1);
            }
            // add
            tb[L].Text = rd();
            msg.Text = "Added " + tb[L++].Text;
            N++;
            if (L == SIZE) L = 0;
        }

        private void button2_Click(object sender, EventArgs e)
        {
            if (N == 0)
            {
                msg.Text = "Queue is empty";
                return;
            }
            msg.Text = "Removed " + tb[R].Text;
            tb[R].Text = "";
            N--;
            R++;
            if (R == SIZE) R = 0;
        }

        private void Form1_Load(object sender, EventArgs e)
        {

        }
    }
}

Last updated