var head , p ,q , addpcb:link
begin
if head = nil
then begin
head:=addpcb;
head->next = nil
end;
else begin
p:=head
while p<= nil and addpcb->pri >= p->pri
do begin
q:=p;
p:=p->next
end;
q->next:=addpcb;
add->next:=p
end;
end
begin
if head = nil
then begin
head:=addpcb;
head->next = nil
end;
else begin
p:=head
while p<= nil and addpcb->pri >= p->pri
do begin
q:=p;
p:=p->next
end;
q->next:=addpcb;
add->next:=p
end;
end
begin
if head = nil //如果进程链表头是空的
then begin
head:=addpcb; //以所加入的进程作为链表的头
head->next = nil //它的下一个显然是没有的
end;
else begin //否则
p:=head ; //取得链表的头
while (p <= nil) and (addpcb->pri >= p->pri) //循环直到 空或...(pri不知道是什么)
do begin
q:=p; //取得前一个节点
p:=p->next
end; //此时q为符合的最后一个进程
q->next:=addpcb; //新进程加到q的后面
addpcb->next:=p //把不符合的第一进程接到新进程的后面
end;
end