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

合集下载

计算机操作系统进程管理练习题(1)

计算机操作系统进程管理练习题(1)

一、选择题1.在进程管理中,当时,进程从阻塞状态变为就绪状态。

A.进程被进程调度程序选中B.等待某一事件C.等待的事件发生D.时间片用完2.分配到必要的资源并获得处理机时的进程状态是。

A.就绪状态 B.执行状态 C.阻塞状态 D.撤消状态3.P、V操作是。

A.两条低级进程通信原语B.两组不同的机器指令C.两条系统调用命令D.两条高级进程通信原语4.设系统中有n(n>2)个进程,且当前不在执行进程调度程序,试考虑下述4种情况,不可能发生的情况是。

A.没有运行进程,有2个就绪进程,n个进程处于等待状态。

B.有1个运行进程,没有就绪进程,n-1个进程处于等待状态。

C.有1个运行进程,有1个就绪进程,n-2个进程处理等待状态。

D.有1个运行进程,n-1个就绪进程,没有进程处于等待状态。

5.若P、V操作的信号量S初值为2,当前值为-1,则表示有等待进程。

A. 0个B. 1个C. 2个D. 3个6.进程的三个基本状态在一定条件下可以相互转化,进程由就绪状态变为运行状态的条件是。

A.时间片用完B.等待某事件发生C.等待的某事件已发生D.被进程调度程序选中7.进程的三个基本状态在一定条件下可以相互转化,进程由运行状态变为阻塞状态的条件是。

A.时间片用完B.等待某事件发生C.等待的某事件已发生D.被进程调度程序选中8.下列的进程状态变化中,变化是不可能发生的。

A.运行→就绪B.就绪→运行C.等待→运行D.等待→就绪9.一个运行的进程用完了分配给它的时间片后,它的状态变为。

A.就绪B.等待C.运行D.由用户自己确定10.用V操作唤醒一个等待进程时,被唤醒进程的状态变为。

A.等待B.就绪C.运行D.完成11.操作系统通过对进程进行管理。

A. JCBB. PCBC. DCTD. CHCT 12.用P、V操作可以解决互斥问题。

A. 一切B. 某些C. 正确D. 错误13.一个进程被唤醒意味着。

A. 该进程重新占有了CPUB. 它的优先权变为最大C. 其PCB移至等待队列队首D. 进程变为就绪状态14.多道程序环境下,操作系统分配资源以为基本单位。

计算机专业基础综合(进程管理)模拟试卷7

计算机专业基础综合(进程管理)模拟试卷7

计算机专业基础综合(进程管理)模拟试卷7(总分:64.00,做题时间:90分钟)一、<B>单项选择题1-40小题。

下列每题给出的四个选项中,只有一个选项是最符合题目要求的。

</B>(总题数:22,分数:44.00)1.下列选项中,导致创建新进程的操作是( )。

I.用户登录成功Ⅱ.设备分配Ⅲ.启动程序执行A.仅I和ⅢB.仅Ⅱ和ⅢC.仅I和Ⅲ√D.I、Ⅱ、Ⅲ用户登录成功、启动程序执行均会导致创建新进程,而设备分配则不会。

2.下列选项中,操作系统提供给应用程序使用的接口是( )。

A.系统调用√B.中断C.库函数D.原语在现代操作系统中,操作系统提供了包括系统调用、命令接口、图形接口等方便用户使用系统资源的接口,在上述接口中,只有系统调用是提供给程序使用的。

3.下列进程调度算法中,综合考虑了进程等待时间和执行时间的是( )。

A.时间片轮转调度算法B.最短进程优先调度算法C.先来先服务调度算法D.高响应比优先调度算法√在若干进程调度算法中,时间片轮转调度算法考虑的是时间分配上的均衡,最短进程优先调度算法主要考虑的是短作业的等待时间,先来先服务调度算法考虑的是到达顺序的合理性,而只有高响应比优先调度算法做到了综合考虑进程等待时间和执行时间。

4.单处理机系统中,可并行的是( )。

I.进程与进程Ⅱ.处理机与设备Ⅲ.处理机与通道Ⅳ.设备与设备A.I、Ⅱ和ⅢB.I、Ⅱ和ⅣC.I、Ⅲ和ⅣD.Ⅱ、Ⅲ和Ⅳ√在单处理机系统中,仅有一个处理机,所以在一个特定的时刻只能有一个进程能够获得处理机的使用权,因而排除选项A、B和C,只有选项D是合理的答案。

5.如果有一个进程从运行状态变成等待状态,或完成工作后就撤销,则必定会发生( )。

A.进程切换√B.存储器再分配C.时间片轮转D.死锁此题主要考查进程切换的相关内容。

进程调度将从就绪队列中另选一个进程占用处理机。

使一个进程让出处理要,由另一个进程占用处理机的过程称为进程切换。

操作系统原理-第三章进程管理习题(1)

操作系统原理-第三章进程管理习题(1)

第三章进程管理习题一. 单选题1. UNIX操作系统的进程控制块中常驻内存的是()。

A.proc结构B.proc结构和核心栈C.ppda区D.proc结构和user结构2. 当()时,进程从执行状态转变为就绪状态。

A.进程被调度程序选中B.时间片到C.等待某一事件D.等待的事件发生3.在进程状态转换时,下列()转换是不可能发生的。

A.就绪态→运行态B.运行态→就绪态C.运行态→阻塞态D.阻塞态→运行态4.下列各项工作步骤中,()不是创建进程所必需的步骤。

A.建立一个PCBB.作业调度程序为进程分配CPUC.为进程分配内存等资源D. 将PCB链入进程就绪队列5.下列关于进程的叙述中,正确的是()。

A.进程通过进程调度程序而获得CPU。

B.优先级是进行进程调度的重要依据,一旦确定不能改变。

C.在单CPU系统中,任一时刻都有1个进程处于运行状态。

D.进程申请CPU得不到满足时,其状态变为等待状态。

6.从资源管理的角度看,进程调度属于()。

A.I/O管理B.文件管理C.处理机管理D.存储器管理7.下列有可能导致一进程从运行变为就绪的事件是()。

A.一次I/O操作结束B.运行进程需作I/O操作C.运行进程结束D.出现了比现运行进程优先权更高的进程8.一个进程释放一种资源将有可能导致一个或几个进程()。

A.由就绪变运行B.由运行变就绪C.由阻塞变运行D.由阻塞变就绪9.一次I/O操作的结束,有可能导致()。

A.一个进程由睡眠变就绪B.几个进程由睡眠变就绪C.一个进程由睡眠变运行D.几个进程由睡眠变运行10.当一个进程从CPU上退下来时,它的状态应变为()。

A.静止就绪B. 活动就绪C. 静止睡眠D. 活动睡眠11.为使进程由活动就绪变为静止就绪,应利用()原语?** B. ACTIVE C. BLOCK D. WAKEUP12.在下面的叙述中,不正确的是()。

A.一个进程可创建一个或多个线程B.一个线程可创建一个或多个线程C.一个线程可创建一个或多个进程D.一个进程可创建一个或多个进程13. 若系统中只有用户级线程,则处理机调度单位是()。

操作系统实验二报告-时间片轮转进程调度算法1

操作系统实验二报告-时间片轮转进程调度算法1

操作系统实验报告实验二时间片轮转进程调度算法学号:班级:姓名:【实验题目】: 时间片轮转进程调度算法【实验目的】通过这次实验, 加深对进程概念的理解, 进一步掌握进程状态的转变、进程调度的策略与对系统性能的评价方法。

【实验内容】问题描述:设计程序模拟进程的时间片轮转RR 调度过程。

假设有n 个进程分别在T1, … ,Tn 时刻到达系统, 它们需要的服务时间分别为S1, … ,Sn 。

分别利用不同的时间片大小q, 采用时间片轮转RR 进程调度算法进行调度, 计算每个进程的完成时间, 周转时间和带权周转时间, 并且统计n 个进程的平均周转时间和平均带权周转时间。

程序要求如下:1)进程个数n ;每个进程的到达时间T 1, … ,T n 和服务时间S 1, … ,S n ;输入时间片大小q 。

2)要求时间片轮转法RR 调度进程运行, 计算每个进程的周转时间, 带权周转时间, 并且计算所有进程的平均周转时间, 带权平均周转时间;3)输出: 要求模拟整个调度过程, 输出每个时刻的进程运行状态, 如“时刻3: 进程B开始运行”等等;4)输出:要求输出计算出来的每个进程的周转时间, 带权周转时间, 所有进程的平均周转时间, 带权平均周转时间。

实现提示:用C++语言实现提示:1)程序中进程调度时间变量描述如下:int ArrivalTime[100];int ServiceTime[100];int PServiceTime[100];int FinishTime[100];int WholeTime[100];double WeightWholeTime[100];double AverageWT,AverageWWT;bool Finished[100];➢2)进程调度的实现过程如下:➢变量初始化;➢接收用户输入n, T1, … ,Tn, S1, … ,Sn;时间片大小q;➢按照时间片轮转RR算法进行进程调度, 计算进程的完成时间、周转时间和带权周转时间;➢计算所有进程的平均周转时间和平均带权周转时间;➢按格式输出调度结果。

计算机操作系统 第二章 进程管理(2)

计算机操作系统 第二章 进程管理(2)

缺点:
(1)进程在等待进入临界区时也要耗费处理器时间, 不能实现“让权等待” (2)可能出现进程“饥饿”
2.3.2 信号量机制
新的同步工具——信号量和P、V操作。
信号量:是一种数据结构,代表可用资源实 体的数目。
信号量只能通过初始化和两个标准的原语: P(wait(S))、V((signal(S))来访问。 P原语相当于进入区操作,V原语相当于退 出区操作。
AND同步机制
AND同步机制的基本思想是:进程运行时所 需要的所有资源,要么全部分配给它,使用完 毕后一起释放;要么一个都不分配给它。实现 时,采用原子操作:要么全部分配到所有资源, 要么一个也不分配到。 称AND型信号量P原语为:
Swait(Simultaneous wait)
V原语为Ssignal(Simultaneous signal)。
SP原语描述
Swait(S1,S2,„,Sn) /* SP原语描述 */ {while(1) {if(S1>=1&&S2>=1&&„&&Sn>=1) {for(i=1;i<=n;i++) Si--; /* 先确信可满足所有资源要求再减1操作 */ berak; } else /* 资源不够时 */ {将进程放入第一个信号量小于1的阻塞队列Si.sqeue; 将PC中的地址回退到SP开始处; 阻塞进程; } } }
第二章 进程管理(2)
2.3 进程同步
多进程并发执行时,由于资源共享或进程合 作,使进程间形成间接相互制约和直接相互制 约关系,这需要用进程互斥与同步机制来协调 两种制约关系。 进程同步的主要任务:协调进程执行次序, 使并发执行的诸进程间能有效地共享资源和相 互合作,使程序的执行具有可再现性。

南京邮电大学操作技巧系统课后习题集标准答案

南京邮电大学操作技巧系统课后习题集标准答案

《操作系统教程》南邮正式版习题解答第三章进程管理与调度习题1、什么是多道程序设计?多道程序设计利用了系统与外围设备的并行工作能力,从而提高工作效率,具体表现在哪些方面?答:让多个计算问题同时装入一个计算机系统的主存储器并行执行,这种设计技术称“ 多道程序设计”,这种计算机系统称“多道程序设计系统” 或简称“多道系统”。

在多道程序设计的系统中,主存储器中同时存放了多个作业的程序。

为避免相互干扰,必须提供必要的手段使得在主存储器中的各道程序只能访问自己的区域。

提高工作效率,具体表现在:•提高了处理器的利用率;•充分利用外围设备资源:计算机系统配置多种外围设备,采用多道程序设计并行工作时,可以将使用不同设备的程序搭配在一起同时装入主存储器,使得系统中各外围设备经常处于忙碌状态,系统资源被充分利用;•发挥了处理器与外围设备以及外围设备之间的并行工作能力;从总体上说,采用多道程序设计技术后,可以有效地提高系统中资源的利用率,增加单位时间内的算题量,从而提高了吞吐率。

2、请描述进程的定义和属性。

答:进程是具有独立功能的程序关于某个数据集合上的一次运行活动,是系统进行资源分配、调度和保护的独立单位。

进程的属性有:结构性•共享性•动态性•独立性•制约性•并发性3、请描述进程与程序的区别及关系。

答:程序是静止的,进程是动态的。

进程包括程序和程序处理的对象(数据集),进程能得到程序处理的结果。

进程和程序并非一一对应的,一个程序运行在不同的数据集上就构成了不同的进程。

通常把进程分为“系统进程”和“用户进程”两大类,把完成操作系统功能的进程称为系统进程,而完成用户功能的进程则称为用户进程。

4、进程有哪三种基本状态?三种进程状态如何变化?答:通常,根据进程执行过程中不同时刻的状态,可归纳为三种基本状态:·等待态:等待某个事件的完成;·就绪态:等待系统分配处理器以便运行;·运行态:占有处理器正在运行。

noi练习题

NOI练习题一、基础算法1.1 递归算法1. 请编写一个C++函数,实现求斐波那契数列的第n项。

2. 编写一个C++函数,实现计算阶乘n!。

1.2 循环算法3. 编写一个C++程序,实现输出1到100之间所有偶数。

4. 编写一个C++程序,计算1到100之间所有奇数的和。

1.3 排序算法5. 编写一个C++程序,使用冒泡排序算法对数组进行从小到大排序。

6. 编写一个C++程序,使用快速排序算法对数组进行从小到大排序。

二、数据结构2.1 线性表7. 编写一个C++程序,实现单链表的创建、插入、删除和查找操作。

8. 编写一个C++程序,实现顺序表的创建、插入、删除和查找操作。

2.2 栈和队列9. 编写一个C++程序,实现栈的基本操作:入栈、出栈、查看栈顶元素。

10. 编写一个C++程序,实现队列的基本操作:入队、出队、查看队首元素。

2.3 树和图11. 编写一个C++程序,实现二叉树的创建、遍历(前序、中序、后序)。

12. 编写一个C++程序,实现图的邻接矩阵表示和邻接表表示。

三、数学问题3.1 素数问题13. 编写一个C++程序,判断一个整数是否为素数。

14. 编写一个C++程序,输出1到100之间的所有素数。

3.2 最大公约数和最小公倍数15. 编写一个C++程序,计算两个整数的最大公约数。

16. 编写一个C++程序,计算两个整数的最小公倍数。

四、搜索算法4.1 暴力搜索17. 编写一个C++程序,实现全排列算法。

18. 编写一个C++程序,实现组合算法。

4.2 深度优先搜索19. 编写一个C++程序,使用深度优先搜索解决迷宫问题。

20. 编写一个C++程序,使用深度优先搜索求解N皇后问题。

五、动态规划5.1 斐波那契数列21. 编写一个C++程序,使用动态规划求解斐波那契数列的第n项。

5.2 最长公共子序列22. 编写一个C++程序,使用动态规划求解两个字符串的最长公共子序列。

5.3 最小路径和23. 编写一个C++程序,使用动态规划求解二维数组中的最小路径和。

实验一进程的创建与撤销

实验一:进程创建与撤消一、实验目的1、加深对进程概念的理解和进程创建与撤消算法;2、进一步认识并发执行的实质。

二、实验内容本实验完成如下三个层次的任务:(1)系统级—以普通用户身份认识windows的进程管理。

通过windows的“任务管理器”观察进程的状态,进行进程的创建、切换和撤销。

(2)语言级—以普通程序员身份认识高级语言Java的进程创建与撤销工具。

(3)模拟级—以OS设计师身份编程模拟实现进程创建与撤销功能,并在屏幕上观察进程活动的结果。

三、实验步骤1、windows的进程管理(1)按ctrl+alt+delete键,弹出windows任务管理器窗口(2)选择相应操作序号,可以创建一个新的进程(3)在创建完一个新的进程后,可以显示出所有已创建进程的详细信息(4)选择相应操作序号,可以通过输入pcbId或pcbGrade来撤销一个进程2、进程创建与撤销工具(1)进程的创建Process p=Runtime.getRuntime().exec("notepad");(2)进程的撤销p.destroy();3、进程创建与撤销的模拟实现(1)总体设计:①数据结构定义:结构体PCB:进程编号,进程名称,进程优先级和进程创建时间,队列按进程创建时间排序。

PCB空间就绪队列指针空队列指针②函数进程创建:从PCB空间申请一个空PCB,填入进程参数,插入就绪队列;进程终止:将指定的就绪进程移出就绪队列,插入空队列;就绪队列输出:输出就绪队列中的进程信息,以便观察创建或撤消活动的结果;主函数:调用创建函数、调用终止函数、输出就绪队列;③主界面设计:进程创建、进程撤销、退出程序图1 操作主界面④功能测试:从显示出的就绪队列状态,查看操作的正确与否。

(2)详细设计:①数据结构定义:结构体PCB:表1 PCB结构体表PCB空间:是一个能存放十个PCB对象的数组就绪队列指针:定义一整型变量初始值为零空队列指针:定义一整型变量初始值为零,当有进程创建时,加入。

操作系统教程习题答案

操作系统教程习题答案部门: xxx时间: xxx整理范文,仅供参考,可下载自行编辑《操作系统教程》习题答案习题11.单项选择题<1)大中小型计算机是以为中心的计算机系统。

A、CPUB、存储器C、系统总线D、通道<2)以下关于操作系统的说法正确的是。

A、批处理系统是实现人机交互的系统B、批处理系统具有批处理功能,但不具有交互能力C、分时系统是实现自动控制,无须人为干预的系统D、分时系统即具有分时交互能力,又具有批处理能力<3)操作系统的职能是管理软硬件资源、合理地组织计算机工作流程和。

A、为用户提供良好的工作环境和接口B、对用户的命令作出快速响应C、作为服务机构向其它站点提供优质服务D、防止有人以非法手段进入系统<4)设计实时操作系统时,首先应考虑系统的。

A、可靠性和灵活性B、实时性和可靠性C、优良性和分配性D、灵活性和分配性<5)多道程序设计是指。

A、在分布式系统中同一时刻运行多个程序B、在一台处理器上并行运行多个程序C、在实时系统中并发运行多个程序D、在一台处理器上并发运行多个程序<6)以下关于并发性和并行性的说法正确的是。

A、并发性是指两个及多个事件在同一时刻发生B、并发性是指两个及多个事件在同一时间间隔内发生C、并行性是指两个及多个事件在同一时间间隔内发生D、并发性是指进程,并行性是指程序<1)B <2)B <3)A <4)B <5)D <6)B2.填空题<1)微机是以总线为纽带构成的计算机系统。

<2)在批处理兼分时系统中,往往把由分时系统控制的作业称为前台作业,把由批处理系统控制的作业称为后台作业。

b5E2RGbCAP<3)在分时系统中,若时间片长度一定,则用户数越多,系统响应时间越慢。

<4)分布式操作系统能使系统中若干台计算机协同完成一个共同的任务,分解问题成为子计算并使之在系统中各台计算机上并行执行,以充分利用各计算机的优势。

操作系统练习题(含答案)

(三)简答题
1.让多个计算问题同时装入一个计算机系统的主存储器并行执行,这种技术称为多道程序设计,这种计算机系统称为多道程序设计系统。
2.多道程序设计系统必须做好存储保护、程序浮动、资源分配及管理工作。
3.多道程序设计从三个方面提高系统的效率:①减少cPU的空闲时间,提高处理器的利用率。②合理搭配程序,充分利用外围设备资源。③发挥处理器与外围设备,以及外围设备之间的并行工作能力。
A.缩短了每个程序的执行时间B.系统效率随并行工作道数成比例增长
c.提高了系统效率D.使用设备时不会发生冲突
4.进程是( )。
A.一个系统软件B.与程序概念等效c.存放在内存中的程序D.执行中的程序
5.进程的( )和并发性是两个很重要的属性。A.动态性B.静态性c.易用性D.顺序性
6.( )是完成操作系统功能的进程。
(四)计算题
1.若程序PA和Pb单独执行时分别用Ta和Tb,TA=1小时,Tb=1.5小时,其中处理器工作时间分别TA=18分钟,TB=27分钟。如果采用多道程序设计方法,让PA,Pb并行工作,假定处理器利用率达到50%,另加15分钟系统开销,请问系统效率能提高百分之几?
2.设有PA,PB,PC,Pd四个进程同时依次进入就绪队列它们所需的处理器时间和优先数如下表所示:
15.自愿性中断事件是由( )引起的。A.程序中使用了非法操作码B.程序中访问地址越界c.程序中使用了一条访管指令D.程序中除数为"0"
16.中断装置根据( )判别有无强迫中断事件发生。A.指令操作码为访管指令B.基址寄存器C.限长寄存器D.中断寄存器
17.当出现中断事件后,必须( )才能把断点的信息保护起来。A.把当前PSW放到旧Psw B.把旧Psw放到当前PSw c.把新PSW放到当前PSw D.所有PSw保持不变
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

OS实验一 (软件) 2010
OS实验一 (软件0967020050)2010
1
模拟进程队列的管理(出入队)
(
红色字体为再思考修改处)

操作系统实验一
实验题
(1)模拟双向链接队列的出入队
(2)要求:写出算法思想(程序流程图或自然语言描述)
(3)提交形式:以学号+姓名创建一个文件夹,里面必须包含(源程序.CPP、可执行程序.exe、
算法思想文档.doc)



可将其转换为: front rear
head

1 3 2

2 3 1
图1

图2

0 进程1 进程2 0
进程5
双向链接:

(队首前向指针为0;
队尾后向指针为0)

而后,细想,这里设front和rear没有很大作用(当时觉得毕竟它不是真的链式队列,设这样的头,没必要,过后细看
老师给出的删除算法,再看图1中的头结点,觉得头中的front,rear可做标记,故图2不太切合题意,不妥。故采取图
1)故可简化为(不带头结点的双链表):

参考:数据结构书p61的链式队列

head

(一)分析题意得模型

(二)写主要算法
双链表置空init(), 创建creat(), 在尾插入append(), 删除dele(), 输出print()
写入头文件为“dlnkqueue.h” 可参考:数据结构书P61

(三)调试运行(多种情况都要运行)
OS实验一 (软件) 2010

OS实验一 (软件0967020050)2010
源代码为:
/******创建双向链表模拟进程队列管理(出入队)(有前后指针之分的带头结点),放在文
件dlnkqueue.h 中*******/

typedef int datatype;
typedef struct dlink_node
{
datatype info;
struct dlink_node *llink,*rlink;
}dnode;

typedef struct//封装带头结点前后指针
{
dnode *front,*rear;
}queue;

/********双向链表置空**********/

(四)不足体会
1.一开始本来想输入字符,但是总是在一些方面不怎么会处理,运行不出来。比如,
在输入或输出中稍微改动下,把%d改为%c等,可总是运行有些小错误。最后只
好改用输入常用的数字。
所以,应再好好花时间思考用字符要注意一些的问题。这也突显了我对字符的掌
握不是很熟练。

2.一开始对题意分析不清,对应转化成的数据模型没把握好,导致重写算法,又得
修改。
OS实验一 (软件) 2010

OS实验一 (软件0967020050)2010
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实验一 (软件) 2010
OS实验一 (软件0967020050)2010
{
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实验一 (软件) 2010
OS实验一 (软件0967020050)2010
//队中出队//
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
#include
#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实验一 (软件) 2010
OS实验一 (软件0967020050)2010
{
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");
}
}

相关文档
最新文档