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

📄 分区管理(单步).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();
    ListNode *find1(int i);
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;
}
ListNode *List::find1(int i)//定位
{
  if(i<0)return 0;
  ListNode *p=first->link;int j=0;
  while(p!=NULL&&j<i){p=p->link;j++;}
  return p;
}


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;
	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,t;
		  cout<<"输入作业名(0除外)和大小:";
		  cin>>n>>h;g=a.find(0);
		  if(h<=x)
		  {  
		cout<<"此时内存的空闲空间为:"<<x-h<<endl;
		x-=h;
		for(t=0;t<h;t++)
		{if(a.get(g+1)!=0)g++;}
		  for(t=0;t<h;t++)a.Remove(g);
		  for(t=0;t<h;t++)a.Insert(n,g);
		  a.printf();cout<<endl;
		  }
  	      else cout<<"内存空间不够,无法分配"<<endl;
		  break;
	  case '2': cout<<"输入要回收的作业名和大小";int name,l,j,b;cin>>name>>l;
		   j=a.find(name);
		  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 + -