コード例 #1
0
ファイル: Form1.cs プロジェクト: shangxiaomi/Program-Design
        public void CustomerArrived()
        {
            en.Select   = rd.Next(1, 4);               //生成顾客级别
            CurrentTime = en.ArriveTime;               //更改系统当前时间
            ++CustomerNum;                             //增加客户数量
            en.Number = CustomerNum;                   //记录客户编号
            int durTime   = rd.Next(600, 3601);        //产生600-3600秒(10分钟到一小时)间的随机整数,为到达客户进行理发需要的时间。
            int interTime = rd.Next(0, 601);           //产生0-600秒 间的随机整数,为与下一客户到达时间的时间间隔。
            int arrT      = en.ArriveTime + interTime; //计算下一个顾客的到达时间
            //开始排队,找到最短队伍,并加入队伍。
            int i = MinQueue(en.Select);               //找到该级别理发师队列最短的队伍

            en.NType      = i;
            en.dur        = durTime;
            cn.ArriveTime = en.ArriveTime; //顾客的到达时间
            cn.Duration   = durTime;       //顾客的服务时间
            cn.Number     = en.Number;     //顾客的编号
            if (en.Select == 1)            //选择相应的理发师队伍入队
            {
                QStaff1[i].EnQueue(cn);
            }
            else if (en.Select == 2)
            {
                QStaff2[i].EnQueue(cn);
            }
            else if (en.Select == 3)
            {
                QStaff3[i].EnQueue(cn);
            }

            Sum_Queue();//更新等待队列的长度

            int cur;

            text.Text = "第" + (++Number_event).ToString() + "个事件 " + "有新客户!  时间" + StartTime.AddSeconds(cn.ArriveTime).ToLongTimeString().ToString() + "第" + en.Number + "号顾客将由 " + en.Select.ToString() + " 级别的第" + (en.NType + 1).ToString() + " 位理发师进行服务\r\n" + text.Text;
            //如果当前顾客能立马被服务就将当前顾客离开的事件加入事件链表,否则不加入事件链表
            if ((en.Select == 1 && QStaff1[i].Size <= 1) || (en.Select == 2 && QStaff2[i].Size <= 1) || (en.Select == 3 && QStaff3[i].Size <= 1))
            {
                int depT = cn.ArriveTime + durTime; //计算当前顾客的离开时间
                en.OccurTime = depT;                //记录离开事件的发生时间,即顾客的离开事件
                cur          = First(en);
                ev.Insert(cur, en);                 //插入到事件链表中
                TheLeaveTimeOfFirstCustomer_Queue[en.Select, en.NType] = en.OccurTime;
            }
            //下一客户到达事件,加入事件列表。
            en.ArriveTime = arrT;
            en.OccurTime  = en.ArriveTime;
            en.NType      = 0;
            en.dur        = 0;
            en.Select     = 0;
            if (en.ArriveTime < CloseTime)            //顾客的到达时间小于关店时间就进店,否则不进店
            {
                cur = First(en);
                ev.Insert(cur, en);
            }
        }
コード例 #2
0
        static void MySingleLinkedListTest()
        {
            MySingleLinkedList <int> linkedList = new MySingleLinkedList <int>();

            // Test1:顺序插入4个节点
            linkedList.Add(0);
            linkedList.Add(1);
            linkedList.Add(2);
            linkedList.Add(3);

            Console.WriteLine("The nodes in the linkedList:");
            for (int i = 0; i < linkedList.Count; i++)
            {
                Console.WriteLine(linkedList[i]);
            }
            Console.WriteLine("----------------------------");

            // Test2.1:在索引为0(即第1个节点)的位置插入单个节点
            linkedList.Insert(0, 10);
            Console.WriteLine("After insert 10 in index of 0:");
            for (int i = 0; i < linkedList.Count; i++)
            {
                Console.WriteLine(linkedList[i]);
            }
            // Test2.2:在索引为2(即第3个节点)的位置插入单个节点
            linkedList.Insert(2, 20);
            Console.WriteLine("After insert 20 in index of 2:");
            for (int i = 0; i < linkedList.Count; i++)
            {
                Console.WriteLine(linkedList[i]);
            }
            // Test2.3:在索引为5(即最后一个节点)的位置插入单个节点
            linkedList.Insert(5, 30);
            Console.WriteLine("After insert 30 in index of 5:");
            for (int i = 0; i < linkedList.Count; i++)
            {
                Console.WriteLine(linkedList[i]);
            }
            Console.WriteLine("----------------------------");

            // Test3.1:移除索引为5(即最后一个节点)的节点
            linkedList.RemoveAt(5);
            Console.WriteLine("After remove an node in index of 5:");
            for (int i = 0; i < linkedList.Count; i++)
            {
                Console.WriteLine(linkedList[i]);
            }
            // Test3.2:移除索引为0(即第一个节点)的节点
            linkedList.RemoveAt(0);
            Console.WriteLine("After remove an node in index of 0:");
            for (int i = 0; i < linkedList.Count; i++)
            {
                Console.WriteLine(linkedList[i]);
            }
            // Test3.3:移除索引为2(即第三个节点)的节点
            linkedList.RemoveAt(2);
            Console.WriteLine("After remove an node in index of 2:");
            for (int i = 0; i < linkedList.Count; i++)
            {
                Console.WriteLine(linkedList[i]);
            }
            Console.WriteLine("----------------------------");
        }