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