📄 time_priority.h
字号:
#include <stdio.h>
#include <iostream.h>
class Lin_pcb;
struct process
{
char* name;//进程名称
int time;//进程需要时间
int priority;//进程优先级
int state;//ready "0"; run "1"; finish "-1"
};
class pcb
{
friend class Lin_pcb;
private:
process data;
pcb *next;
public:
pcb(pcb *nextt=NULL)
{
next=nextt;
}
pcb(const process& item ,pcb *nextt=NULL)
{
data=item;
next=nextt;
}
~pcb(void){}
char* get_name(void);
int get_time(void);
int get_priority(void);
int get_state(void);
pcb* get_next(void);
void alter_time(void);
void alter_add_priority(void);
void alter_sub_priority(int i);
void alter_state(int i);
};
void pcb::alter_add_priority()
{
data.priority++;
}
void pcb::alter_sub_priority(int i)
{
data.priority=data.priority-i;
}
void pcb::alter_state(int i)
{
data.state=i;
}
void pcb::alter_time()
{
data.time--;
}
char* pcb::get_name(void)
{
return data.name;
}
int pcb::get_priority()
{
return data.priority;
}
int pcb::get_state()
{
return data.state;
}
int pcb::get_time()
{
return data.time;
}
pcb* pcb::get_next()
{
return next;
}
class Lin_pcb
{
private:
pcb *head;
public:
Lin_pcb(void);
~Lin_pcb(void);
void initial_insert(const process& item);
void lunhuan_insert(const process& item);
void alter_position(void);
void lunhuan(void);
};
Lin_pcb::Lin_pcb(void)
{
head=new pcb();
}
Lin_pcb::~Lin_pcb(void)
{}
void Lin_pcb::initial_insert(const process& item)
{
pcb *p=head->next;
pcb *q=head;
while(p!=NULL)
{
q=q->next;
p=p->next;
}
pcb *qq=new pcb(item,q->next);
q->next=qq;
}
void Lin_pcb::lunhuan_insert(const process& item)
{
pcb *p=head;
//pcb *q=p;
for(int i=0;i<4;i++)
{
// q=p;
p=p->next;
}
if((p->get_state()==-1))
{
p=head;
while(p->next->get_state()!=-1)
{
p=p->next;
}
pcb *qq=new pcb(item,p->next);
p->next=qq;
}
else
{
initial_insert(item);
}
}
void Lin_pcb::alter_position(void)
{
pcb *s , *p=head;
s=p->next;
p->next=p->next->next;
process x=s->data;
delete s;
lunhuan_insert(x);
}
void Lin_pcb::lunhuan(void)
{
while((head->next!=NULL) && (head->next->get_state()==0))
{
head->next->alter_time();
head->next->alter_state(1);
pcb *p=head->next;
int i=0;
while(p->next!=NULL&&p->next->get_state()!=-1)
{
p->next->alter_add_priority();//////////
p=p->next;
i++;
}
head->next->alter_sub_priority(i);//////////
if(head->next->get_time()==0)
{
head->next->alter_state(-1);
alter_position();
}
else
{
head->next->alter_state(0);
alter_position();
}
pcb *q=head;
for(i=0;i<5;i++)
{
cout<<q->next->get_name()<<" "<<q->next->get_priority()<<" "<<q->next->get_state()<<" "<<q->next->get_time()<<endl;
q=q->next;
}
cout<<endl<<endl;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -