模拟进程队列的管理(出入队)

上传人:第*** 文档编号:33519041 上传时间:2018-02-15 格式:DOC 页数:6 大小:89KB
返回 下载 相关 举报
模拟进程队列的管理(出入队)_第1页
第1页 / 共6页
模拟进程队列的管理(出入队)_第2页
第2页 / 共6页
模拟进程队列的管理(出入队)_第3页
第3页 / 共6页
模拟进程队列的管理(出入队)_第4页
第4页 / 共6页
模拟进程队列的管理(出入队)_第5页
第5页 / 共6页
点击查看更多>>
资源描述

《模拟进程队列的管理(出入队)》由会员分享,可在线阅读,更多相关《模拟进程队列的管理(出入队)(6页珍藏版)》请在金锄头文库上搜索。

1、OS 实验一 (软件) 2010 OS 实验一 (软件 0967020050)20101模拟进程队列的管理(出入队)( 红色字体为再思考修改处)操作系统实验一实验题(1)模拟双向链接队列的出入队(2)要求:写出算法思想(程序流程图或自然语言描述)(3)提交形式:以学号+姓名创建一个文件夹,里面必须包含(源程序.CPP、可执行程序.exe、算法思想文档.doc) 可将其转换为: front rearhead1 322 3 1图 1图 20进程1 进程20进程5双向链接:(队首前向指针为0;队尾后向指针为 0)而后,细想,这里设 front 和 rear 没有很大作用(当时觉得毕竟它不是真的链式队

2、列,设这样的头,没必要,过后细看老师给出的删除算法,再看图 1 中的头结点,觉得头中的 front,rear 可做标记,故图 2 不太切合题意,不妥。故采取图 1)故可简化为(不带头结点的双链表):参考:数据结构书 p61 的链式队列head(一)分析题意得模型(二)写主要算法双链表置空 init(), 创建 creat(), 在尾插入 append() , 删除 dele(), 输出 print()写入头文件为“dlnkqueue.h” 可参考:数据结构书P61(三)调试运行(多种情况都要运行)OS 实验一 (软件) 2010 OS 实验一 (软件 0967020050)2010源代码为:/

3、*创建双向链表模拟进程队列管理(出入队) (有前后指针之分的带头结点) ,放在文件 dlnkqueue.h 中*/typedef int datatype;typedef struct dlink_nodedatatype info;struct dlink_node *llink,*rlink;dnode;typedef struct/封装带头结点前后指针dnode *front,*rear;queue;/*双向链表置空*/(四)不足体会1.一开始本来想输入字符,但是总是在一些方面不怎么会处理,运行不出来。比如,在输入或输出中稍微改动下,把%d 改为%c 等,可总是运行有些小错误。最后只好改

4、用输入常用的数字。所以,应再好好花时间思考用字符要注意一些的问题。这也突显了我对字符的掌握不是很熟练。2.一开始对题意分析不清,对应转化成的数据模型没把握好,导致重写算法,又得修改。OS 实验一 (软件) 2010 OS 实验一 (软件 0967020050)2010queue *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)p

5、rintf(进程队列为空!n);elseprintf(进程队列为:n);while(p)printf(%d ,p-info);p=p-rlink;/*查找元素 X 是否存在*/dnode *find(queue *head,datatype x)dnode *p=head-front;while(p&p-info!=x)p=p-rlink;if(!p)return NULL;elsereturn p;/*在队尾插入*/queue *append(queue *head,datatype x)dnode *p,*q;p=(dnode*)malloc(sizeof(dnode);p-info=x;

6、if(!head-front)/原进程中队列中无进程/OS 实验一 (软件) 2010 OS 实验一 (软件 0967020050)2010head-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

7、(!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;OS 实验一 (软件) 2010 OS 实验一 (软件 0967020050)2010/队中出队/elseq-llink-rlink=q-rlink;q-rlink-llink=q-llink;free(q);return head;/*创建输入双向链表

8、元素 */queue *creat(queue *head)datatype x;scanf(%d,while(x!=-999)head=append(head,x);scanf(%d,return head;/*模拟进程队列的管理(出入队) (带前后指针的头结点) (双向链表)*/#include#include#includedlnkqueue.hvoid main()queue *head;dnode *p,*q;int i,j;head=init();printf(创建一入队进程(以数字-999 结束):n);head=creat(head);printf(n 请输入要入队的一进程:n);scanf(%d,p=find(head,i);if(p)printf(该进程%d 已存在,无法入队!n,i);elseOS 实验一 (软件) 2010 OS 实验一 (软件 0967020050)2010head=append(head,i);printf(入队后:n);print(head);printf(nn 请输入要出队的一进程:n);scanf(%d,q=find(head,j);if(!q)printf(该进程%d 不存在,无法出队!n,j);elsehead=dele(head,j);printf(出队后:n);print(head);printf(n);

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > 解决方案

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号