文档库 最新最全的文档下载
当前位置:文档库 › 东北大学数据结构实验

东北大学数据结构实验

东北大学数据结构实验
东北大学数据结构实验

课程编号:B080101050

1. 实验目的

实验一:

1.理解队列的概念以及用法

2.掌握queue类的使用

3.熟练运用队列先进先出,模拟打印机的工作过程

实验二:

1.理解图的概念

2.理解并掌握图的存储,并利用邻接表来存储图的信息

3.理解并掌握Dijkstra算法

4.运用Dijkstra算法解决最短路径的问题

针对每次实验,写出你认为比较重要的实验目的

2. 实验内容与实验步骤

2.1打印机模拟程序的内容与步骤

(1)简短明确地写出实验的内容

模拟打印机打印的过程,以先来先服务的策略来完成打印工作。先从一个文件中读取所有任务的大小与到达时间,并将其存储在workload队列中。使用一个计数器来模拟时间的流逝,当当前时间与workload队列中的一个任务的到达时间相等的时候,该任务被弹出,并被压入到另一个等待执行的队列中。该等待执行的队列以先入先出的准则依次弹出任务并执行。最后计算出任务总数与,总等待时间,平均等待时间。

(2)简短描述抽象数据类型或设计的函数描述,说明为什么要使用这种抽象数据类型,并说明你的解决设想

①一个simulator的抽闲类和它的实现类fifo类。该类的simulate函数用来实现

先进先出策略的打印算法。

②两个队列,一个workload队列,一个是等待执行队列。Workload队列中存

放的是所有的打印任务,通过文件读取并保存。而等待执行队列则是为了实现FIFO 功能的队列,即时间小的就先被压入等待执行队列,自然也就先被pop并执行。

解决设想:

利用一个int型变量模拟时间的流逝,然后当等待执行队列为空的时候,就不断循环检查workload队列中是否有任务到达,若有则将其弹出并push进等待执行

队列。而当等待执行队列中有任务时则执行它,并且同时判断workload队列中是

否有任务到达。若workload和等待执行队列同时为空了,则程序结束。

(3)简短明确地写出你实验所采用的存储结构及其用途,详细说明其中的属性的含

义。

①job类封装了一个任务的所有属性。包括任务的大小和该任务的用户:任务

的大小即为该打印任务一共需要打印的页数,而该任务来自哪个计算机。

②event类封装了一个打印事件的所有属性。任务本身并不包含打印的信息,

而一个打印事件则需要包含一个待执行的任务和该任务到达的时间。打印的时候

就是根据这些信息来执行它。而待执行的任务属性即是一个任务对象,而该任务到

达的时间即是该任务在某个时间到达打印机,并等待被执行。

③simulator类封装了所有打印机的操作,包括加载任务文件,执行打印任务

等。该类将从文件中加载的任务封装成对象,并存储于workload队列中。然后待

时间到时,将该任务pop并push到等待执行队列中。在该队列中自然就按FIFO

的策略来执行。

2.2欧洲旅行实验的内容与步骤

(1) 简短明确地写出实验的内容

该实验就是在互相连接的城市中寻找给定两个城市之间的费用最小的路径。用邻接表来存储整个图的信息,并用一个map对象来存储各个城市的信息,包括它上一个城市,从起点到该城市的费用和距离。最后利用Dijkstra算法来对任意给定的

两个城市,计算他们之间的费用最小的路径。

(2) 简短描述你在实验中使用的数据结构及算法的基本原理。

在本实验中,使用了邻接表,map集合,list集合。邻接表是用于存储整个图的信息的,即它用于存储每一个点,有多少个点与它相连。即对于每一个点,它的名称作为键,而有一个包含了与它相连的所有点的信息的list对象作为值。这样就完全保存了该图的全部信息。然后有了该图,就可以利用Dijkstra算法来计算任意两点之间的距离。而Dijkstra算法的基本思想就是,循环找出下一个离起点距离最短的点,并标上标记,纳入以找出最短路径的点的集合。而当找到的下一个里起点最近的点就是目的地,则循环结束,最短路径则通过map集合中每一个City对象的from_city属性来找到。

(3)描述你采用STL中的什么容器或者类实现图的存储,在算法应用过程中使用什么

数据结构或算法提高算法的效率。

我们使用STL中的map对象来存储图。即map中的每一个键都为一个城市名,然后它的值为与该城市直接相连的所有城市所形成的list对象。

我们使用了邻接表的数据结构,并使用了优先级队列来实现下一个最短路径的点的快速查找,极大地提高了算法的效率。并且使用了Dijkstra算法,利用优先级

队列逐渐寻找下一个里起点最短的点,并将它的visited属性标记为true,表示已经

访问过,并在每一次访问后,都会更新剩余点的费用和距离的值。然后再利用优先

级队列计算新一轮的距离最短的点。

3. 实验环境

操作系统、调试软件名称、版本号,上机地点,机器台号

操作系统:Windows 8.1

调试软件名称:Codeblocks 12.11

4. 实验过程与分析

4.1打印机模拟程序的过程分析

(1)描述你在进行实现时,主要的函数或操作内部的主要算法,分析这个算法的时、空复杂度,并说明你设计的巧妙之处。

simulate函数为主要的执行FIFO打印的函数。该算法首先是一个while循环,该循环中的部分,由三个判断与语句组成,如果workload队列和等待执行队列都为空,则可

以断定所有任务全部执行完;而如果等待执行队列为空,则表名现在还没有任务到达打

印机,此时需要循环判断是否有任务到达,并且计数器也循环+1;而如果等待执行队列

不为空,就意为着,需要执行任务,那么则立即执行当前队列顶部任务,计算该任务的

等待时间,加到总等待时间上,并把当前计数器时间加上该任务执行的时间。然后在workload队列中把任务的执行时间<=当前时间的任务给弹出并压入到等待执行队列中。

等着三个判断语句结束后进入while的下一次循环。

该算法具有很小的时间复杂度,O(n) = 2n + 打印机空闲的秒数。因为对于执行打印任务的时候,该算法是直接在计数器上加上该任务消耗的时间,而对于pop出workload的时间则是等于任务的个数,然后剩余消耗的时间就是在等待执行队列为空的时候,循环判断workload队列中是否有任务到达了,所以此时消耗的循环次数为打印机空闲的秒数。

而空间复杂度为:n+2。也就是任务的个数+队列个数。

此算法的巧妙之处就在于,并没有以计数器逐渐递增的方式来模拟时间的流逝,而是消耗多少时间,计数器直接加上该值,并不是等待计数器累加到该值才执行任务。

(2)你在调试过程中发现了怎样的问题?又做了怎样的改进(要求写出具体的事例)

在算平均等待时间的时候,把该总时间的类型设置成了整型,导致平均等待时间算错。

(3)你的实现是否具有可扩展性,如针对多个打印队列的仿真程序?

本实现具有可扩展性,即只要在原来判断单个打印队列是否为空的基础上,加上&&语句,即同时判断是否所有打印队列同时为空,如果都为空,则循环判断所有

workload队列中任务是否已到达时间,若到达了时间则弹出并push到相应的打印队列中,这就是由原来的单个workload判断变成了循环判断多个workload。而如果有任一一个打印队列不为空,那么则和原来一样进入第三个判断中,执行该打印任务,且循环所有打印队列并执行任务。

4.2欧洲旅行实验的过程分析

(1) 描述你在进行实现时,主要的函数或操作内部的主要算法,分析这个算法的时、空复杂度,并说明你设计的巧妙之处。

主要函数为calc_route函数。该函数运用的算法为Dijkstra算法,算出最小路径。

该算法从起点开始遍历,然后重新计算与该点相连的所有点到起始点的距离,然后把这些点

都push到优先级队列中,利用优先级队列的排序功能,我们只需要取出优先级队列中顶部的点,并将其标记为已访问过,然后在访问与该点相连的所有点,再次重复上述过程。即不断寻找下一个离起点最近的点,并将其标记为true。

该算法的时间复杂度为O(n) = 2n(n为边数)。即每次都要循环遍历与该点相连的所有点,所以对于两个点之间的那条边需要被遍历两次,虽然只有其中一次才会执行其中的语句。而空间复杂度为:2倍点的个数+2倍边数。

此算法的巧妙之处在于利用了优先级队列,这可以很方便地选取出下一个离起点最短的点。

(2) 你在调试过程中发现了怎样的问题?又做了怎样的改进?

问题1:访问过的点没有标记为true,使得进入死循环。

解决之道:将其标记为true。

问题2:在reset()方法中初始化的时候,将点的total_fee属性初始化为了INT_MAX,使得永远无法计算出最短路径。

解决之道:将其属性初始化为0。

问题3:创建邻接表的时候,先创建一个list的变量,然后把

outgoing_services[from]赋值给它,然后在调用该变量的push_back方法。而这样永远找不出最短路径。

解决之道:直接调用outgoing_services[from]的push_back方法将Service对象push 进去。

(3) 你的实验在解决类似问题时是否具有灵活的可修改性、可扩展性?

具有可扩展性,因为可以在优先级队列的比较方法中设置不同的比较算法。这样权值的比较具有任意性,只要更改此比较方法,就可以求出任意形式的最短的路径了。

5.实验结果总结

5.1打印机模拟程序的结果总结

回答以下问题:

(1)你的测试充分吗?为什么?你是怎样考虑的?

充分。不管是任意顺序的任务,还是大的任务先执行,都可以得到正确的结果。

(2)为什么你要选用队列作为你应用的数据结构?

因为该题是FIFO,而队列也正是先入先出的数据结构。

(3)用一段简短的代码及说明论述你的应用中主要的函数的主要处理部分。

while (1){

/**

*如果两个队列同时为空,则退出

*/

if (workload.empty() && print.empty()){

break;

}

// 如果等待执行队列为空,则循环判断是否有任务到达

else if (print.empty()){

while (!workload.empty()){

if (workload.front().arrival_time() == count_time){

/**

*如果时间到了则pop

*/

break;

}else{

count_time++;

}

}

}else{

// 执行任务

while (!workload.empty()){

if (workload.front().arrival_time() <= count_time){

// 把workload中的任务添加到等待执行队列

}else{

break;

}

}

}

}

(4)用结构化图表或者结构化代码描述源程序的大致的执行过程。

5.2欧洲旅行实验的的结果总结

回答以下问题:

(1)你的测试充分吗?为什么?你是怎样考虑的?

充分。对于图中任意两点,都可以计算出它的最短路径。

(2)在你的问题解决方案中,为图选取了顺序的还是链式的存储结构?为什么要选取这

种存储结构?

链式存储结构因为如果是数组的话,那么每行含有的元素数可能会不一样,所以选取链式的存储结构。

(3)用一段简短的代码及说明论述你的应用中主要的函数的主要处理部分。

City *from_city = cities[from];

// 先把起点城市push到优先级队列中。

candidates.push(from_city);

// 如果优先级队列中为空,则退出循环

while (!candidates.empty()){

// 取出里起点最短的那个城市,作为此次选取出的城市,并标记为true。

City* f_city = candidates.top();

if (f_city->visited == false){

f_city->visited = true;

list f_city_service = outgoing_services[f_city->name];

list::iterator iter = f_city_service.begin();

// 循环遍历与该点相连的所有的点,并重新计算它的距离和费用属性,并将其push到优先级队列中。

for (; iter != f_city_service.end(); iter++){

if (cities[(*iter)->destination]->visited == false){

cities[(*iter)->destination]->total_fee = f_city->total_fee + (*iter)->fee;

cities[(*iter)->destination]->total_distance = f_city->total_distance + (*iter)->distance;

cities[(*iter)->destination]->from_city = f_city->name;

candidates.push(cities[(*iter)->destination]);

}

}

}

// 将已经遍历过的点弹出优先级队列。

candidates.pop();

}

(4)在你的图中使用了怎么样数据结构来优化算法的性能?

使用了链接表来存储图的结构,并使用了优先级队列来将其它城市到起点城市的距离进行排序,然后选取出距离最短的那个城市,作为下一个标记为已访问过的那个城市。这样极大的简化了代码。

(5) 源程序的大致的执行过程是怎样的?

6.附录

(1) 回答思考题

a)栈和队列在计算机系统中有哪些应用?写出你知道的系统中,这两种抽象数

据类型的应用。

Android系统中的Activity是用栈来管理的。

Linux的CPU调度算法就是用队列来完成的。

b)在程序调用的时侯,需要进行函数的切换,你认为函数在进行切换时系统要

做那些工作?

把此时运行的位置进栈

跳转到函数的位置,执行函数

弹出与栈顶元素,回到原来的执行位置,继续执行

c)队列在系统的设计中都起到什么样的作用?举出你所熟悉的一些队列的应用

例子。

能够保持程序的执行顺序。

在Linux的CPU调度的时候,就是采用多级队列反馈调度,每次都从队头抽取

出一个进程来执行。

d)在你的两次实验中分别使用了STL中的哪些容器?有什么用途?

Queue:队列完成先进先出的功能,即打印的FIFO策略

Map:用来存储图

List:用来保存一行的数据,大小可以不固定

e)假设一个图采用邻接表存储结构进行存储,在某一个结点的邻接结点链表

中,结点的顺序是否会影响到最短路径算法的结果?

不会,因为每次都要把该链表遍历完

(2) 列出实验参考的资料

《数据结构C++语言描述》中国科技大学

(3) 如果你对这两次实验还有其他的解决方案或设想,或对我们的实验方案有什么意见,请在此描述。

附录《数据结构》实验成绩评定表附录:

《数据结构》实验成绩评定表

东北大学秦皇岛分校操作系统课设报告

东北大学秦皇岛分校计算机与通信工程学院 计算机操作系统课程设计 设计题目:进程管理器 专业名称计算机科学与技术 班级学号xxxx 学生姓名xxxx 指导教师xxxxx 设计时间2014-12-29~2015-1-15

课程设计任务书 专业:计算机科学与技术学号:学生姓名(签名):设计题目 1、高优先权调度算法的模拟 2、进程管理器的模拟实现 二、主要内容 1、目的: 编程模拟实现进程管理器,加深对进程、程序概念掌握. 2、进程管理器 主界面如下: (1)源代码: <1> Form1.cs using System; using System.Collections.Generic; using https://www.wendangku.net/doc/a814041997.html,ponentModel; using System.Data; using System.Drawing;

using System.Text; using System.Windows.Forms; using System.Management; using System.Diagnostics; namespace WindowsApplication1 { public partial class Form1 : Form { public Form1() { InitializeComponent(); this.listProcesses.MultiSelect = false; this.listProcesses.View = View.Details; this.listProcesses.Columns.Add("pname",(int)CreateGraphics().MeasureString( "aaaaaaaaaaaaaaaaaaaaaa",Font).Width); this.listProcesses.Columns.Add("pID", (int)CreateGraphics().MeasureString( "000000000000", Font).Width); this.listProcesses.Columns.Add("username", (int)CreateGraphics().MeasureString( "aaaaaaaaaaaaaaaaaaaaa", Font).Width); this.listProcesses.Columns.Add("priority", (int)CreateGraphics().MeasureString( "aaaaaaaaa", Font).Width); this.listProcesses.Columns.Add("Memory usage", (int)CreateGraphics().MeasureString( "000000000000000",Font).Width); } private void Form1_Load(object sender, EventArgs e) { RefreshList(); } private void RefreshList() { Process[] processes; processes = Process.GetProcesses(); this.listProcesses.Items.Clear(); foreach (Process instance in processes) { ListViewItem lvi = new ListViewItem(instance.ProcessName); lvi.SubItems.Add(FormatProcessID(instance.Id)); lvi.SubItems.Add(GetProcessUserName(instance.Id)); lvi.SubItems.Add(instance.BasePriority.ToString());

东北大学操作系统第一次实验报告

实验1:熟悉Linux系统 一、题目:熟悉Linux系统 二、目的: 熟悉与掌握Linux系统基本命令,熟悉Linux编程环境,为以后的实验打下基础。 1、启动、退出、ls(显示目录内容)、cp(文件或目录的复制)、mv(文件、目录更名或移动)、rm(删除文件或目录)、mkdir(创建目录)、rmdir(删除空目录)、cd(改变工作目录)… 2、C语言编辑、编译 三、内容及要求: 1、熟练掌握Linux基本文件命令; 2、掌握Linux编辑程序、对源代码进行编译、连接、运行及调试的过程; 3、认真做好预习,书写预习报告; 4、实验完成后要认真总结、完成实验报告。 四、内容及要求: 在Linux环境下编制、调试源程序的实际过程(每一步的具体说明)。 实验2:进程状态 一、题目:进程状态 二、目的: 自行编制模拟程序,通过形象化的状态显示,使学生理解进程的概念、进程之间的状态转换及其所带来的PCB内容、组织的变化,理解进程与其PCB间的一一对应关系。 三、内容及要求 1、设计并实现一个模拟进程状态转换及其相应PCB组织结构变化的程序; 2、独立设计、编写、调试程序; 3、程序界面应能反映出在模拟条件下,进程之间状态转换及其对应的PCB组织的变化。 4、进程的状态模型(三状态、五状态、七状态或其它)可自行选择, 5、代码书写要规范,要适当地加入注释; 6、鼓励在实验中加入新的观点或想法,并加以实现;

7、认真进行预习,完成预习报告; 8、实验完成后,要认真总结,完成实验报告。 四、程序流程图 图4、1 进程转换流程五、使用的数据结构及其说明 struct PCB //进程控制块PCB { char name; //名字标识 string state; //状态 int time; //执行时间 }; typedef struct PCB ElemType; struct QNode { ElemType data; struct QNode *next; }; //链式队列结点 typedef struct QNode QNode; //结点 typedef struct QNode *PNode;

东北大学C++实验报告6

东北大学C++实验报告6 -标准化文件发布号:(9456-EUATWK-MWUB-WUNN-INNUL-DDQTY-KII

实验六 1.实验要求 (1)定义Point类,有坐标_x,_y两个成员变量;对Point类重载“++”(自增)、“――”(自减)运算符,实现对坐标值的改变。 (2)定义一个车(vehiele)基类,有Run、Stop等成员函数,由此派生出自行车(bicycle)类、汽车(motorcar)类,从bicycle和motorcar派生出摩托车(motorcycle)类,它们都有Run、Stop等成员函数。观察虚函数的作用。 2. 实验内容及实验步骤 (1) 编写程序定义Point类,在类中定义整型的私有成员变量_x_y,定义成员函数Point& operator++();Point operator++(int);以实现对Point类重载“++”(自增)运算符,定义成员函数Point&operator--();Point operator--(int);以实现对Point类重载“--”(自减)运算符,实现对坐标值的改变。程序名:1ab8_1.cpp。 (2) 编写程序定义一个车(vehicle)基类,有Run、Stop等成员函数,由此派生出自行车(bicycle)类、汽车(motorcar)类,从bicycle和motorcar派生出摩托车(motorcycle)类,它们都有Run、Stop等成员函数。在main()函数中定义vehicle、bicycle、motorcar、motorcycle的对象,调用其Run()、Stop()函数,观察其执行情况。再分别用vehicle类型的指针来调用这几个对象的成员函数,看看能否成功;把Run、Stop定义为虚函数,再试试看。程序名:lab8_2.cpp。 3. 源程序 Lab8_1 #include using namespace std; class Point{ public: Point(int X,int Y): _x(X),_y(Y){} Point operator++(); Point operator++(int); Point operator--(); Point operator--(int); void Putout() const; private:

大学语文在线作业

1.第1题 《五代史伶官传序》属于哪个朝代的作品()。 A.汉朝 B.唐朝 C.北宋 D.南宋 您的答案:C 题目分数: 此题得分: 2.第7题 姚纳是下列哪一篇小说中的人物()。 A.《风波》 B.《断魂枪》 C.《苦恼》 D.《舞会以后》 您的答案:C 题目分数: 此题得分: 3.第8题 萧伯纳是哪国的作家()。 A.法国 B.美国 C.英国 D.俄国 您的答案:C 题目分数: 此题得分: 4.第9题 “防民之口,甚于防川”这句话出自()。 A.《世说新语》 B.《晏子对齐侯问》 C.《召公谏厉王弭谤》

D.《五代史伶官传序》 您的答案:C 题目分数: 此题得分: 5.第10题 选自《国语》的作品是()。 A.《召公谏厉王弭谤》 B.《李将军列传》 C.《五代史伶官传序》 D.《冯谖客孟尝君》 您的答案:A 题目分数: 此题得分: 6.第11题 欧阳修号()。 A.六一居士 B.东坡居士 C.青莲居士 D.香山居士 您的答案:A 题目分数: 此题得分: 7.第12题 下列属于晋代诗人的是()。 A..轼 B.陶渊明 C.杜甫 D.龚自珍 您的答案:B 题目分数: 此题得分: 8.第13题

擅长描写北京底层平民生活、作品具有浓厚京味儿的作家是()。 A.老舍 B.史铁生 C.从维熙 D.汪曾祺 您的答案:A 题目分数: 此题得分: 9.第14题 《断魂枪》的作者是()。 A.鲁迅 B.茅盾 C.老舍 D.巴金 您的答案:C 题目分数: 此题得分: 10.第15题 具有“含泪的微笑”的独特风格的美国着名小说家是()。 A.杰克.伦敦 B.德莱塞 C.马克.吐温 D.欧.亨利 您的答案:D 题目分数: 此题得分: 11.第16题 胡适所着的在我国新诗史上有重要影响的诗集是()。

软件工程专业介绍范文

软件工程专业介绍范文 软件工程学的定义 软件工程一直以来都缺乏一个统一的定义,很多学者、组织机构都分别给出了自己的定义: Boehm:运用现代科学技术知识来设计并构造计算机程序及为开发、运行和维护这些程序所必需的相关文件资料。IEEE:软件工程是开发、运行、维护和修复软件的系统方法。FritzBauer:建立并使用完善的工程化原则,以较经济的手段获得能在实际机器上有效运行的可靠软件的一系列方法。 编辑本段软件工程学的内容 软件工程学的主要内容是软件开发技术和软件工程管理。软件开发技术包含软件工程方法学、软件工具和软件开发环境;软件工程管理学包含软件工程经济学和软件管理学。 专业简介 是计算机领域发展最快的学科分支之一,国家非常重视软件行业的发展,对软件人才的培养给予了非常优惠的政策。本专业培养掌握计算机软件基本理论知识,熟悉软件开发和管理技术、能够在计算机软件领域中从事软件设计、开发和管理的高级人才。

主修课程 该专业除了学习公共基础课外,还将系统学习离散数学、数据结构、算法分析、面向对象程序设计、现代操作系统、数据库原理与实现技术、编译原理、软件工程、软件项目管理、计算机安全等课程,根据学生的兴趣还可以选修一些其它选修课。 毕业去向 除考取国内外名牌大学研究生外,主要毕业去向是计算机软件专业公司﹑信息咨询公司﹑以及金融等其它独资、合资企业。 培养目标 本专业培养适应社会发展需求,德、智、体、美全面发展,具有扎实的计算机应用理论和知识基础,掌握软件工程领域的前沿技术和软件开发方法,具有较强的实践能力和创新精神,具备较强的软件项目的系统分析、设计、开发和测试能力,能够按照工程化的原则和方法从事软件项目开发和管理的应用型人才。 就业方向

东北大学操作系统第一次实验报告

实验1:熟悉Linux系统 一、题目:熟悉Linux系统 二、目的: 熟悉和掌握Linux系统基本命令,熟悉Linux编程环境,为以后的实验打下基础。 1、启动、退出、ls(显示目录内容)、cp(文件或目录的复制)、mv(文件、目录更名或移动)、rm(删除文件或目录)、mkdir(创建目录)、rmdir(删除空目录)、cd(改变工作目录)… 2、C语言编辑、编译 三、内容及要求: 1、熟练掌握Linux基本文件命令; 2、掌握Linux编辑程序、对源代码进行编译、连接、运行及调试的过程; 3、认真做好预习,书写预习报告; 4、实验完成后要认真总结、完成实验报告。 四、内容及要求: 在Linux环境下编制、调试源程序的实际过程(每一步的具体说明)。 实验2:进程状态 一、题目:进程状态

二、目的: 自行编制模拟程序,通过形象化的状态显示,使学生理解进程的概念、进程之间的状态转换及其所带来的PCB内容、组织的变化,理解进程与其PCB间的一一对应关系。 三、内容及要求 1、设计并实现一个模拟进程状态转换及其相应PCB组织结构变化的程序; 2、独立设计、编写、调试程序; 3、程序界面应能反映出在模拟条件下,进程之间状态转换及其对应的PCB 组织的变化。 4、进程的状态模型(三状态、五状态、七状态或其它)可自行选择, 5、代码书写要规范,要适当地加入注释; 6、鼓励在实验中加入新的观点或想法,并加以实现; 7、认真进行预习,完成预习报告; 8、实验完成后,要认真总结,完成实验报告。 四、程序流程图

图4.1 进程转换流程五、使用的数据结构及其说明 struct PCB //进程控制块PCB { char name; //名字标识 string state; //状态 int time; //执行时间 }; typedefstruct PCB ElemType; structQNode { ElemType data; structQNode *next; }; //链式队列结点 typedefstructQNodeQNode; //结点 typedefstructQNode *PNode; typedefstruct { PNodefrnt; PNode rear;

大学语文在线作业答案

第1题 (2.0) 分 《道德经》是指( A )。 A、《老子》 B、《庄子》 C、《论语》 D、《孟子》 第2题 (2.0) 分 由西汉刘向编定的一部著作是 ( D )。 A、《汉书》 B、《史记》 C、《左传》 D、《战国策》 第3题 (2.0) 分 “文章合为时而著,歌诗合为事而作”口号的提出者是( D )。 A、李白 B、苏轼 C、韩愈 D、白居易 第4题 (2.0) 分 郭沫若于1921年出版的有重要影响的诗集是( B )。

A、《猛虎集》 B、《女神》 C、《尝试集》 D、《前矛》 第5题 (2.0) 分 属于外国现代短篇小说的是( A )。 A、《苦恼》 B、《断魂枪》 C、《风波》 D、《华威先生》 第6题 (2.0) 分 具有“含泪的微笑”的独特风格的美国著名小说家是( D )。 A、杰克.伦敦 B、德莱塞 C、马克.吐温 D、欧.亨利 第7题 (2.0) 分 晚号香山居士的著名诗人是( D )。

A、杜牧 B、李商隐 C、杜甫 D、白居易 第8题 (2.0) 分 萧伯纳是哪国的作家( C )。 A、法国 B、美国 C、英国 D、俄国 第9题 (2.0) 分 下列作品中最富有浪漫色彩的是 ( C )。 A、《论语》 B、《左传》 C、《庄子》 D、《战国策》 第10题 (2.0) 分 被列宁称为“中国十一世纪的改革家”的是( B )。 A、苏轼 B、王安石 C、欧阳修

D、司马光 第11题 (2.0) 分 选自《国语》的作品是( A )。 A、《召公谏厉王弭谤》 B、《李将军列传》 C、《五代史伶官传序》 D、《冯谖客孟尝君》 第12题 (2.0) 分 《念奴娇·过洞庭》的文体是 ( B )。 A、诗 B、词 C、.曲 D、.赋 第13题 (2.0) 分 《鹊桥仙》(纤云弄巧)的作者是( C )。 A、李煜

东北大学学生必读手册

zt:东北大学学生必读手册(2007-03-08 22:50:37)转载分类:他山石 号外:发现一篇东大宝典《东北大学学生必读手册》!读来正是大块人心,佩服写这个宝典的东大校友了,这比东大官方版的学生必读手册通俗易懂、总结全面,建议以此替换掉官方版的必读手册.......下面是全文摘录,是东大的都来通读一遍啊.... 东北大学学生必读手册 学习篇 1. 注意,馆里面有偷东西的(真为东大丢人),他们喜欢在中午11:30-13:00,晚上4:30-5:30出没(这个时间段大家都去吃饭了,馆里人少),目的在于窃取那些出去吃饭人的书包。所以当自习室人少或者较长时间离开时,书包等个人物品随身带走。 2. 上自习要早点去,不然很容易找不到座位的,一般采矿馆、机电馆、教学馆、逸夫楼的人比较多哦,冶金馆的人少(传说闹鬼)。 3. 不要拿个书、坐垫一类的占座,很烦人的,尤其是占着座还不去的,纯占着茅楼不拉屎,还容易丢失。 4. 尽量去上每一节课,毕竟花那么多学费是用来买这些课程的,而且学点东西没有什么不好,最起码的关系到你期末是不是可以及格的问题。 5. 考试前一个月一定要上自习,不然有挂科的危险。 6. 英语和计算机作为工具还是要好好学习的,争取拿个证什么的,一方面有目标可以学习东西,另一方面为将来工作做准备。 7. 考试前一个星期,你基本上会面临着没有地方上自习的情况,所以,一定要早早的去,一般情况下7点30之前还是能找到空座的。 8. 一定要多去图书馆,会有意外的收获。 9. 不要浪费电子资源,我校图书馆提供的电子文献,还是非常不错的。 10. 考试挂科了可以补,不要因为挂几科就想不开,寻短见,怨天尤人,人生的路还长着呢,努力学习把挂的课补过去才是正确的做法。 11. 图书馆夏天凉快,而且累了还可以上网。 12. 考试前突击2星期大多可以过,除数学,物理,运筹学,编译原理等理论性强的科目。 13. 考试之前一定要搞到以前该科目的试卷,弄懂上面的题目就可以顺利通过考试了,一不小心还可能考个优秀什么的。图书馆一楼的复印室有卖。 吃饭篇 1. 各位如果厌烦了平时的饭菜,我建议到西门的菜市场弄一下新鲜蔬菜(尤其是小葱沾酱)吃,美味啊! 2. 餐饮中心基本上是不刷盘子的,盘子刷的较干净的是一食堂。但是注意有时一食堂的餐盘由于刚刚消毒过,很烫手,当心啊。 3. 西门超市的食堂,油烟很重,会弄一身味道的。尤其是冬天。 4. 去食堂打饭一定要排队,否则遭受鄙视,切记。 5. 饭卡应该设置最大消费额度,比如15元,这样可以避免丢失饭卡时被人家把钱花光。免费办理在二食堂那个管饭卡挂失的地方。实在不行,还可以给饭卡加密码,就是用起来比较麻烦,但是那样就不怕丢失被人乱划了。

东北大学操作系统实验三报告

操作系统实验报告班级物联网1302班 学号 姓名

实验 3 进程同步和通信-生产者和消费者问题模拟 1. 目的: 调试、修改、运行模拟程序,通过形象化的状态显示,使学生理解进程的概念,了解同步和通信的过程,掌握进程通信和同步的机制,特别是利用缓冲区进行同步和通信的过程。通过补充新功能,使学生能灵活运用相关知识,培养创新能力。 2. 内容及要求: 1) 调试、运行模拟程序。 2) 发现并修改程序中不完善的地方。 3) 修改程序,使用随机数控制创建生产者和消费者的过程。 4) 在原来程序的基础上,加入缓冲区的写互斥控制功能,模拟多个进程存取一个公共缓冲区,当有进程正在写缓冲区时,其他要访问该缓冲区的进程必须等待,当有进程正在读取缓冲区时,其他要求读取的进程可以访问,而要求写的进程应该等待。 5) 完成1) 、2) 、3)功能的,得基本分,完成4)功能的加2 分,有其它功能改进的再加2 分3. 程序说明: 本程序是模拟两个进程,生产者(producer)和消费者(Consumer)工作。生产者每次产生一个数据,送入缓冲区中。消费者每次从缓冲区中取走一个数据。缓冲区可以容纳8 个数据。因为缓冲区是有限的,因此当其满了时生产者进程应该等待,而空时,消费者进程应该等待;当生产者向缓冲区放入了一个数据,应唤醒正在等待的消费者进程,同样,当消费者取走一个数据后,应唤醒正在等待的生产者进程。就是生产者和消费者之间的同步。 每次写入和读出数据时,都将读和写指针加一。当读写指针同样时,又一起退回起点。当写指针指向最后时,生产者就等待。当读指针为零时,再次要读取的消费者也应该等待。 为简单起见,每次产生的数据为0-99 的整数,从0 开始,顺序递增。两个进程的调度是通过运行者使用键盘来实现的。 4. 程序使用的数据结构 进程控制块:包括进程名,进程状态和执行次数。缓冲区:一个整数数组。 缓冲区说明块:包括类型,读指针,写指针,读等待指针和写等待指针。 5. 程序使用说明 启动程序后,如果使用0键则运行一次生产者进程,使用'c'键则运行一次消费者进程。通过屏幕可以观察到两个进程的状态和缓冲区变化的情况。 6. 实验流程图 源程序 #include

东北大学c++实验报告

实验六 1?实验要求 (1)定义Point类,有坐标_x, _y两个成员变量;对Point类重载牛+ ”(自增)、“一-(自减)运算符,实现对坐标值的改变。 (2)定义一个车(vehiele)基类,有Run、Stop等成员函数,由此派生出自行车(bicycle)类、汽车(motorcar)类,从bicycle和motorcar派生出摩托车(motorcycle)类,它们都有Run、Stop等成员函数。观察虚函数的作用。 2.实验容及实验步骤 (1)编写程序定义Point类,在类中定义整型的私有成员变量_x_y,定义成员函数Point& operato叶+() ; Point operato叶+(int);以实现对Point 类重载++ ”(自增)运算符,定义成员函数Point& operator ------------------------------ ();Point operator -------- (int);以实现对Point类重载(自减)运算符,实现对坐标值的改变。程序名:1ab8_1. cpp。 ⑵编写程序定义一个车(vehicle)基类,有Run、Stop等成员函数,由此派 生出自行车(bicycle)类、汽车(motorcar)类,从bicycle和motorcar派生出摩托车(motorcycle)类,它们都有Run、Stop等成员函数。在main()函数中定义vehicle、bicycle、motorcar、motorcycle 的对象,调用其Run()、Stop()函数,观察其执行情况。再分别用vehicle类型的指针来调用这几个对象的成员函数,看看能否成功;把Run、Stop定义为虚函数,再试试看。程序名:lab8_2. cpp。 3.源程序 Lab8 1 #in clude using n amespace std;

华师《大学语文》在线作业答案

华师《大学语文》在线作业-0004 试卷总分:100 得分:0 一、单选题(共20 道试题,共40 分) 1.《采薇》选自(),为西周后期作品。 A.《国风》 B.《小雅》 C.《大雅》 D.《商颂》 正确答案:B 2.“对酒当歌,人生几何?”是出自() A.《短歌行》 B.《邯郸记》 C.《还魂记》 正确答案:A 3.“落霞与孤鹜齐飞,秋水共长天一色”是出自() A.《短歌行》 B.《春江花月夜》 C.《滕王阁序》 正确答案:C 4.《滕王阁序》是()的作品。 A.王勃 B.杨炯 C.卢照邻 D.骆宾王 正确答案:A 5.()的著述有两大成就为海内外所瞩目:其一为翻译,穷半生之力译出了300多万字的莎士比亚全集行世;其二为散文创作,尤其是他的小品文创作,别具特色,为后人留下了一份有价值的文学遗产。 A.郁达夫 B.徐志摩 C.梁实秋 D.戴望舒 正确答案:C 6.下列诗(词)句属于李清照的有()

A.不如向帘儿底下,听人笑语 B.闺中只独看 C.怕人寻问,咽泪装欢 正确答案:A 7.北宋第一个专业词人和第一个大量创作慢词的词人是() A.柳永 B.苏轼 C.李清照 正确答案:A 8.《再别康桥》的作者是() A.徐志摩 B.余秋雨 C.余光中 正确答案:A 9.《采薇》是选自《诗经》的() A.《大雅》 B.《小雅》 C.《国风》 正确答案:B 10.王维的《送梓州李使君》是一首() A.赠别诗 B.七言古诗 C.山水诗 正确答案:A 11.《那片血一般红的杜鹃花》的叙事人是() A.王雄 B.丽儿 C.表少爷 正确答案:C 12.下列诗篇不属于乐府旧题的有() A.《短歌行》 B.《月夜》

东北大学图像处理实验报告

计算机图像处理实验报告 哈哈哈哈哈哈实验台31 1.应用MATLAB语言编写显示一幅灰度图像、二值图像、索引图像及 彩色图像的程序,并进行相互之间的转换 1)彩色图像转换为灰度图像、索引图像、二值图像 A=imread('F:\colorful.jpg'); subplot(221);imshow(A);title('彩色图像'); I1=rgb2gray(A); subplot(222);imshow(I1);title('灰度图像'); [X1,map]=rgb2ind(A,256); subplot(223);imshow(X1);title('索引图像'); BW=im2bw(A); subplot(224);imshow(BW);title('二值图像'); 彩色图像灰度图像 索引图像二值图像

2)灰度图像转换为索引图像、二值图像 clear A=imread('F:\colorful.jpg'); B=rgb2gray(A); subplot(131);imshow(B);title('灰度图像'); [X2,map]=gray2ind(B,128); subplot(132);imshow(X2);title('索引图像'); BW2=im2bw(B); subplot(133);imshow(BW2);title('二值图像'); 灰度图像索引图像二值图像 3)索引图像转为灰度图像、二值图像、彩色图像 clear A=imread('F:\colorful.jpg'); [X,map]=rgb2ind(A,256); subplot(221);imshow(X);title('索引图像'); I3=ind2gray(X,map); subplot(222);imshow(I3);title('灰度图像'); BW3=im2bw(X,map,0.5); subplot(223);imshow(BW3);title('二值图像'); RGB=ind2rgb(X,map); subplot(24);imshow(RGB);title('还原彩色图像'); 索引图像灰度图像 二值图像还原彩色图像

大学语文在线作业答案

第1题分 《道德经》是指( A )。 A、《老子》 B、《庄子》 C、《论语》 D、《孟子》 第2题分 由西汉刘向编定的一部著作是 ( D )。 A、《汉书》 B、《史记》 C、《左传》 D、《战国策》 第3题分 “文章合为时而著,歌诗合为事而作”口号的提出者是( D )。 A、李白 B、苏轼 C、韩愈 D、白居易 第4题分

郭沫若于1921年出版的有重要影响的诗集是( B )。 A、《猛虎集》 B、《女神》 C、《尝试集》 D、《前矛》 第5题分 属于外国现代短篇小说的是( A )。 A、《苦恼》 B、《断魂枪》 C、《风波》 D、《华威先生》 第6题分 具有“含泪的微笑”的独特风格的美国著名小说家是( D )。 A、杰克.伦敦 B、德莱塞 C、马克.吐温 D、欧.亨利 第7题分 晚号香山居士的著名诗人是( D )。

A、杜牧 B、李商隐 C、杜甫 D、白居易 第8题分 萧伯纳是哪国的作家( C )。 A、法国 B、美国 C、英国 D、俄国 第9题分 下列作品中最富有浪漫色彩的是 ( C )。 A、《论语》 B、《左传》 C、《庄子》 D、《战国策》 第10题分 被列宁称为“中国十一世纪的改革家”的是( B )。 A、苏轼 B、王安石 C、欧阳修

D、司马光 第11题分 选自《国语》的作品是( A )。 A、《召公谏厉王弭谤》 B、《李将军列传》 C、《五代史伶官传序》 D、《冯谖客孟尝君》 第12题分 《念奴娇·过洞庭》的文体是 ( B )。 A、诗 B、词 C、.曲 D、.赋 第13题分 《鹊桥仙》(纤云弄巧)的作者是( C )。 A、李煜

操作系统实验三(题目四)实验报告_李旦兰_20083308

操作系统实验三 实验报告 姓名李旦兰学号20083308 班级软件0802 指导教师那俊 实验名称存储管理 开设学期2010 – 2011第一学期 评定成绩 评定人签字 评定日期 东北大学软件学院2010年11月

实验三_B 一.实验题目 用高级语言编写和调试一个简单的文件系统,模拟文件管理的工作过程。(题目四)二.实验目的 (1)进一步认识虚拟存储器的工作原理; (2)进一步认识文件系统的内部功能以及内部实现; (3)深入理解操作系统中文件系统的理论知识,加深对教材中的重要算法的理解; (4)掌握操作系统的原理及实现方法,提高综合运用各专业课知识的能力。 三.实验内容以及要求 (1)设计一个支持n个用户的简单二级文件系统,每个用户可保存m个文件,用户在一次运行中只能打开一个文件; (2)采用二级或二级以上的多级文件目录管理; (3)对文件应设置存取控制保护方式,如“只能执行”、“允许读”、“允许写等”;(4)系统的外部特征应接近于真实系统,可设置下述文件操作命令:Login 用户登录;Dir 列出文件目录; Create 建立文件;Delete 删除文件; Read 读文件;Write 写文件;Open 打开文件; Close 关闭文件。 (5)通过键盘使用该文件系统,系统应显示操作命令的执行结果。 四.实验环境 操作系统:Windows 7 开发语言:VC++ 开发工具:Microsoft Visual C++ 2008 Express Edition 五.程序设计思想 通过阅读实验指导书,整理出实验大体的思路,确定实体以及它们之间的关系。实体关系有三张表(主文件目录,用户文件目录以及打开文件目录)、命令服务和用户构成。用户负责输入命令。命令服务实现命令检查以及调用相关模块执行相应的命令功能。 (1)主文件目录(MFD),包括用户名和文件目录指针; struct user MFD[1]={{"0",0}};//MFD(用户名文件目录指针) (2)用户文件目录(UFD),包括文件名、保护码以及文件长度; struct file UFD[10];//用户文件目录(UFD-文件名保护码文件长度) (3)打开文件目录(AFD),包括打开文件名、打开保护码以及读写指针。采用数组形式存储打开的文件,数组每个元素保存一个打开文件的信息 struct file AFD[5]={{"0",0,0,0},{"0",0,0,0},{"0",0,0,0},{"0",0,0,0},{"0",0,0,0}};//运行文件目录(AFD)——一次运行用户可以打开个文件 在此模拟文件管理系统中可以实现的操作有: (1)用户登录:login,用户通过登录从而使用系统功能; (2)创建文件:create,创建一个指定名字的新文件,即在目录中增加一项,不考虑

东北大学 操作系统实验四报告

操作系统实验报告 班级物联网1302班 学号 姓名

实验4 进程的管道通信 1. 实验目的 1)加深对进程概念的理解,明确进程和程序的区别。 2)进一步认识并发执行的实质。 3)分析进程争用资源的现象,学习解决进程互斥的方法。 4)学习解决进程同步的方法。 5)了解Linux系统中进程通信的基本原理。 进程是操作系统中最重要的概念,贯穿始终,也是学习现代操作系统的关键。通过本次实验,要求理解进程的实质和进程管理的机制。在Linux系统下实现进程从创建到终止的全过程,从中体会进程的创建过程、父进程和子进程之间的关系、进程状态的变化、进程之间的互斥、同步机制、进程调度的原理和以管道为代表的进程间的通信方式的实现。 2. 内容及要求: 这是一个设计型实验,要求自行编制程序。 使用系统调用pipe()建立一条管道,两个子进程分别向管道写一句话: Child process1 is sending a message! Child process2 is sending a message! 父进程从管道读出来自两个子进程的信息,显示在屏幕上。 要求: 1)父进程先接收子进程1发来的消息,然后再接收子进程2发来的消息。 2)实现管道的互斥使用,当一个子进程正在对管道进行写操作时,另一子进程必须等待。使用系统调用lockf(fd[1],1,0)实现对管道的加锁操作,用lockf(fd[1],0,0)解除对管道的锁定。 3)实现父子进程的同步,当子进程把数据写入管道后,便去睡眠等待;当父进程试图从一空管道中读取数据时,也应等待,直到子进程将数据写入管道后,才将其唤醒。 3.相关的系统调用 1) fork() 用于创一个子进程。 格式:int fork(); 返回值:在子进程中返回0;在父进程中返回所创建的子进程的ID值;当返回-1时,创建失败。 2) wait() 常用来控制父进程与子进程的同步。 在父进程中调用wait(),则父进程被阻塞,进入等待队列,等待子进程结束。当子进程结束时,父进程从wait()返回继续执行原来的程序。 返回值:大于0时,为子进程的ID值;等于-1时,调用失败。 3) exit() 是进程结束时最常调用的。 格式:void exit( int status); 其中,status为进程结束状态。

东北大学C++实验报告6

实验六 1.实验要求 (1)定义Point类,有坐标_x,_y两个成员变量;对Point类重载“++”(自增)、“――”(自减)运算符,实现对坐标值的改变。 (2)定义一个车(vehiele)基类,有Run、Stop等成员函数,由此派生出自行车(bicycle)类、汽车(motorcar)类,从bicycle和motorcar派生出摩托车(motorcycle)类,它们都有Run、Stop等成员函数。观察虚函数的作用。 2. 实验内容及实验步骤 (1) 编写程序定义Point类,在类中定义整型的私有成员变量_x_y,定义成员函数Point& operator++();Point operator++(int);以实现对Point类重载“++”(自增)运算符,定义成员函数Point&operator--();Point operator--(int);以实现对Point类重载“--”(自减)运算符,实现对坐标值的改变。程序名:1ab8_1.cpp。 (2) 编写程序定义一个车(vehicle)基类,有Run、Stop等成员函数,由此派生出自行车(bicycle)类、汽车(motorcar)类,从bicycle和motorcar派生出摩托车(motorcycle)类,它们都有Run、Stop等成员函数。在main()函数中定义vehicle、bicycle、motorcar、motorcycle的对象,调用其Run()、Stop()函数,观察其执行情况。再分别用vehicle类型的指针来调用这几个对象的成员函数,看看能否成功;把Run、Stop定义为虚函数,再试试看。程序名:lab8_2.cpp。 3. 源程序 Lab8_1 #include using namespace std; class Point{ public: Point(int X,int Y): _x(X),_y(Y){} Point operator++(); Point operator++(int); Point operator--(); Point operator--(int); void Putout() const; private: int _x,_y; };

电气工程及其自动化考研总况

电气工程及其自动化考 研总况 IMB standardization office【IMB 5AB- IMBK 08- IMB 2C】

电气工程及其自动化考研总况 一、全国电气工程及其自动化专业学校排名 1.清华大学 2.西安交通大学 3.华中科技大学 4.浙江大学 5.重庆大学 6.天津大学 7.哈尔滨工业大学 8.上海交通大学 9.华北电力大学10.东南大学11.西南交通大学12.沈阳工业大学13.中国矿业大学14.华南理工大学15.南京航空航天大学16.北京交通大学17.武汉大学18.哈尔滨理工大学19.四川大学20.河海大学21.哈尔滨工程大学22.郑州大学23.广西大学24.陕西科技大学 二,电气工程与自动化专业 (1)业务培养目标: 业务培养目标:本专业培养在工业与电气工程有关的运动控制、工业过程控制、电气工程、电力电子技术、检测与自动化仪表、电子与计算机技术等领域从事工程设计、系统分析、系统运行、研制开发、经济管理等方面的高级工程技术人才。 业务培养要求:本专业学生主要学习电工技术、电子技术、自动控制理论、信息处理、计算机技术与应用等较宽广领域的工程技术基础和一定的专业知识。学生受到电工电子、信息控制及计算机技术方面的基本训练,具有工业过程控制与分析,解决强弱电并举的宽口径专业的技术问题的能力。

(2)主干课程: 主干学科:电气工程、控制科学与工程、计算机科学与技术 主要课程:电路原理、电子技术基础、计算机原理及应用、计算机软件基础、控制理论、电机与拖动、电力电子技术、信号分析与处理、电力拖动控制系统、工业过程控制与自动化仪表等。高年级可根据社会需要设置柔性的专业方向模块课及选修课。 主要实践性教学环节:包括电路与电子基础实验、电子工艺实习、金工实习、专业综合实验、计算机上机实践、课程设计、生产实习、毕业设计。 主要实验:运动控制实验、自动控制实验、计算机控制实验、检测仪表实验、电力电子实验等 (3)修业年限: 四年 (4)授予学位: 工学学士 (5)相近专业: 微电子学自动化电子信息工程通信工程计算机科学与技术电子科学与技术生物医学工程电气工程与自动化信息工程信息科学技术软件工程

操作系统实验报告1

操作系统实验一 姓名: 学号: 专业:计算机科学与技术 第一步:目录和文件组织 在您的home目录下有一系列的文件,您决定到时间整理一下了.您计划生成一些新的子目录,然后根据您的计划拷贝和移动这些文件到适当的目录;另外,这些文件不是都有用的,有一些是要删除掉的。 任务: 1.以用户名root密码123456配额的在tty1上登陆。 2.在您登陆系统以后,你将进入您的home目录.你可以使用"打印工作目录"检查这一情况 $ pwd /home/root 3.使用如下每条命令检查您是否还有文件在您的home目录下: $ ls$ ls -a$ ls –al 为什么第一和第二条命令返回不同的文件数? 第三条命令返回的在您当前的home目录下最大的文件是多少?46996

您的home目录下有子目录吗?没有 4.您现在使用touch为以后的步骤建立文件。这种扩展在接下来的命令中是如何工作的,在以后的章节中进行讨论。现在,仅仅按照下面的行键入就行了(在集合与集合之间使用包括花括号{}和下划线的字符) $ touch {report,memo,graph}_{sep,oct,nov,dec}_{a,b,c}{1,2,3}

5.使用命令ls检查最后一条命令的结果,你会发现它在您的home目录下生成了108个新的空文件(您不必数)。这些文件代表了您将使用的在这个步骤中的代表的数据文件。如果没有这些文件,该试验后面的步骤就无法进行。 6.为了组织您的文件,您必须先建立一些新目录,使用mkdir在您的home 目录中直接 建立一些子目录: $ mkdir a_reports $ mkdir september october november december 再使用ls 检查您的工作。

东北大学编译原理实验3

编译原理程序设计实验报告 ——四元式生成班级:计算机1507班姓名:罗艺博学号:20154377 一、实验目标: 利用上次实验所编写的语法分析器,完成算术表达式四元式翻译器的设计。 二、实验内容: 1.概要设计: 2.流程图

主程序Z 子程序E

子程序T 子程序F 3.关键函数

//主程序 int ParserPlus() { is = 0; //初始化 flag = 0; qt = qToken.front(); //Next(w) qreal = qTreal.front(); SubE(); if(qt==50&&flag==0) { cout << "语法正确!" << endl; cout << endl; cout << "生成的四元式如下:" << endl; } else if(flag != 0) return 1; else { flag = 1; cout << "语法错误(err 1)!" << endl; return flag; }

//cout<<"myQT.size="<

东北大学-操作系统实验三分析报告

东北大学-操作系统实验三报告

————————————————————————————————作者:————————————————————————————————日期:

操作系统实验报告 班级物联网1302班 学号 姓名

实验3 进程同步和通信-生产者和消费者问题模拟1. 目的: 调试、修改、运行模拟程序,通过形象化的状态显示,使学生理解进程的概念,了解同步和通信的过程,掌握进程通信和同步的机制,特别是利用缓冲区进行同步和通信的过程。通过补充新功能,使学生能灵活运用相关知识,培养创新能力。 2. 内容及要求: 1) 调试、运行模拟程序。 2) 发现并修改程序中不完善的地方。 3) 修改程序,使用随机数控制创建生产者和消费者的过程。 4) 在原来程序的基础上,加入缓冲区的写互斥控制功能,模拟多个进程存取一个公共缓冲区,当有进程正在写缓冲区时,其他要访问该缓冲区的进程必须等待,当有进程正在读取缓冲区时,其他要求读取的进程可以访问,而要求写的进程应该等待。 5) 完成1)、2)、3)功能的,得基本分,完成4)功能的加2分,有其它功能改进的再加2分 3. 程序说明: 本程序是模拟两个进程,生产者(producer)和消费者(Consumer)工作。生产者每次产生一个数据,送入缓冲区中。消费者每次从缓冲区中取走一个数据。缓冲区可以容纳8个数据。因为缓冲区是有限的,因此当其满了时生产者进程应该等待,而空时,消费者进程应该等待;当生产者向缓冲区放入了一个数据,应唤醒正在等待的消费者进程,同样,当消费者取走一个数据后,应唤醒正在等待的生产者进程。就是生产者和消费者之间的同步。 每次写入和读出数据时,都将读和写指针加一。当读写指针同样时,又一起退回起点。当写指针指向最后时,生产者就等待。当读指针为零时,再次要读取的消费者也应该等待。 为简单起见,每次产生的数据为0-99的整数,从0开始,顺序递增。两个进程的调度是通过运行者使用键盘来实现的。 4. 程序使用的数据结构 进程控制块:包括进程名,进程状态和执行次数。 缓冲区:一个整数数组。 缓冲区说明块:包括类型,读指针,写指针,读等待指针和写等待指针。 5. 程序使用说明 启动程序后,如果使用'p'键则运行一次生产者进程,使用'c'键则运行一次消费者进程。通过屏幕可以观察到两个进程的状态和缓冲区变化的情况。

相关文档
相关文档 最新文档