js通过建立链表来模拟我们操作系统的调度算法(fcfs)先来先服务

  class Node {
            constructor(arrive, ser) {
                this.arrive = arrive;
                this.ser = ser;
                this.begin = " ";
                this.finish = " ";
                this.turnover = " ";
                this.w = " ";
                this.next = null;
                this.size = 0;
            }
            show() {
                console.log("当前节点的arrive为 " + this.arrive + " ser为" + this.ser);
            }
        }
        class List {
            constructor() {
                this.size = 0;
                this.head = new Node();
                this.next = "";
            }
            arrivesort() {
           
            
                let p = this.head;
                let pp = p;
                let nunode = null;
                let ppr = p.next;

                    while (pp.next != null) {
                        if (ppr.arrive < pp.arrive) {//如果后一个节点的ser小于前一个的ser那么将我们的节点进行交换

                            let arrive = 0, begin = 0; ser = 0; let turnover = 0, finish = 0, w = 0;
                            arrive = ppr.arrive;
                            begin = ppr.begin;
                            turnover = ppr.turnover;
                            finish = ppr.finish;
                            ser = ppr.ser;
                            w = ppr.w;

                            ppr.arrive = pp.arrive;
                            ppr.begin = pp.begin;
                            ppr.turnover = pp.turnover;
                            ppr.finish = pp.finish;
                            ppr.ser = pp.ser;
                            ppr.w = pp.w;

                            pp.arrive = arrive;
                            pp.begin = begin;
                            pp.turnover = turnover;
                            pp.finish = finish;
                            pp.ser = ser;
                            pp.w = w;

                        }


                        ppr = ppr.next;
                        pp = pp.next;


                    }

                
                p = p.next;
            
        }
            display() {
                let result = "\n";
                let p = this.head;

                while (p != null) {
                    result = result + "到达时间 " + p.arrive + "服务时间 " + p.ser + "开始时间 " + p.begin + "结束时间 " + p.finish + "周转时间 " + p.turnover + "带权时间 " + p.w + "\n";
                    p = p.next;
                    if (p != null) {

                        result = result + "->";
                    }
                }
                console.log(result);
            }
            findlast() {
                let p = this.head;
                while (p.next) {
                    p = p.next;
                }
                return p;
            }
            delnode(arrive, ser) {
                let p = this.head;
                let pr = this.head;
                while (p.next != null && p.ser != ser && p.arrive != arrive) {
                    pr = p;
                    p = p.next;

                }
                console.log(p);
                console.log(pr);
                console.log("ser arrive " + ser + " " + arrive);
                if (p.ser == ser && p.arrive == arrive) {
                    if (p == this.head) {
                        this.head = this.head.next;
                        console.log("待删节点石头节点");
                    }
                    else {
                        console.log("待删节点不是头接点");
                        pr.next = p.next;
                    }
                }
                console.log("skajflsdajflksadflksajdklfjaksldflsadjflkadlksadjfl");
                //this.display();
            }
            addnode(arrive, ser) {
                let num = 0;
                let newNode = new Node(arrive, ser);
                let p = this.head;

                if (p.arrive == undefined) {
                    console.log("头节点为空");
                    p.arrive = arrive;
                    p.ser = ser;

                }
                else {
                    let p = this.findlast();

                    p.next = newNode;
                    p.size = p.size + 1;
                    console.log(p.size);
                    newNode.show();

                }
                p.size++;
            }
            sersort() {
                let p = this.head;
                let pp = p;
                let nunode = null;
                let ppr = p.next;

                while (pp.next != null) {

                    if (ppr.ser < pp.ser) {//如果后一个节点的ser小于前一个的ser那么将我们的节点进行交换

                        let arrive = 0, begin = 0; ser = 0; let turnover = 0, finish = 0, w = 0;
                        arrive = ppr.arrive;
                        begin = ppr.begin;
                        turnover = ppr.turnover;
                        finish = ppr.finish;
                        ser = ppr.ser;
                        w = ppr.w;

                        ppr.arrive = pp.arrive;
                        ppr.begin = pp.begin;
                        ppr.turnover = pp.turnover;
                        ppr.finish = pp.finish;
                        ppr.ser = pp.ser;
                        ppr.w = pp.w;

                        pp.arrive = arrive;
                        pp.begin = begin;
                        pp.turnover = turnover;
                        pp.finish = finish;
                        pp.ser = ser;
                        pp.w = w;

                    }
                    ppr = ppr.next;
                    pp = pp.next;
                }
            }
        }


        let mylist = new List();
        let dzylist = new List();
        let a = 1, b = 2;

        var n = 0;
        var arrive = new Array();
        var ser = new Array();
        n = prompt("请输入您想要进行的进程的个数");
        for (let i = 0; i < n; i++) {
            let num = i + 1;
            arrive[i] = parseInt(prompt("请输入第" + num + "个程序的开始时间"));
            ser[i] = parseInt(prompt("请输入第" + num + "个程序的结束时间"));
        }
        for (let i = 0; i < n; i++) {
            mylist.addnode(arrive[i], ser[i]);
        }
        mylist.display();
        function fun1(){
             mylist.arrivesort();
            let p = mylist.head;
            let prr = p;
            console.log(mylist);
            while (p != null) {
                let pr = p.next;

                console.log("p节点");
                console.log(p);
                console.log("pr节点");
                console.log(pr);
                if (p === mylist.head) {
                    console.log("该节点为头节点");
                    p.begin = p.arrive;
                    p.finish = p.arrive + p.ser;
                    p.turnover = p.finish - p.arrive;
                    p.w = p.turnover / p.ser;
                }

                else {
                    console.log("第二个节点");
                    console.log(prr);

                    console.log(p);
                    console.log(pr);
                    p.begin = prr.finish;

                    p.finish = p.ser + p.begin;
                    p.turnover = p.finish - p.arrive;
                    p.w = p.turnover / p.ser;
                    prr = p;


                }
                p = p.next;

                console.log(p);
            }
            mylist.display();
        }
        var fcfsbox = document.getElementById("fcfs-sure");
        fcfsbox.onclick = function () {
            alert("先来先服务");
            mylist.arrivesort();
            let p = mylist.head;
            let prr = p;
            while (p != null) {
                let pr = p.next;

                console.log("p节点");
                console.log(p);
                console.log("pr节点");
                console.log(pr);
                if (p === mylist.head) {
                    console.log("该节点为头节点");
                    p.begin = p.arrive;
                    p.finish = p.arrive + p.ser;
                    p.turnover = p.finish - p.arrive;
                    p.w = p.turnover / p.ser;
                }

                else {
                    console.log("第二个节点");
                    console.log(prr);

                    console.log(p);
                    console.log(pr);
                    p.begin = prr.finish;

                    p.finish = p.ser + p.begin;
                    p.turnover = p.finish - p.arrive;
                    p.w = p.turnover / p.ser;
                    prr = p;


                }
                p = p.next;

                console.log(p);
            }
            mylist.display();
        }
        function getlength() {
            let p = mylist.head;
            let length = 0;
            while (p != null) {
                length = length + 1;
                p = p.next;
            }
            return length;
        }
        function sersort() {
            let p = mylist.head;
            while (p.next != null) {
                if (p === mylist.head) {

                    p.begin = p.arrive;
                    p.finish = p.arrive + p.ser;
                    p.turnover = p.finish - p.arrive;
                    p.w = p.turnover / p.ser;

                }
                else {

                    let pp = p;
                    let nunode = null;
                    let ppr = p.next;

                    while (pp.next != null) {

                        if (ppr.ser < pp.ser) {//如果后一个节点的ser小于前一个的ser那么将我们的节点进行交换

                            let arrive = 0, begin = 0; ser = 0, turnover = 0, finish = 0, w = 0;
                            arrive = ppr.arrive;
                            begin = ppr.begin;
                            turnover = ppr.turnover;
                            finish = ppr.finish;
                            ser = ppr.ser;
                            w = ppr.w;

                            ppr.arrive = pp.arrive;
                            ppr.begin = pp.begin;
                            ppr.turnover = pp.turnover;
                            ppr.finish = pp.finish;
                            ppr.ser = pp.ser;
                            ppr.w = pp.w;

                            pp.arrive = arrive;
                            pp.begin = begin;
                            pp.turnover = turnover;
                            pp.finish = finish;
                            pp.ser = ser;
                            pp.w = w;

                        }
                        ppr = ppr.next;
                        pp = pp.next;
                    }
                }
                p = p.next;
            }
        }

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值