现在的位置: 首页 > 综合 > 正文

c# 磁盘调度算法:-最短寻道时间优先

2013年03月10日 ⁄ 综合 ⁄ 共 1702字 ⁄ 字号 评论关闭

Form1:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

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

        private void button1_Click(object sender, EventArgs e)
        {
            sys s = new sys();
            s.input(textBox1.Text);
            s.running();
            s.display();
            textBox1.Text = "";
        }
    }
}

sys.cs:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace WindowsFormsApplication1
{
    public class sys
    {
        private static int startPosition = 100;//磁头开始位置
        private static int totalMoving = 0;
        public static List<int> visitList = new List<int>();//访问磁道列表
        private static int size;
        public static string sstr;

        public void input(string s)
        {
            string str;
            string[] array;
            str = s;
            array = str.Split(new char[] { ' ' });
            try
            {
                foreach (string into in array)
                {
                    visitList.Add(Convert.ToInt32(into));
                }
                size = visitList.Count;

            }
            catch
            {
                MessageBox.Show("error");
            }
        }

        public void running()
        {
            int visitNumber = 0;
            for (int i = 0, size = visitList.Count(); i < size; i++)
            {
                visitNumber = searchMinimum(startPosition);
                //System.out.println("当前访问磁道:"+visitNumber);
                sstr += visitNumber.ToString()+"\n"; 
            }

            
        }

        public static int searchMinimum(int startPosition)
        {
            int min = Int32.MaxValue, index = 0, i = 0, thisPosition = 0, computering = 0;
            foreach (int it in visitList)
            {
                computering = Math.Abs(startPosition - it);
                if (min > computering)
                {
                    index = i;
                    min = computering;
                }
                i++;
            }

            thisPosition = visitList.ElementAt<int>(index);
            visitList.RemoveAt(index);
            totalMoving += Math.Abs(startPosition - thisPosition);

            sys.startPosition = thisPosition;
            return thisPosition;
        }

        public void display()
        {
            //MessageBox.Show("time is :" + ((double)totalMoving / size).ToString());
            sstr += ((double)totalMoving / size).ToString();
            MessageBox.Show(sstr);
        }

    }
}

抱歉!评论已关闭.