
模拟进程队列的管理(出入队).docx
5页本文格式为Word版,下载可任意编辑模拟进程队列的管理(出入队) 操作系统测验,这都是我自己在学习OS原理(西安电子科技大学版)写的C语言作业,仅供学习,有些缺乏,仅供交流操作系统这一共有6个算法,可查看我上传的文库 模拟进程队列的管理(出入队)(红色字体为再斟酌修改处) 操作系统测验一 测验题 (1)模拟双向链接队列的出入队 (2)要求:写出算法思想(程序流程图或自然语言描述) (3)提交形式:以学号+姓名创造一个文件夹,里面务必包含(源程序.CPP、可执行程序.exe、 算法思想文档.doc) … 图2 操作系统测验,这都是我自己在学习OS原理(西安电子科技大学版)写的C语言作业,仅供学习,有些缺乏,仅供交流操作系统这一共有6个算法,可查看我上传的文库 源代码为: /******创造双向链表模拟进程队列管理(出入队)(有前后指针之分的带头结点),放在文件dlnkqueue.h 中*******/ typedef int datatype; typedef struct dlink_node { datatype info; struct dlink_node *llink,*rlink; }dnode; typedef struct//封装带头结点前后指针 { dnode *front,*rear; }queue; /********双向链表置空**********/ 操作系统测验,这都是我自己在学习OS原理(西安电子科技大学版)写的C语言作业,仅供学习,有些缺乏,仅供交流。
操作系统这一共有6个算法,可查看我上传的文库 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)//原进程中队列中无进程// 操作系统测验,这都是我自己在学习OS原理(西安电子科技大学版)写的C语言作业,仅供学习,有些缺乏,仅供交流。
操作系统这一共有6个算法,可查看我上传的文库 { 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; } 操作系统测验,这都是我自己在学习OS原理(西安电子科技大学版)写的C语言作业,仅供学习,有些缺乏,仅供交流。
操作系统这一共有6个算法,可查看我上传的文库 //队中出队// 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; } /******模拟进程队列的管理(出入队)(带前后指针的头结点)(双向链表)*****/ #includestdio.h #includestdlib.h #includedlnkqueue.h void main() { queue *head;dnode *p,*q; int i,j; head=init(); printf(创造一入队进程(以数字-999终止):\n); head=creat(head); printf(\n请输入要入队的一进程:\n); scanf(%d,i); p=find(head,i); if(p) printf(该进程%d已存在,无法入队!\n,i); else 操作系统测验,这都是我自己在学习OS原理(西安电子科技大学版)写的C语言作业,仅供学习,有些缺乏,仅供交流。
操作系统这一共有6个算法,可查看我上传的文库 { head=append(head,i); printf(入队后:\n); print(head); } printf(\n\n请输入要出队的一进程:\n); scanf(%d,j); q=find(head,j); if(!q) printf(该进程%d不存在,无法出队!\n,j); else { head=dele(head,j); printf(出队后:\n); print(head); printf(\n); } } — 5 —。
