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

来源:互联网 发布:知乎 粮食 编辑:程序博客网 时间:2024/05/01 16:11

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);        }    }}