- 1、本文档共6页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
模拟进程队列的管理(出入队)(红色字体为再思考修改处)
操作系统实验一
实验题
(1)模拟双向链接队列的出入队
(2)要求:写出算法思想(程序流程图或自然语言描述)
(3)提交形式:以学号+姓名创建一个文件夹,里面必须包含(源程序.CPP、可执行程序.exe、算法思想文档.doc)
…
…
可将其转换为: front rear
head
源代码为:
/******创建双向链表模拟进程队列管理(出入队)(有前后指针之分的带头结点),放在文件dlnkqueue.h 中*******/
typedef int datatype;
typedef struct dlink_node
{
datatype info;
struct dlink_node *llink,*rlink;
}dnode;
typedef struct//封装带头结点前后指针
{
dnode *front,*rear;
}queue;
/********双向链表置空**********/
queue *init()
{
queue *head;
head=(queue*)malloc(sizeof(queue));
head-front=NULL;
head-rear=NULL;
return head;
}
/*******输出双向链表元素**********/
void print(queue *head)
{
dnode *p;
p=head-front;
if(!p)printf(进程队列为空!\n);
else
{
printf(进程队列为:\n);
while(p)
{
printf(%d ,p-info);p=p-rlink;
}
}
}
/*********查找元素X是否存在*********/
dnode *find(queue *head,datatype x)
{
dnode *p=head-front;
while(pp-info!=x)
p=p-rlink;
if(!p)return NULL;
else
return p;
}
/***********在队尾插入**********/
queue *append(queue *head,datatype x)
{
dnode *p,*q;
p=(dnode*)malloc(sizeof(dnode));
p-info=x;
if(!head-front)//原进程中队列中无进程//
{
head-front=head-rear=p;
p-llink=NULL;
p-rlink=NULL;
}
else//原进程队列中有进程//
{
q=head-front;
while(q-rlink)
q=q-rlink;
p-rlink=q-rlink;
p-llink=q;
q-rlink=p;
head-rear=p;
}
return head;
}
/*********删除X********/
queue *dele(queue *head,datatype x)
{
dnode *q;
q=find(head,x);
if(!q)
{printf(该进程%d找不到,无法出队!\n,x);return NULL;}
else
{
//队首出队//
if(q-llink==NULL)
{
head-front=q-rlink;
q-rlink-llink=NULL;
}
//队尾出队//
else if(q-rlink==NULL)
{
head-rear=q-llink;
q-llink-rlink=NULL;
}
//队中出队//
else
{
q-llink-rlink=q-rlink;
q-rlink-llink=q-llink;
}
free(q);return head;
}
}
/********创建输入双向链表元素*********/
queue *creat(queue *head)
{
datatype x;
scanf(%d,x);
while(x!=-999)
{
head=append(head,x);
scanf(%d,x);
}
return head;
}
/******模拟进程队列的管理(出入队)(带前后指针的头结
文档评论(0)