实验六 图及其应用

合集下载

实验6移位寄存器及其应用

实验6移位寄存器及其应用

实验六 移位寄存器及其应用一、实验目的1、 掌握移位寄存器功能的测试方法2、 掌握4位双向移位寄存器的逻辑功能 二、实验仪器及设备1、 EEL-II 型电工电子实验台2、 集成器件74LS194 三、实验内容1、 在数字实验箱中插入74LS194,按图6.1接线V CC S 1S 0D SR A D SL B C D GNDQ A Q B Q C Q DCRCP逻辑电平显示器数 据 开 关+5v复位按钮SB单次脉冲74LS194图6.1 74LS194管脚排列图和逻辑功能测试图2、 接线完毕,检查无误后,进行基本功能测试 复位:CR =0,电路复位,Q A Q B Q C Q D =0000 保持:CR 非=1,S 1=S 0=0,Q A ~Q D 状态不变使CR =1,S 1、S 0(工作状态控制端)任意,CP=0或CP=1,则Q A ~Q D 状态也不变表6.1 74LS194双向4位移位寄存器功能表并行置数:置CR=1,S1=S0=10,数据输入端DCBA置为0101,输入单次脉冲,则Q D Q C Q B Q A=0101,如果改变DCBA数据,再按单次脉冲,新数据将置入。

右移位:置CR=1,S1=0,S0=1,D SR=1,D SL=*,输入单次脉冲,则Q A=1,Q B=Q An,Q C=Q Bn,Q D=Q Cn左移位:置CR=1,S1=1,S0=0,D SR=*,D SL=1,输入单次脉冲,则Q D=1,Q C=Q Dn,Q B=Q Cn,Q A=Q Bn3、循环右移应用如将上图中的D SR端接到Q D端,并将寄存器Q D~Q A置为1000,且满足右移条件,在寄存器会右移一个“1”,每4个时钟脉冲完成一次循环。

4、用74LS194组成8位移位寄存器原理如图6.2所示。

逻辑状态显示器图6.2 用74LS194组成8位移位寄存器原理图四、实验报告整理各项测试结果。

实验六创建和应用模板

实验六创建和应用模板

实验六创建和应⽤模板实验六创建和应⽤模板【实验⽬的】1.掌握创建模板的⽅法。

2.掌握使⽤已创建的模板创建⽹页的⽅法。

【实验环境】1.⼯具软件:Dreamweaver CS62.按照本实验提供的⽹页,制作相同的⽹页。

【实验内容】1.按照本实验提供的⽹页,制作相同的⽹页。

2.练习创建模板和使⽤模板制作⽹页的⽅法。

【实验步骤】1.创建模板在使⽤模板之前,要先创建模板,创建模板步骤如下:(1)执⾏【站点】->【新建站点】命令,站点名称:mysite,本地站点⽂件夹:E:\mysite\。

(2)这⼀步有两种⽅法,⼀种⽅法是:执⾏【窗⼝】->【资源】命令,打开“资源”⾯板,选择模板图标。

在“资源”⾯板的右下⽅单击“新建模板”按钮,如图6-1所⽰,输⼊新模板的名称(myTemplate),双击打开该模板,就可以编辑该模板了;另⼀种⽅法是:先建⽴普通⽹页,再把这个⽹页另存为模板,执⾏“⽂件->另存为模板”命令,或在插⼊栏的“常⽤”选项卡中单击“模板”按钮后⾯的下拉箭头,然后在弹出的下拉列表框中选择“创建模板”选项,出现“另存模板”对话框。

图6- 1 “资源”⾯板-模板(3)在“设计”视图中,设计⽹页(⽹页中先插⼊⼀个1⾏2列的表格,然后在其下⽅再插⼊⼀个2⾏2列的表格),如图6-2所⽰。

图6-2 设计⽹页(4)在第⼆个表格的第1个单元格内定位光标。

执⾏【插⼊】->【模板对象】->【可编辑区域】命令。

或在“插⼊栏”的“常⽤”类别中,单击“模板”按钮后⾯的下拉箭头,如图6-3所⽰,并在弹出的下拉列表框中选择“可编辑区域”选项,弹出“新建可编辑区域”对话框,如图6-4所⽰。

图6-3 单击“模板:可编辑区域”按钮图6- 4 “新建可编辑区域”对话框(5)在“名称”⽂本框中输⼊⼀个名称,默认名称为“EditRegion1”。

(注意:不能对模板中的多个可编辑区域使⽤相同的名称。

)(6)单击“确定”按钮,可编辑区域“EditRegion1”创建完成,如图6-5所⽰。

实验六、示波器的调整和使用

实验六、示波器的调整和使用

实验六、示波器的调整和使用示波器是一种用来检测观察信号的常用仪器,其规格和型号很多,但主要组成部分基本相同。

可将信号衰减或放大,可观测信号的波形,测量电压和频率等。

预习要点1、示波器的主要结构和显示波形的基本原理2、示波器的校准和测量3、什么是李萨如图形?一、实验目的1.了解示波器的主要结构和显示波形的基本原理。

2.学会使用信号发生器。

3.学会正确使用示波器观察波形以及测量电压、周期和频率。

二、实验原理示波器是一种能观察各种电信号波形并可测量其电压、频率等的电子测量仪器。

示波器还能对一些能转化成电信号的非电量进行观测,因而它还是一种应用非常广泛的、通用的电子显示器。

1.示波器的基本结构示波器的型号很多,但其基本结构类似。

示波器主要是由示波管、X轴与Y轴衰减器和放大器、锯齿波发生器、整步电路、和电源等几步分组成。

其框图如图1所示。

(1) 示波管示波管由电子枪、偏转板、显示屏组成。

电子枪:由灯丝H、阴极K、控制栅极G、第一阳极A1、第二阳极A2组成。

灯丝通电发热,使阴极受热后发射大量电子并经栅极孔出射。

这束发散的电子经圆筒状的第一阳极A1和第二阳极A2所产生的电场加速后会聚于荧光屏上一点,称为聚焦。

A1与K之间的电压通常为几百伏特,可用电位器W2调节,A1与K之间的电压除有加速电子的作用外,主要是达到聚焦电子的目的,所以A1称为聚焦阳极。

W2即为示波器面板上的聚焦旋钮。

A2与K之间的电压为1千多伏以上,可通过电位器W3调节,A2与K之间的电压除了有聚焦电子的作用外,主要是达到加速电子的作用,因其对电子的加速作用比A1大得多,故称A2为加速阳极。

在有的示波器面板上设有W3,并称其为辅助聚焦旋钮。

在栅极G 与阴极K 之间加了一负电压即U K ﹥U G ,调节电位器W 1可改变它们之间的电势差。

如果G 、K 间的负电压的绝对值越小,通过G 的电子就越多,电子束打到荧光屏上的光点就越亮,调节W 1可调节光点的亮度。

实验六 集成运算放大器的线性应用(最全)word资料

实验六 集成运算放大器的线性应用(最全)word资料

实验六集成运算放大器的线性应用(最全)word资料实验六 集成运算放大器的线性应用一、设计目的1.熟悉µA741集电路使用技术要求。

2.掌握µA741的运算电路的组成,并能验证运算的功能。

二、电路结构及说明1.反相放大器电路结构:理想条件下,表达式:1f i o u R Ru u A -==。

说明:21R R =时电路保持平衡。

2.同相放大器电路结构理想条件下,表达式:1f i o u 1R R u u A +==。

说明:21R R = ,f 3R R =电路保持平衡,减少输入引起失调电压的误差。

3.反相比例加法器电路结构 理想条件下,表达式)(B A 4fo u u R R u +-=。

说明:43R R =,543//R R R =电路保持平衡;单电源供电,利用分压方式得A u 、B u 。

4.差动减法器电路结构 理想条件下,达式)(B A 3fo u u R R u --=。

说明:43R R =电路保持平衡。

5.反相积分器电路结构理想条件下,表达式:dt t u CR u )(1i 1o ⎰-=。

说明:输入方波信号,输出是输入对时间的积分,负号表示输入与输出反相。

当输入电压为方波时,输出电压为三角波,其输出电压的峰值为:)2(211P -SP P -OP TC R u u -=(1)C 为反馈元件。

f R 为分流电阻,它是给直流反馈提供通路避免失调电压在输出端产生积累电荷,使积分器产生饱和,f R 取大些可改善积分线性。

(2)21R R =保持电路平衡。

(3)当选择时间常数T C R ==1τ时,那么:P -SP 1P -SP P -OP 41)2(21u T C R u u -=-=。

(其中T 表示信号频率的周期) 三、实验仪器1. 直流稳压电源 一台 2.函数信号发生器 一台 3.示波器 一台 4.晶体管毫伏表 一台 5.数字万用表 一块 四、设计要求和内容1.反相放大器。

实验6缓冲区分析应用综合实验

实验6缓冲区分析应用综合实验

z实验六、缓冲区分析应用(综合实验)一、实验目的缓冲区分析是用来确定不同地理要素的空间邻近性和邻近程度的一类重要的空间操作,通过本次实习,我们应达到以下目的:1.加深对缓冲区分析基本原理、方法的认识;2.熟练掌握距离制图创建缓冲区技术方法。

3.掌握利用缓冲区分析方法解决地学空间分析问题的能力。

二、实验准备数据准备:图层文件point.shp,lline.shp,polygon.shp三、实验内容及步骤1. 距离制图-创建缓冲区1.1 点要素图层的缓冲区分析1)在ArcMap中新建地图文档,加载图层:StudyArea ,point2)设置本次实验的工作空间。

打开主菜单<地理处理> - <环境>,打开环境设置对话框,设置当前工作空间和临时工作空间。

3)打开Arctoolbox,arctoolbox里面的空间分析-》距离分析-》欧氏距离,按下图所示设置各参数注:在ArcView GIS 3.x中Find Distance功能与ArcGIS 中<<欧氏距离>>制图功能相同。

点击“环境…”按钮,进行处理范围设置,如下:设置“处理范围”,使其与图层StudyArea 相同4)显示并激活由point.shp产生的新栅格主题,edt_pntlyh。

注意:在进行分析时,若选中了point图层中的某一个或几个要素,则缓冲区分析只对该要素进行;否则,对整个图层的所有要素进行。

1.2 线要素图层的缓冲区分析1)在ArcMap中,新建地图文档,加载line图层,点击常用工具栏中的将地图适当缩小。

2)分别选中图层line中的两条线,进行缓冲区分析,注意比较线的缓冲区分析与点的缓冲区分析有何不同。

方法:打开Arctoolbox,arctoolbox里面的空间分析-》距离分析-》欧氏距离,设置“环境设置”中“处理范围”为“与显示相同”。

点击确定。

(3)取消选定,对整个line层面进行缓冲区分析,观察与前两个分析结果的区别(如下图)。

实验五CMOS集成逻辑门的逻辑功能测试报告模板实验六 译码器及其应用

实验五CMOS集成逻辑门的逻辑功能测试报告模板实验六  译码器及其应用

实验五CMOS集成逻辑门的逻辑功能测试一、实验目的1、掌握CMOS集成门电路的逻辑功能和器件的使用规则。

2、学会CMOS集成门电路逻辑功能的测试方法。

二、实验原理本实验将测定与门CC4081,或门CC4071,非门74LS04,与非门CC4011,或非门CC4001的逻辑功能。

各集成块的引脚排列图如下:CC4081四2输入与门CC4071四2输入或门74LS04六反相器(非门)CC4011四2输入与非门CC4001四2输入或非门CMOS电路的使用规则由于CMOS电路有很高的输入阻抗,这给使用者带来一定的麻烦,即外来的干扰信号很容易在一些悬空的输入端上感应出很高的电压,以至损坏器件。

CMOS电路的使用规则如下:V DD接电源正极,V SS接电源负极(通常接地⊥),不得接反。

CC4000系列的电源允许电压在+3~+18V范围内选择,实验中一般要求使用+5~+15V。

所有输入端一律不准悬空,闲置输入端的处理方法:按照逻辑要求,直接接V DD(与非门)或V SS(或非门)。

在工作频率不高的电路中,允许输入端并联使用。

输出端不允许直接与V DD或V SS连接,否则将导致器件损坏。

在装接电路,改变电路连接或插、拔电路时,均应切断电源,严禁带电操作。

焊接、测试和储存时的注意事项:电路应存放在导电的容器内,有良好的静电屏蔽;焊接时必须切断电源,电烙铁外壳必须良好接地,或拔下烙铁,靠其余热焊接;所有的测试仪器必须良好接地。

三、实验设备与器件数字电路实验箱、CC4011、CC4001、CC4071、CC4081。

四、实验内容测试验证CMOS各门电路的逻辑功能,判断其好坏。

与非门CC4011、与门CC4081、或门CC4071及或非门CC4001逻辑功能,其引脚见附录。

以CC4011为例:测试时,选好某一个14P插座,插入被测器件,其输入端A、B接逻辑开关的输出插口,其输出端Y接至逻辑电平显示器输入插口,拨动逻辑电平开关,逐个测试各门的逻辑功能,并记录。

实验六 触发器及其应用

实验六触发器及其应用班级__________ 姓名学号______一、实验目的1、掌握JK、D和T触发器的逻辑功能及使用方法。

2、掌握集成触发器74LS112(双JK触发器)及CD4013(D触发器)的使用方法。

3、理解触发器之间相互转换的方法。

二、实验设置与器件1、+5V直流电源2、双踪示波器(另配)3、连续脉冲源4、单次脉冲源5、十六位开关电平输出6、十六位开关电平输入及高电平显示7、74LS112(或CC4027) 74LS00(或CC4011) CC4013三、实验原理触发器具有两个稳定状态,通常把Q=0,Q=1的状态定为触发器“0”状态;而把Q=1,Q=0定为“1”状态。

在一定的外界信号作用下,可以从一个稳定状态翻转到另一个稳定状态,它是一个具有记忆功能的二进制信息存贮器件,是构成各种时序电路的最基本逻辑单元。

1、JK触发器本实验采用74LS112双JK触发器,属下降沿触发的边沿触发器。

引脚功能及逻辑符号如图6-1所示。

图6-1 74L112双JK触发器引脚功能及逻辑符号JK触发器的特性方程为Q n+1=J Qn+K Q nJK触发器的功能表如表6-1所示。

表6-1注:×——任意态; ↓——高到低电平跳变; Q n(Q n)——现态;Q n+1(Q n+1)——次态 φ——不定态 2、D 触发器本实验采用CD4013双D 触发器。

其输出状态取决于CP 脉冲上升沿到来时的D 端输入。

特性方程为Q n+1=D 。

图6-2为双D 触发器CD4013的引脚排列和逻辑符号。

其功能表如表6-3。

图6-2 CD4013引脚排列及逻辑符号 表6-2 表6-33、触发器之间的相互转换在集成触发器的产品中,每一种触发器都有自己固定的逻辑功能。

但可以利用转换的方法获得具有其它功能的触发器。

例如将JK 触发器的J 、K 两端连在一起,就得到所需的T 触发器。

如图6-3(a)所示,其状态方程为:Q n+1=T Q n+ T Qn图6-3 JK 触发器转换为T 、T'触发器T触发器的功能如表6-3所示。

实验六 计数器及其应用

计数器及其应用一、实验目的1.学习集成触发器构成计数器的方法;2.掌握中规模集成计数器的使用方法及功能测试方法;3.用集成电路计数器构成1/N分频器。

二、实验预习要求1.复习计数器电路工作原理;2.预习中规模集成电路计数器74LS192的逻辑功能及使用方法;3.复习实现任意进制计数的方法。

三、实验原理计数器是典型的时序逻辑电路,它用来累计和记忆输入脉冲的个数。

计数是数字系统中很重要的基本操作,集成计数器是最广泛应用的逻辑部件之一。

计数器种类较多,按构成计数器中的多触发器是否使用一个时钟脉冲源来分,有同步计数器和异步计数器;根据计数制的不同,分为二进制计数器、十进制计数器和任意进制计数器;根据计数的增减趋势,又分为加法、减法和可逆计数器。

还有可预置数和可编程序功能计数器等。

图实验6.1 四位二进制异步加法计数器1. 用D触发器构成异步二进制加/减计数器。

如图实验6.1所示,用四个D触发器构成四位二进制异步加法计数器,其连接特点是将D触发器接成T’触发器,再由低位触发器的/Q 端和高一位的CP端相连。

如果将上图中的Q端与高一位的CP端相连,即可构成四位二进制异步减法计数器。

2. 中规模+进制计数器74LS192是同步十进制可逆计数器,如图实验6.2所示。

图实验6.2 74LS192逻辑符号及引脚排列CPu-加计数端;CPD-减计数端;/LD-置数端;/CO-非同步进位输出端;/BO-非同步借位输出端;D0、D1、D2、D3-计数器输入端;CR-清零端;Q0、Q1、Q2、Q3-数据输出端。

表实验6.1 74LS192逻辑功能表3. 4位同步二进制加法计数器74LS161表实验6.2 74LS161功能表CP-计数脉冲;D0~D3-数据输入端;/CR-清除端;Q0~Q3-输出端;/LD-预置端;CTP、CTT-使能端图实验6.3 74LS161引线排列图4. 计数器级联使用及任意进制计数器的实现(1)任意进制的实现图实验6.4所示利用74LS192采用复位法构成五进制计数器。

08初中物理电学实验PPT 实验六 测量小灯泡及发光二极管的电功率 物理实验设计与应用教学课件

4KΩ 2KΩ 4KΩ
(1)
(2)
6KΩ
12KΩ
(3)?
(4)?
思考题
3.有两个电阻器R1和R2,将其串联后的总电阻是12 欧姆,而将其并联后总电阻的12倍近似于32欧姆, 则R1和R2的电阻各为多大?
R1=? R2=? 12Ω
R1=?
R2=?
R1R212
R1R2 1232 R1 R2
4、8
扩展的参考内容:
A
B
R1
R2
R3
R
电阻串联时,其等效总电X 阻为各个电阻的和.
即: RR 1R 2R n
将一个个电阻直接跨接在某电路A、B的两端,这种接法称 为并联接法,见图7-2。
R1
A
B
R2
R3
RX
电阻并联时,其等1 1
R R1 R2
Rn
将电阻先按不同的串、并联方式组合在一起,然后 跨接在某电路A、B的两端,这种接法称为串并联 (混联)接法,见图3。
0
-
+
V G
G
0
-
+
A G
G
根据表2的要求计算出发光二极管的实际电功率。
表2
实际电压
电压(V) 电流(A)
等于额定电压值
1.6
0.006
低于额定电压值
1.2
0.004
略高于额定电压值 2.0
0.009
发光情况 电功率(W)
正常
0.010
偏暗
0.004
偏亮
0.018
思考题
1.测量小灯泡及发光二极管的电功率除了用伏安法外,还能 用其他方法吗?请设计出不同的测量方法。
2.小灯泡及发光二极管在未接入电路时分别测出的电阻值有 什么区别?

实验六--迈克尔逊干涉仪的调整和使用

实验六 迈克尔逊干涉仪的调整和使用实验性质:综合性实验 教学目的和要求:1. 了解迈克尔逊干涉仪的原理并掌握调节方法;2. 观察等倾干涉条纹的特点;3. 测定He-Ne 激光的波长。

教学重点与难点:对迈克尔逊干涉仪的工作原理与等倾干涉概念的理解;本实验仪器的正确调节与使用以及正确记录有效数字。

一.检查学生的预习情况检查学生预习报告:内容是否完整,表格是否正确。

二.实验仪器和用具:迈克尔逊干涉仪,氦氖激光器、毛玻璃屏 三.讲解实验原理:(一)实验仪器介绍1. 迈克尔逊干涉仪的构造迈克尔逊干涉仪的构造如图33-1。

其主要由精密的机械传动系统和四片精细磨制的光学镜片组成。

1G 和2G 是两块几何形状、物理性能相同的平行平面玻璃。

其中1G 的第二面镀有半透明铬膜,称其为分光板,它可使入射光分成振幅(即光强)近似相等的一束透射光和一束反射光。

2G 起补偿光程作用,称其为补偿板。

1M 和2M 是两块表面镀铬加氧化硅保护膜的反射镜。

2M 是固定在仪器上的,称其为固定反射镜,1M 装在可由导轨前后移动的拖板上,称其为移动反射镜。

迈克尔逊干涉仪装置的特点是光源、反射镜、接收器(观察者)各处一方,分得很开,可以根据需要在光路中很方便的插入其它器件。

1M 和2M 镜架背后各有三个调节螺丝,可用来调节21M M 和的倾斜方位。

这三个调节螺丝在调整干涉仪前均应先均匀地拧几圈(因每次实验后为保证其不受应力影响而损坏反射镜都将调节螺丝拧松了),但不能过紧,以免减小调整范围。

同时也可通过调节水平拉簧螺丝与垂直拉簧螺丝使干涉图像作上下和左右移动。

而仪器水平还可通过调整底座上三个水平调节螺丝来达到。

图11 ——主尺2 ——反射镜调节螺丝3 ——移动反射镜1M4 ——分光板1G5 ——补偿板2G6 ——固定反射镜2M7 ——读数窗 8 ——水平拉簧螺钉 9 ——粗调手轮10——屏11——底座水平调节螺丝确定移动反射镜1M 的位置有三个读数装置:①主尺——在导轨的侧面,最小刻度为毫米,如图:②读数窗——可读到0.01mm,如图:③带刻度盘的微调手轮,可读到0.0001mm,估读到105 mm,如图:2.迈克尔逊干涉仪的光路迈克尔逊干涉仪的光路如图2。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验六图及其应用
数据结构实验六图及其应用
1、实验目的
? 熟练掌握图的两种存储结构(邻接矩阵和邻接表)的表示方法 ? 掌握图的基本运算及应用
? 加深对图的理解,逐步培养解决实际问题的编程能力
2、实验内容:
采用邻接表或邻接矩阵方式存储图,实现图的深度遍历和广度遍历;用广度优先搜索方法找出从一顶点到另一顶点边数最少的路径。

1.问题描述:利用邻接表存储结构,设计一种图(有向或无向),并能够对其进行如下操作:
1) 创建一个可以随机确定结点数和弧(有向或无向)数的图; 2) 根据图结点的序号,得到该结点的值;
3) 根据图结点的位置的第一个邻接顶点的序号,以及下一个邻接顶点的序号;
4) 实现从第v 个顶点出发对图进行深度优先递归遍历; 5) 实现对图作深度
优先遍历;
6) 实现对图进行广度优先非递归遍历; 编写主程序,实现对各不同的算法调用。

2.实现要求:(以邻接表存储形式为例)编写图的基本操作函数::
对图的各项操作一定要编写成为C(C++)语言函数,组合成模块化的形式,
每个算法的实现要从时间复杂度和空间复杂度上进行评价。

1)“建立图的邻接表算法”:CreateGraph(ALGraph *G) 操作结果:采用邻接表存储结构,构造没有相关信息的图G
2)“邻接表表示的图的递归深度优先遍历算法”:DFSTraverse(ALGraph
G,void(*Visit)(char*)) 初始条件:图G 已经存在;
操作结果:返回图的按深度遍历的结果。

3)“邻接表表示的图的广度优先遍历算法”: BFSTraverse(ALGraph
G,void(*Visit)(char*)) 初始条件:图G 已经存在;
操作结果:返回图的按广度遍历的结果。

4)“邻接表从某个结点开始的广度优先遍历算法”:BFS(ALGraph G, int v)
初始条件:图G 已经存在;
操作结果:返回图从某个结点开始的按广度遍历的结果。

分析: 修改输入数据,预期输出并验证输出的结果,加深对有关算法的理解。

3、实验指导
本实验以图的邻接表存储结构为例,要求完成基本要求,同时对无向图,有向网,无向网也一并实现其相关的操作,课后同学们可以用邻接矩阵式存储结构完
成以上操作。

1.首先将图的链接存储结构定义放在一个头文件:如取名为ALGraphDef.h。

2.链接表式存储图的基本操作也放在一个文件中ALGraphAlgo.h.
3.将函数的测试和主函数组合成一个文件,如取名为文件ALGraphUse.cpp. 由于要用到队列技术,对于队列的数据结构定义和基本操作函数的描述就可以借
助实验二的结果,不必重写。

4、基本实验的参考程序
1.文件pubuse.h 头文件;
2.文件LinkQueueDef.h 是实验3 中的链式队列的存储结构; 3.文件LinkQueueAlgo.cpp 是实验3 中的链式队列的基本操作;
4.文件ALGraphDef.h 定义了图的链接存储结构(以邻接表存储表示)
#define MAX_VERTEX_NUM 20
typedef enum{DG,DN,AG,AN}GraphKind; /* {有向图,有向网,无向图,无向网} */ typedef struct ArcNode {
int adjvex; /* 该弧所指向的顶点的位置*/
struct ArcNode *nextarc; /* 指向下一条弧的指针*/ InfoType *info; /* 网的权值指针) */ }ArcNode; /* 表结点*/ typedef struct {
VertexType data; /* 顶点信息*/
ArcNode *firstarc; /* 第一个表结点的地址,指向第一条依附该顶点的弧的
指针*/ }VNode,AdjList[MAX_VERTEX_NUM]; /* 头结点*/ typedef struct { AdjList vertices;
int vexnum,arcnum; /* 图的当前顶点数和弧数*/ int kind; /* 图的种类标志*/ }ALGraph;
5.文件ALGraphAlgo.h 定义了链接表式存储图的基本操作
/*ALGraphAlgo.cpp 图的邻接表存储(存储结构由ALGraphDef.h 定义)的基
本操作*/ int LocateVex(ALGraph G,VertexType u)
{ /* 初始条件: 图G 存在,u 和G 中顶点有相同特征*/
/* 操作结果: 若G 中存在顶点u,则返回该顶点在图中位置;否则返回-1 */ int i;
for(i=0;iadjvex=j;
if(G.kind==1||G.kind==3) /* 网*/ {
p->info=(int *)malloc(sizeof(int)); *(p->info)=w; } else
p->info=NULL; /* 图*/
p->nextarc=G.vertices[i].firstarc; /* 插在表头*/
G.vertices[i].firstarc=p;
if(G.kind>=2) /* 无向图或网,产生第二个表结点*/ {
p=(ArcNode*)malloc(sizeof(ArcNode)); p->adjvex=i;
if(G.kind==3) /* 无向网*/ {
p->info=(int*)malloc(sizeof(int)); *(p->info)=w; }
else
p->info=NULL; /* 无向图*/
p->nextarc=G.vertices[j].firstarc; /* 插在表头*/
G.vertices[j].firstarc=p; } }
return OK; }
void DestroyGraph(ALGraph &G)
{ /* 初始条件: 图G 存在。

操作结果: 销毁图G */ int i;
ArcNode *p,*q; G.vexnum=0; G.arcnum=0;
for(i=0;inextarc;
if(G.kind%2) /* 网*/ free(p->info); free(p); p=q; } } }
VertexType* GetVex(ALGraph G,int v)
{ /* 初始条件: 图G 存在,v 是G 中某个顶点的序号。

操作结果: 返回v 的值*/ if(v>=G.vexnum||vadjvex; else
return -1;
}
int NextAdjVex(ALGraph G,VertexType v,VertexType w)
{ /* 初始条件: 图G 存在,v 是G 中某个顶点,w 是v 的邻接顶点*/ /* 操作结果: 返回v 的(相对于w 的)下一个邻接顶点的序号。

*/ /* 若w 是v 的最后一个邻接点,则返回-1 */ ArcNode *p; int v1,w1;
v1=LocateVex(G,v); /* v1 为顶点v 在图G 中的序号*/
w1=LocateVex(G,w); /* w1 为顶点w 在图G 中的序号*/
p=G.vertices[v1].firstarc;
while(p&&p->adjvex!=w1) /* 指针p 不空且所指表结点不是w */
p=p->nextarc;
if(!p||!p->nextarc) /* 没找到w 或w 是最后一个邻接点*/ return -1; else /* p->adjvex==w */
return p->nextarc->adjvex; /* 返回v 的(相对于w 的)下一个邻接顶点的序号*/ }
Boolean visited[MAX_VERTEX_NUM]; /* 访问标志数组(全局量) */
void(*VisitFunc)(char* v); /* 函数变量(全局量) */ void DFS(ALGraph G,int v)
{ /* 从第v 个顶点出发递归地深度优先遍历图G。

算法7.5 */ int w;
VertexType v1,w1;
strcpy(v1,*GetVex(G,v));
visited[v]=TRUE; /* 设置访问标志为TRUE(已访问) */
VisitFunc(G.vertices[v].data); /* 访问第v 个顶点*/
for(w=FirstAdjVex(G,v1);w>=0;w=NextAdjVex(G,v1,strcpy(w1,*GetVex(G,w) ))) if(!visited[w])
DFS(G,w); /* 对v 的尚未访问的邻接点w 递归调用DFS */ }
void DFSTraverse(ALGraph G,void(*Visit)(char*)) { /* 对图G 作深度优先遍历。

算法7.4 */ int v;
VisitFunc=Visit; /* 使用全局变量VisitFunc,使DFS 不必设函数指针参数*/ for(v=0;v<G.vexnum;v++)
visited[v]=FALSE; /* 访问标志数组初始化*/ for(v=0;v<G.vexnum;v++) if(!visited[v])
DFS(G,v); /* 对尚未访问的顶点调用DFS */ printf(\ }
typedef int QElemType; /* 队列类型*/ #include\ #include\。

相关文档
最新文档