⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 复件 xdy.cpp

📁 一个模拟进程管理的程序
💻 CPP
字号:
#include<iostream.h>
class List;
class ListNode
{
	friend class List;
public:
	ListNode(int item);
	int getdata(){return data;}
	ListNode *NextNode(){return link;}
	ListNode *getnode(int item,ListNode *next);
private:
	int data;
	ListNode *link;
};
class List
{
public:
	int Insert(int x, int i);
	
    void Remove(int i);
	List(int value){last=first=new ListNode(value);};
	~List();
	void makeempty();
	ListNode *getfirst(){return first;}
	ListNode *getlast(){return last;}
	int get(int i);
	void printf();
	int find(int value);
	void Remove(int name,int length);
	int Length();
   int find1(int k,int h);
   int jack(int h);
   void AA(int n,int h);
private:
	ListNode * first,* last;
};

ListNode::ListNode(int item)
{
	data=item;
	link=NULL;
}
ListNode *ListNode::getnode(int item,ListNode *next)
{
  ListNode *newnode=new ListNode(item);
  newnode->link=next;
  return newnode;
}

void List::makeempty()
{
 ListNode *q;
 while(first!=NULL){
	 q=first;first=q->link;delete q;}
 last=first;
}

int List::Insert(int x, int i)//插入name
{
	ListNode *p=first;int k=0;
	while(p!=NULL&&k<i-1)
	{
		p=p->link;
		k++;
	}
	if(p==NULL&&first!=NULL)
	{
	  cout<<"Invaid position for Iosertation! \n";
	  return 0;
	}
	ListNode *newnode=new ListNode(x);
	if(first==NULL||i==0)
	{
		newnode->link=first;
		if(first==NULL)
			last=newnode;
		first=newnode;
	}
	else
	{
		newnode->link=p->link;
		if(p->link==NULL)
			last=newnode;
		p->link=newnode;
	}
	return 1;
}

void List::Remove(int i)//删除第i个数
{
	ListNode *p=first,* q;int k=0;
	
	while(p!=NULL&&k<i-1)
	{
        p=p->link;
		k++;
	}
	if(p==NULL||p->link==NULL)
	{
		cout<<"Invalid position for Deletion!\n";
		
	}
	if(i==0)
	{
		q=first;
		p=first=first->link;
	}
	else
	{
		q=p->link;
		p->link=q->link;
	}
	if(q==last)
		last=p;
	k=q->data;
	delete q;
}
List::~List()
{
	ListNode *p;
	while(first!=NULL)
	{
		p=first;first=first->link;delete p;
	}
}
int List::get(int i)
{
	ListNode *q=first;int h;
	for(int j=0;j<i;j++)
	{
		if(q->link==NULL)
		{	cout<<"Invalid position for Deletion!\n"<<endl;
			return 0;
		}
		q=q->link;
	}
	h=q->data;
	return h;//返回值
}
void List::printf()
{
  ListNode *p=first;int k;
  while(p!=NULL){k=p->data;p=p->link;cout<<k<<" ";}
}
int List::find(int value)//返回地址
{
 ListNode *p=first;int i=0;
 while(p!=NULL&&p->data!=value){p=p->link;i++;}
 return i;
}
void List::Remove(int name,int length)//删除名为name,大小为length
{
  int a=find(name);
  for(int i=0;i<length;i++){Remove(i);Insert(0,i);}
}
int List::Length()
{
 ListNode* p=first;int count=0;
 while(p!=NULL){p=p->link;count++;}
 return count;
}
int List::find1(int k,int h )//定位
{
  int i=find(0);
  if((i+h)<Length()){for(int j=0;j<h;j++){if(get(i+1)!=0){return 0;}
  else i++;
  continue;}}return 1;
}
int List::jack(int h)
{
  int b[100];int k=0;
  for(int i=0;i<Length();i++)
  {
	  if(get(i)!=0){b[i]=0;}
	  else {b[i]=i;}
  }
  for(int n=0;n<(Length()-h);n++)
  {
    for(int i=n;i<(h+n);i++)
	{
	   k+=b[i];
	}
	if(k=0)return n;
  }return 0;
}
void List::AA(int n,int h)
{
  int b[100];
  for(int i=0;i<Length();i++)
  {if(get(i)!=0){b[i]=1;} 
  else b[i]=0;}
  for(int k=0;k<(Length()-h);k++)
  {int m=0;
  for(i=k;i<h+k;i++){m+=b[k];}
  if(m=0){for(i=0;i<h;i++)Remove(k);
          for(i=0;i<h;i++)Insert(n,k);}}
}

void main()
{
     List a(0);
	a.makeempty ();
	int length;
	cout<<"请输入内存的大小,用0表示内存未被使用:   ";
	cin>>length;
	for(int j=0;j<length;j++)
	a.Insert(0,j);a.printf();cout<<endl; 
	cout<<"以1代表操作系统   请输入操作系统的大小:"<<endl;
	int len,x;cin>>len;if(len>length){cout<<"worng"<<endl;goto end;}
	else	{for(int f=0;f<len;f++)a.Remove(0);
    for(int s=0;s<len;s++)a.Insert(1,0);
	a.printf();cout<<endl;
	cout<<"此时内存的空闲空间为:";
	x=length-len;
	cout<<x<<endl;}
	char k;
	while(k)	
	{cout<<"请选择:输入1时进行内存分配;输入2时进行内存回收;输入3时进行合并;输入4时退出程序!"<<endl;
		cin>>k;
      switch(k)
	  {
	  case '1':int n,h,g;
		  cout<<"输入作业名(0除外)和大小:";
		  cin>>n>>h;g=a.find(0);
           if((g+h)>=length){cout<<"worng";}
		   else	{int b[100];
  for(int i=0;i<a.Length();i++)
  {if(a.get(i)!=0){b[i]=1;} 
  else b[i]=0;}
  for(int k=0;k<(a.Length()-h);k++)
  {int m=0;
  for(i=k;i<h+k;i++){m+=b[k];}
  if(m=0){for(i=0;i<h;i++){a.Remove(k);
  a.Insert(n,k);}}} a.printf();cout<<endl;}
		   	           

		  if(h<=x)
	{  
	
	   	cout<<"此时内存的空闲空间为:"<<x-h<<endl;
		x-=h;
	}
  	else cout<<"内存空间不够,无法分配"<<endl;

		  
		  
		  break;
	  case '2': cout<<"输入要回收的作业名和大小";int name,l,j,b;cin>>name>>l;
		  j=a.find(name);if(a.get(j+l-1)!=name){cout<<"内存回收大于已分配的内存!"<<endl;}
		  else {for(b=0;b<l;b++)a.Remove(j);
		  for(b=0;b<l;b++)a.Insert(0,j);
		  cout<<"此时内存的空闲空间为:"<<x+l<<endl;
	       x=x+l;
		   a.printf();cout<<endl;}
		  break;
	  case '3':
		  cout<<"你现在进行的是合并操作,你可以多次选择此操作,直到内存中只有一端有空闲空间"<<endl;
		  a.Remove(a.find(0));
		  a.Insert(0,length-2);a.printf ();cout<<endl;
		  break;
	  case '4':goto end;
		 
	  }

	  }
 

end:;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -