Exemple #1
0
        public hole findByHoleNum(int i)
        {
            if (isEmpty())
            {
                return(null);
            }
            hole tmp = head;

            while (tmp.get_holeNum() != i && tmp.get_next() != null)
            {
                tmp = tmp.get_next();
            }
            if (tmp.get_holeNum() == i)
            {
                return(tmp);
            }
            else
            {
                return(null);
            }
        }
Exemple #2
0
        public void swap(hole tmp, hole tmp2)
        {
            int tmpHN    = tmp2.get_holeNum();
            int tmpStart = tmp2.get_start();
            int tmpSize  = tmp2.get_size();
            int tmpEnd   = tmp2.get_end();

            tmp2.set_start(tmp.get_start());
            tmp2.set_size(tmp.get_size());
            tmp2.set_holeNum(tmp.get_holeNum());
            tmp2.set_end(tmp.get_end());
            tmp.set_start(tmpStart);
            tmp.set_size(tmpSize);
            tmp.set_holeNum(tmpHN);
            tmp.set_end(tmpEnd);
        }
        private void button2_Click(object sender, EventArgs e)
        {
            bool ok = true;

            disHole();
            listBox1.Items.Clear();
            listBox2.Items.Clear();
            string proName = textBox1.Text;
            int    proSize = Convert.ToInt32(numericUpDown3.Value);

            if (comboBox1.Text == "First Fit")
            {
                int[] arr     = mMem.allEle(2);
                int   holeNum = mMem.size();
                for (int i = 0; i < holeNum; i++)
                {
                    if (arr[i] >= proSize)
                    {
                        mNumProcess++;
                        hole tmp      = mMem.findBySize(arr[i]);
                        int  proStart = tmp.get_start();
                        int  proEnd   = proStart + proSize - 1;
                        mPro.Add(proName, proStart, proSize, tmp.get_holeNum());
                        int tmpSize = tmp.get_size();
                        int newSize = tmpSize - proSize;
                        if (newSize != 0)
                        {
                            tmp.set_start(proStart + proSize);
                            tmp.set_size(tmpSize - proSize);
                        }
                        else
                        {
                            mMem.remove(tmp);
                            mHoleNum--;
                        }
                        ok = false;
                        break;
                    }
                    else
                    {
                        ok = true;
                    }
                }
            }
            else if (comboBox1.Text == "Best Fit")
            {
                mMem.sort(2);
                int[] arr     = mMem.allEle(2);
                int   holeNum = mMem.size();
                for (int i = 0; i < holeNum; i++)
                {
                    if (arr[i] >= proSize)
                    {
                        mNumProcess++;
                        hole tmp      = mMem.findBySize(arr[i]);
                        int  proStart = tmp.get_start();
                        int  proEnd   = proStart + proSize - 1;
                        mPro.Add(proName, proStart, proSize, tmp.get_holeNum());
                        int tmpSize = tmp.get_size();
                        int newSize = tmpSize - proSize;
                        if (newSize != 0)
                        {
                            tmp.set_start(proStart + proSize);
                            tmp.set_size(tmpSize - proSize);
                        }
                        else
                        {
                            mMem.remove(tmp);
                            mHoleNum--;
                        }
                        ok = false;
                        break;
                    }
                    else
                    {
                        ok = true;
                    }
                }
            }
            else if (comboBox1.Text == "Worst Fit")
            {
                mMem.sort(2);
                int[] arr     = mMem.allEle(2);
                int   holeNum = mMem.size();
                if (holeNum == 0)
                {
                    ;
                }
                else if (arr[holeNum - 1] >= proSize)

                {
                    mNumProcess++;
                    hole tmp      = mMem.findBySize(arr[holeNum - 1]);
                    int  proStart = tmp.get_start();
                    int  proEnd   = proStart + proSize - 1;
                    mPro.Add(proName, proStart, proSize, tmp.get_holeNum());
                    int tmpSize = tmp.get_size();
                    int newSize = tmpSize - proSize;
                    if (newSize != 0)
                    {
                        tmp.set_start(proStart + proSize);
                        tmp.set_size(tmpSize - proSize);
                    }
                    else
                    {
                        mMem.remove(tmp);
                        mHoleNum--;
                    }
                    ok = false;
                }
                else
                {
                    ok = true;
                }
            }
            if (ok)
            {
                mErrorMsg = "Thers is no enough memory";
                MessageBox.Show(mErrorMsg);
            }
            textBox1.Text = "p" + mNumProcess;

            printPro();
        }