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

更新时间:2023-05-15 23:50:01 阅读量: 实用文档 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

操作系统实验,这都是我自己在学习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(p&&p->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; }

/******模拟进程队列的管理(出入队)(带前后指针的头结点)(双向链表)*****/

#include<stdio.h> #include<stdlib.h> #include"dlnkqueue.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"); }

}

本文来源:https://www.bwwdw.com/article/6wy4.html

Top